I've got the projection mapping code working quite well now, I'm in the process of building some classes to manage lots of projection surfaces at once in order to keep the code clean. Since the last post I've also got video playback (live and pre-recorded) working nicely with this system. Also, some fun example footage of the code in action! Here's an example of the calibration process, you can just drag the corners directly to the real-world points so it all lines up on the projector. This is essentially the same calibration technique used in the keystone library with a few updates. I've added a center point to drag the entire surface, and when you drag with the right mouse button it moves in 1/10th pixel increments for fine adjustments.
Here's the same content split up onto two surfaces and projected onto some random cardboard boxes I had in my office.