Why do I see bad flickering on my double-buffered surfaces?
The default SDL video driver does not do VBL-based flipping so it cannot sync to the monitor refresh. The DrawSprocket driver does do VBL-sync. Hold down the command key when starting your app and select the DSp driver. Or, you can add this line before you call SDL_Init():
putenv("SDL_VIDEODRIVER=DSp");