The camera on JellyBean reached the same functional/stability level as preview15 for CM9. There might be some minor issues but we're good.
Preview rotation issues
Our beloved TouchPad has a front camera. The front cameras in Android are expected to be working in mirror mode. Our sensor is configured for working in normal mode (as rear camera) which is the cause of the preview rotation issues we had. It is possible to change the sensor configuration (in kernel) to make it working in mirror mode. However while this solves the preview rotation this breaks thevideo records, pics and Skype. So I tried to reconfigure the camera sensor on runtime - to mirror mode for preview and normal mode for video recording and taking pics. However didn't fixed the Skype.
In the preview3 I have modify the libcameraservice (which is responsible for rotating the preview) to work differently, which worked. But adding an flag FIRST_CAMERA_NOT_MIRRORED (or something like that) wasn't good enough to get merged to CM sources (I didn't even posted it to the gerrit).
So after discussion with jcsullins I decided to leave the sensor working in normal mode but to flip (vertically & horizontally) the preview frames in camerahal to look exactly the same as in mirror mode. This change has been introduced in preview4 and is the final one.
However not all 3rd party apps works well with front cameras. Some of them has a configuration option to fix the preview rotation like ucam (works well) and camera zoom fx (but the option is not working). Some of them don't and in that case there's nothing I can do about it.
Panorama mode
The preview in panorama mode in stock camera app is rotated by 90 degrees. This is by the design - our camera is rotated 90 degrees so it produces the pics of size 768x1024. The panorama mode needs to use the larger value for width so it has to rotate the preview. Changing that will require patching the camera app and will break the panorama mode. So this is not an option.
The second issue are the artefacts that appear in the preview. For some other platforms setting the global flags QCOM_NO_SECURE_PLAYBACK or QCOM_ICS_COMPAT (or maybe ANCIENT_GL) was reported to fix this issue but none of them worked for me. So we might have a little different issue. As we're using quite old kernel there might be some incompatibility with structures exchanged between kernel and qcom drivers. It may not be so easy to track down the issue and fix it. In fact fixing it may break other things so I decided not to touch it.
Edited by Dorregaray, 10 December 2012 - 11:56 PM.