So how did I perform live iPad app demos on the projector? Well, I didn't jailbreak to run background screen mirroring; and I didn't spend ages customising the demo apps to draw their UI on both the iPad and external displays (both of which are possible options).
I fortunately found a little hack on Google Code called iphoneos-screen-mirroring. It simply provides a UIApplication category that gives you a single method to call to enable mirroring of the iPad display to the external display. The minimum amount of code you'd need to add to your app delegate is:
#import "UIApplication+ScreenMirroring.h"
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
/* ... your app set up ... */
// Start screen mirroring to Video Out (if connected)
[[UIApplication sharedApplication]
setupScreenMirroringWithFramesPerSecond:5];
}
The screen mirroring hack has no effect until an external adapter is plugged in to the iPad. When an external display is connected it kicks off a loop that continuously snapshots the main iPad display and copies the contents to the external display. The mirroring frame rate can be customised when setting it up (like in the above example) and the reason to lower the frame rate is because the snapshotting kills the iPad performance quite a bit. Not enough to prevent demoing of apps that don't refresh the display too much, but animations and scrolling suffer quite a bit.
For my case the hack worked well enough at 5 fps. If you were trying to demo a 30 fps game I think you'd be a little disappointed.
Note that the mirroring hack uses UIGetScreenImage() to snapshot the main screen and so is not App Store "safe".
A similar project, robterrell's TVOutManager, claims to provide an App Store friendly technique (with certain caveats). However, I found the performance to be slightly worse with that one and I wasn't planning on submitting the mirroring code to the App Store so I stuck with iphoneos-screen-mirroring.