I got some progress with the camera. I will upload the patch as soon as I make it work. The problem I have right now is this:
D/CameraHardware( 1660): CameraHardware::pictureThread: picture taken
D/CameraHardware( 1660): CameraHardware::pictureThread: took jpeg picture compressed to 67881 bytes, q=90
D/CameraHardware( 1660): Sending the Shutter message
D/CameraHardware( 1660): CameraHardware::disableMsgType: 2
D/CameraHardware( 1660): Sending the jpeg message
D/CameraHardware( 1660): CameraHardware::disableMsgType: 256
D/CameraHardware( 1660): CameraHardware::pictureThread OK
I/RequestThread-0( 2923): Received jpeg.
I/RequestThread-0( 2923): Producing jpeg buffer...
E/GRALLOC-DRM( 2923): bo.usage:x3/usage:x30 is not GRALLOC_USAGE_HW_FB or GRALLOC_USAGE_HW_TEXTURE
W/GraphicBufferMapper( 2923): lock(...) failed -22 (Invalid argument)
E/Legacy-CameraDevice-JNI( 2923): produceFrame: Failed to lock buffer, error Invalid argument (-22).
E/Legacy-CameraDevice-JNI( 2923): LegacyCameraDevice_nativeProduceFrame: Error while producing frame Invalid argument (-22).
E/AndroidRuntime( 2923): FATAL EXCEPTION: Thread-212
E/AndroidRuntime( 2923): Process: com.android.camera2, PID: 2923
E/AndroidRuntime( 2923): java.lang.UnsupportedOperationException: Unknown error -22
E/AndroidRuntime( 2923): at android.hardware.camera2.legacy.LegacyExceptionUtils.throwOnError(LegacyExceptionUtils.java:69)
E/AndroidRuntime( 2923): at android.hardware.camera2.legacy.LegacyCameraDevice.produceFrame(LegacyCameraDevice.java:516)
E/AndroidRuntime( 2923): at android.hardware.camera2.legacy.RequestThreadManager$2.onPictureTaken(RequestThreadManager.java:224)
E/AndroidRuntime( 2923): at android.hardware.Camera$EventHandler.handleMessage(Camera.java:1094)
E/AndroidRuntime( 2923): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime( 2923): at android.os.Looper.loop(Looper.java:135)
E/AndroidRuntime( 2923): at android.hardware.camera2.legacy.CameraDeviceUserShim$CameraLooper.run(CameraDeviceUserShim.java:144)
E/AndroidRuntime( 2923): at java.lang.Thread.run(Thread.java:818)
W/ActivityManager( 1934): Force finishing activity com.android.camera2/com.android.camera.CameraLauncher
D/PermissionCache( 1677): checking android.permission.READ_FRAME_BUFFER for uid=1000 => granted (73 us)
I/InputDispatcher( 1934): Dropping event because there is no touchable window at (876, 386).
I/InputDispatcher( 1934): Dropping event because there is no touchable window at (877, 387).
I/InputDispatcher( 1934): Dropping event because there is no touchable window at (878, 388).
D/KbdSensor( 1934): poll_setDelay: dev=0xb4556f80 delay-ns=66667000
I/CAM_PhotoModule( 2923): stopPreview
I/RequestQueue( 2923): Repeating capture request cancelled.
I/InputDispatcher( 1934): Dropping event because there is no touchable window at (879, 389).
D/KbdSensor( 1934): poll_setDelay: dev=0xb4556f80 delay-ns=66667000
I/RequestThread-0( 2923): Flushing all pending requests.
E/RequestQueue( 2923): cancel failed: no repeating request exists.
D/OpenGLRenderer( 1934): Render dirty regions requested: true
I/OpenGLRenderer( 1934): Initialized EGL, version 1.4
W/OpenGLRenderer( 1934): Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
D/OpenGLRenderer( 1934): Enabling debug mode 0
E/GRALLOC-DRM( 2923): bo.usage:x3/usage:x30 is not GRALLOC_USAGE_HW_FB or GRALLOC_USAGE_HW_TEXTURE
The problem with the CameraHAL was that some values were not being reported. I faked those values adding:
It does crash later on trying to config EGL14.
This requires removing a parameter from the egl configuration code at file: frameworks/base/core/java/android/hardware/camera2/legacy/SurfaceTextureRenderer:370
int[] attribList = {
EGL14.EGL_RED_SIZE, EGL_COLOR_BITLENGTH,
EGL14.EGL_GREEN_SIZE, EGL_COLOR_BITLENGTH,
EGL14.EGL_BLUE_SIZE, EGL_COLOR_BITLENGTH,
EGL14.EGL_RENDERABLE_TYPE, EGL14.EGL_OPENGL_ES2_BIT,
//EGL_RECORDABLE_ANDROID, 1,
EGL14.EGL_SURFACE_TYPE, EGL14.EGL_PBUFFER_BIT | EGL14.EGL_WINDOW_BIT,
EGL14.EGL_NONE
};
I commented it out so that the line number of the file remains the same and I can debug it with Android Studio.