I quietly released Gallus on Friday evening, mostly intending it to be a period of getting accustomed with the Play store mechanics and so on, then doing the real promo thing this morning. The app unexpectedly got linked to from an enthusiast discussion board, drawing thousands of people to do an install.
This was an enormously welcome event, but it led to a lot of necessary quick fixes. Based upon some negative comparisons with Instagram’s Hyperlapse, for instance, I applied caffeine in heavy amounts and finished a white-board todo item, developing what I think is a tremendous smoothing algorithm. An implementation that I am very proud of. Note that version 1.0.4, released this morning and dripping through Google Play, offers the optimum smoothing experience, so if you have earlier version please be patient, and then take a look at the settings available (for instance if you want more aggressive stabilization, alter the smoothing degrees option, or the span of time it considers within that smoothing window).
It’s fast. It’s very effective. It doesn’t over-correct, but instead identifies motions and transitions and smooths according to the perceive user intention. The application itself is about as efficient as it could possibly be, using every hardware-assisted option the host device offers.
I think the smoothing capacity easily goes head to head with Instagram’s efforts. This of course depends upon the quality and timeliness of the gyroscope in the host device, but the results are better than I expected.
EDIT 2015-03-23– one of the least impressive devices running Gallus tended to be the Nexus 5 (and presumably the Nexus 6, though I haven’t had a chance to test that), owing to its highly variable image processing pipeline timing. I put some work in on the weekend and completely refactored the camera interface, using the camera2 interface on Lollipop devices with the non-legacy driver set (e.g. the Nexus 4 presents a legacy driver through the camera2 interface, leading to no end to troubles, so the new interface it restricted to devices that fully support it, using the classic interface on older devices), yielding some dramatic timing advantages. This was released to the Play store this evening, and when it hits is version 1.0.11. Note that because the code was also expanded to support any number of cameras (not yet surfaced, but the app is fully ready to use front-facing or other cameras. It’s actually ready to record from multiple cameras simultaneously if the device supports it, although few do), it will wipe out existing preferences, however before you reconfigure your preferences give the new defaults a try — the new pipeline, especially on new devices, changing timing thresholds.
I also had to do a lot of guards and protected checks around bugs people faced on their unique devices. One of the things about having attention from an enthusiast site is that many of the users will have custom ROMs, permission overrides, and so on, so you yield unique scenarios that you wouldn’t have seen otherwise. This was a great thing, and got me some early feedback and responses that allowed me to put conditionals that dealt with scenarios that I didn’t even think possible.
Since Friday evening I’ve pushed 7 different updates to the application. Most users wouldn’t see this many updates (the update checks are much less frequent, so most would have skipped a number along the way), but for those who did I apologize, and hope you have auto-updates enabled. This obviously isn’t my plan going forward, and now that I think the major potential fault conditions have been resolved, and the smoothing algorithm and set of settings are ideal and complete enough, I’m going to focus on the UI.
It will improve very rapidly.