FilmLab December update: FilmLab for Android progress

I’ve been holding off on writing this post, hoping to be able to announce that beta testing of FilmLab for Android is underway. But despite my best efforts, the Android app isn’t quite ready for testing. Still, I wanted to give an update on my progress, and talk about what Android users can expect in the next few weeks.

Technical challenges overcome

FilmLab for Android uses most of the same code as FilmLab for iOS, but there were a few parts of the system that needed to be rebuilt from scratch. The biggest challenge here was the graphics processing. The real-time preview in FilmLab requires GPU-accelerated graphics, similar to what 3D games use. On iOS, I use Apple’s Metal and CoreImage frameworks, which are pretty easy to use and happen to have all the features I need for FilmLab built in. For the Android app, though, I needed to use a different framework called OpenGL.

To be honest, OpenGL was pretty intimidating. It has a reputation for being hard to learn, and I always thought of it as something that only hardcore game developers understood. So I tried my best to avoid it by attempting to implement Android graphics processing a couple of other ways. But it became obvious that to get good performance, OpenGL was the right solution.

So I bit the bullet and learned enough OpenGL to implement FilmLab image processing. And it wasn’t that bad! (Well, at least compared to some of the other technical challenges that have come up in FilmLab development.) I’m happy to say that it works great and was totally worth it. The preview runs smoothly on current devices, and acceptably fast even on my oldest test device, a six-year-old Nexus 4. And because OpenGL is cross platform, I may be able to use the same code in the future for other platforms like desktop apps and even the web.

Current status

Having finished that low-level technical work, I’ve been pushing as hard as I can to get the rest of the Android app built out and ready for testing. Over the last two weeks, I’ve finished the following:

  • ☑ Camera view
  • ☑ Pinch to zoom and pan
  • ☑ Camera toolbar with capture button
  • ☑ Burst capture
  • ☑ Raw processing
  • ☑ Multiple image alignment and stacking for denoising and upscaling

That leaves the following short list of items to get done before the beta release:

  • ☐ Crop tool UI (partially complete)
  • ☐ Toolbar UI for film type selection in camera view
  • ☐ Toolbar UI for manual color balance, contrast, and exposure
  • ☐ Save / export UI
  • ☐ Progress / status UI
  • ☐ Bug fixes

That should be about a week of work. I’m on vacation next week, but I’ll be back to it the first week of January. My goal is going to be to start beta testing in early January and ship a public release by the end of the month.

It’s been a lot of work to get to this point, but I’m very happy with how FilmLab for Android is coming together, and fitting into the overall plan for FilmLab. Going forward, this is going to put FilmLab for iOS and Android on equal footing, making FilmLab accessible to anyone with a modern smartphone.