[Android Software/Hacking General [Developers Only]] MrHassell:
still working on the camera app?

Sure.

Have you looked at other Android applications, which have partially achieved this? They exist.

From the sound of your inventory, you've talented engineers, resources and business sense. Specific issue is to do with variants in hardware and being able to support multiple devices, in most cases not at all 'generic'.

Sony IMX046 found within Xperia X10 models - 8.1MP and the IMX081PQ 16.1MP found in the Arc after debuting as a Cybershot. Both quite different devices, one having double resolution, back lit CMOS sensors and other features, radical enough to place it in a league of it's own. Now try to make that work with a HTC 5MP camera and conjunction it with the front facing camera when video conferencing...

Consider details like pixel arrays, focus, aperture, transistor gates, photo cathodes, anti-reflective coatings, firmware versions, available resolutions (not just desired), operating modes, effects... filters... all different for each device, each manufacturer, each version or release of Android.

To build an database of hardware, sensors, modes, focus sets, image formats, firmware and drivers itself is not hard but is the backbone of what you have in front of you. Provide a platform able to identify the package driver and hardware provider (the right 'glue') itself not overtly difficult or impossible.. perhaps a challenge!

Each driver, device, firmware has significant differences which can not be evaluated on 'one size fits all' method. A highly flexible architecture is required, modular in so far as to analyze and detect variations fail safe, apply the correct logic and driver for base provider as a structured and autonomous instance.

Consider this code from a Gingerbread firmware, designed for a Sony X10. SE will not release Gingerbread (2.3.x) for the X10 as they declared that 2.1 (Eclair) is suitable for the hardware and the software upgrade provides no value.

static const camera_size_type picture_sizes[] = {

{ 3264, 2448 },	// 8MP

{ 2592, 1944 },	// 5MP

{ 2560, 1920 },	// 5MP (reduced)

{ 2048, 1536 },	// 3MP QXGA

{ 1920, 1200 },	// WUXGA

{ 1920, 1080 },	// HD1080 - HDTV

{ 1600, 1200 },	// 2MP UXGA

{ 1680, 1050 },	// WSXGA+

{ 1600, 900 },	// HD+

{ 1440, 900 },	// WSXGA

{ 1280, 768 },	// WXGA

{ 1280, 720 },	// HD720 (HDTV)

{ 1152, 864 },	// XGA+

{ 1024, 768},	// 1MP XGA

{ 800, 600 },	// SVGA

{ 800, 480 },	// WVGA

{ 640, 480 },	// VGA

{ 352, 288 },	// CIF

{ 320, 240 },	// QVGA

{ 176, 144 }	// QCIF

};

If you know what you are looking at, you can see some of these resolutions are not supported by the camera and will generate errors in software, leaving unhappy customers! Considering that this is an extract from an active AOSP project to port Gingerbread for the X10, for the love of doing it with no real benefit to the developers involved... it's not bad at all but will become refined into something more like this;

static const camera_size_type picture_sizes[] = {

{ 820, 616 },

{ 3280, 616 },

{ 3280, 2464 },

};

Reason the camera itself only supports 3 possible modes and these have to be defined exactly in the right way for it to work, for a single device and a single pixel out will error, even the order of the driver.. notice bold emphasis on resolution.

0.5Mp - 4X Horiz & Vert. | 2Mp - 4X Vertical Elim. | 8MP - Full Resolution​

Saying it simply, it's not impossible but it's not easy!