It takes time and lots of effort, and ill argue is easier on a quasi standard platform (processor wise) but apps like this show how much juice can be squeezed out of the existing hardware by handcrafting the code.
Thanks for the download! Let me know if you've got any feedback, I can be easily contacted through the app. :D
I'd just like to add that in addition to handcrafted code, choosing the right algorithm and always trying to "do less work" (less cycles, less data IO, better use of registers) makes a big difference.
Some feedback, the default exposure settings showed my room as pitch black (I have it very dim now), the native iphone5 camera adjusted automatically. I was able to snap a shot by pointing to the light. Personally I prefer not to crank the gain on the sensor.
haha, yes, if only it pays to be lazy. :) Sometimes doing "less work" means more up-front planning and thinking. Not a bad thing necessarily.
Interesting on the native camera adjustment. SnappyCam will use the "low light boost" high ISO capabilities of the camera. I'll have a play around with it.
Otherwise, does the continuous flash help you much?
Enabling that automatically is an interesting problem in itself: I'd have to estimate the light level based on the camera preview... or perhaps from the preview metadata.
Will think about how that might be done. Thanks for the thought. :-)
I'm impressed as hell by all of this, the fast DCTs and the crafting of the entire process to build something so far beyond anything else on the market is great.
A good start is actually the ARM processor; since it's a RISC instruction set, it's quite simple.
I've done lots of assembly in my ugrad days, even writing a Motorola HC11 micro-controller emulator, but ARM would be a much better choice right now.
I found the "Tonic: Whirlwind Tour of Assembly" [1] site invaluable to get me started for SnappyCam, as it covers a lot of the ARM ISA.
For iOS-related assembly, I'd recommend [2].
And for a taste of ARM NEON SIMD, have a look at [3]. The one thing that "clicked" for me on SIMD is that you should look at each register "lane" as trying to unroll a loop. I initially dived in thinking I'd just make a sequential algorithm parallel, which is often too difficult to arrange.
Kudos, I just bought the app!