wow - on closer inspection that looks greater than great! Was going to have a go at writing it but that should work just with a few tweaks. I'm going to build it into another friendly camera api like my previous mmal based one - I'm guessing you'd have no issue with me sharing it around once done? - obviously I'd credit you for it
fyi, the readpixels code is definitely going to be the bottleneck - basically the first bit of cpu work is where it'll slow down with a big image. The arm can not handle a 1080p image at 30hz (maybe at 15hz, with nothing else going on). However what you can do (and what I intend to do) is image processing on a lower resolution image, then when you know the 'interesting' areas, only read those from the hi res image. So for example psuedo code with face detection:
lo_res_bytes = readpixels(0,0,lo_res_width,lo_res_height,lo_res_texture)
facerectangles = getthefacerectangles(lo_res_bytes)
foreach rect in facerectangles:
hi_res_bytes = readpixels(rect.x,rect.y,rect.width,rect.height,hi_res_texture)
Once you have the hi res bytes you can just show them, or submit them for further processing. Obviously this process gets less efficient if you have lots of / big rectangles, but still useful.
p.s. my filters are up on that site if you want to save a bit of work writing new ones