I've been working on a PTP (Picture Transfer Protocol) library in C lately, with the main intent of making a DSLR controller Android app out of it.
Features that will come in the first release:
- Get Live EOS viewfinder image (can't use while recording)
- Interface with ML - Live screen data (320x240, see all Canon menus and ML menus while recording RAW or MOV)
Not a solid replacement for HDMI, but useful (in case you don't have a HDMI adapter, or it blocks the USB port)
Currently 15fps - should be possible to optimize (see
https://github.com/petabyt/ptpview)
- Scripting in Javascript (scripts can run on demand or in background)
- Get live aperture+ISO+shutter speed+image format+battery
- Raise flash
- Take pictures and do BULB shots
- Image/File explorer
- Extensive settings and customization
- Plugins/mods/scripts written in Javascript (run on demand or in background, can modify UI)
- Script generator (timelapse)
Here are features I'll probably add in the future, other than the typical features you'd expect in a camera app:
- Sync camera video start time with phone, use internal phone mic as camera mic
- ML Like overlays over live view
Looking for suggestions

- I only do astrophotography with my camera, so the feature set will be biased.
- The app will not only run on Android, but Linux too (as a web server). It would be possible to connect a Raspberry Pi to your DSLR and control your camera from inside (or technically, anywhere in the world)
- iOS support is not out of the question, but it would be a learning curve. I've never used an modern Apple device apart from when I fixed them, and I don't know how iOS apps are made.
- It's worth noting that the PTP library I made is very portable (and open source,
https://github.com/petabyt/camlib) and can easily be compiled and ported to different platforms.
- The user interface for the app is written in HTML/CSS/JS and is layered over a graphics canvas, where the liveview is drawn. The app is mostly C and Javascript. Under 500 lines of Java code is required the the entire app to work.