Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MultiCamera : In Android 10 and 11, PictureController takePicture does not return on device with multi camera #68

Closed
anamauad opened this issue Jan 6, 2021 · 13 comments
Assignees
Labels
android Android related issue bug Something isn't working priority 1

Comments

@anamauad
Copy link

anamauad commented Jan 6, 2021

Steps to Reproduce

  1. On an android 10 or 11 mobile phone, open the example app, using camerawesome 0.1.2+1, or greater
  2. Open the camera to take a picture, fullscreen, rear camera
  3. Press the button to take a picture

Expected results

The picture is taken and the picture can be viewed on the screen

Actual results

The picture is not taken.

While debugging the code, it waits the following code to return:
await _pictureController.takePicture(filePath);

It was working as it should when the mobile device was using Android 9. But it stopped working when it was updated to Android 10.

About your device

Brand Model OS Working Rear Cameras
Xiamoi Redmi 9 Android 11 NO >1
LG K 61 Android 10 NO 2
LG K 61 Android 9 YES 2
Samsung Galaxy A20 Android 10 YES 1
@anamauad
Copy link
Author

anamauad commented Jan 7, 2021

Log

Launching lib\main.dart on LM Q630 in debug mode...
Note: c:\tools\flutter\.pub-cache\hosted\pub.dartlang.org\camerawesome-0.1.2+1\android\src\main\java\com\apparence\camerawesome\CameraSession.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
√ Built build\app\outputs\flutter-apk\app-debug.apk.
Connecting to VM Service at ws://127.0.0.1:52229/Lck1zp6NA6k=/ws
I/GED     (10599): ged_boost_gpu_freq, level 100, eOrigin 2, final_idx 3, oppidx_max 3, oppidx_min 0
D/com.apparence.camerawesome.CamerawesomePlugin(10599): _handleCheckPermissions:
I/CameraManagerGlobal(10599): Connecting to camera service
I/CameraManagerGlobal(10599): [LGE][getCameraIdList] using mtk property, ro.boot.product.lge.physical.camera
I/chatty  (10599): uid=10027(com.example.flutter_camera_awesome) identical 2 lines
I/CameraManagerGlobal(10599): [LGE][getCameraIdList] using mtk property, ro.boot.product.lge.physical.camera
W/CameraManagerGlobal(10599): [soar.cts] ignore the status update of camera: 3
I/CameraManagerGlobal(10599): [LGE][getCameraIdList] using mtk property, ro.boot.product.lge.physical.camera
W/CameraManagerGlobal(10599): [soar.cts] ignore the status update of camera: 4
I/CameraManagerGlobal(10599): [LGE][getCameraIdList] using mtk property, ro.boot.product.lge.physical.camera
W/CameraManagerGlobal(10599): [soar.cts] ignore the status update of camera: 5
E/CameraManagerGlobal(10599): packageList = com.lge.camera,com.lge.servicemenu
I/CameraManagerGlobal(10599): [LGE][getCameraIdList] mtk_physical_camera : 5
I/CameraManagerGlobal(10599): [LGE][getCameraIdList] mtk_hide_aux_camera : 1
I/CameraManagerGlobal(10599): [LGE][getCameraIdList] using mtk property, ro.boot.product.lge.physical.camera
E/CameraManagerGlobal(10599):  idCount = 3
I/CameraManagerGlobal(10599): [LGE][getCameraIdList] using mtk property, ro.boot.product.lge.physical.camera
I/chatty  (10599): uid=10027(com.example.flutter_camera_awesome) Binder:10599_3 identical 1 line
I/CameraManagerGlobal(10599): [LGE][getCameraIdList] using mtk property, ro.boot.product.lge.physical.camera
W/CameraManagerGlobal(10599): ignore the torch status update of camera: 3
I/CameraManagerGlobal(10599): [LGE][getCameraIdList] using mtk property, ro.boot.product.lge.physical.camera
W/CameraManagerGlobal(10599): ignore the torch status update of camera: 4
I/CameraManagerGlobal(10599): [LGE][getCameraIdList] using mtk property, ro.boot.product.lge.physical.camera
W/CameraManagerGlobal(10599): ignore the torch status update of camera: 5
I/SensorManager(10599): registerListenerImpl() [Sensor: ACCELEROMETER, Rate: 200000, SensorEventListener: android.view.OrientationEventListener$SensorEventListenerImpl@66a4031] by android.view.OrientationEventListener.enable():93
I/SensorManager(10599): registerListenerImpl() [Sensor: LIGHT, Rate: 66667, SensorEventListener: com.apparence.camerawesome.sensors.BasicLuminosityNotifier$1@1b27316] by com.apparence.camerawesome.sensors.BasicLuminosityNotifier.init():27
I/BufferQueue(10599): [unnamed-10599-0](this:0x73e0c65800,id:0,api:0,p:-1,c:-1) BufferQueue core=(10599:com.example.flutter_camera_awesome)
E/libc    (10599): Access denied finding property "vendor.debug.bq.dump"
I/BufferQueueConsumer(10599): [unnamed-10599-0](this:0x73e0c65800,id:0,api:0,p:-1,c:10599) connect(C): consumer=(10599:com.example.flutter_camera_awesome) controlledByApp=true
E/libc    (10599): Access denied finding property "vendor.debug.bq.dump"
I/BufferQueueConsumer(10599): [unnamed-10599-0](this:0x73e0c65800,id:0,api:0,p:-1,c:10599) setConsumerName: unnamed-10599-0
E/libc    (10599): Access denied finding property "vendor.debug.bq.dump"
I/BufferQueueConsumer(10599): [ImageReader-4000x3000f100m2-10599-0](this:0x73e0c65800,id:0,api:0,p:-1,c:10599) setConsumerName: ImageReader-4000x3000f100m2-10599-0
I/BufferQueueConsumer(10599): [ImageReader-4000x3000f100m2-10599-0](this:0x73e0c65800,id:0,api:0,p:-1,c:10599) setDefaultBufferSize: width=4000 height=3000
I/CameraManagerGlobal(10599): [LGE][getCameraIdList] using mtk property, ro.boot.product.lge.physical.camera
I/CameraManagerGlobal(10599): [LGE][getCameraIdList] using mtk property, ro.boot.product.lge.physical.camera
I/CameraManagerGlobal(10599): [LGE][getCameraIdList] using mtk property, ro.boot.product.lge.physical.camera
I/CameraManagerGlobal(10599): [LGE][getCameraIdList] using mtk property, ro.boot.product.lge.physical.camera
W/CameraManagerGlobal(10599): ignore the torch status update of camera: 3
I/CameraManagerGlobal(10599): [LGE][getCameraIdList] using mtk property, ro.boot.product.lge.physical.camera
W/CameraManagerGlobal(10599): ignore the torch status update of camera: 4
I/CameraManagerGlobal(10599): [LGE][getCameraIdList] using mtk property, ro.boot.product.lge.physical.camera
W/CameraManagerGlobal(10599): ignore the torch status update of camera: 5
I/BufferQueue(10599): [unnamed-10599-1](this:0x738298e000,id:1,api:0,p:-1,c:-1) BufferQueue core=(10599:com.example.flutter_camera_awesome)
E/libc    (10599): Access denied finding property "vendor.debug.bq.dump"
I/BufferQueueConsumer(10599): [unnamed-10599-1](this:0x738298e000,id:1,api:0,p:-1,c:10599) connect(C): consumer=(10599:com.example.flutter_camera_awesome) controlledByApp=true
E/libc    (10599): Access denied finding property "vendor.debug.bq.dump"
I/BufferQueueConsumer(10599): [unnamed-10599-1](this:0x738298e000,id:1,api:0,p:-1,c:10599) setConsumerName: unnamed-10599-1
E/libc    (10599): Access denied finding property "vendor.debug.bq.dump"
I/BufferQueueConsumer(10599): [ImageReader-4000x3000f100m2-10599-1](this:0x738298e000,id:1,api:0,p:-1,c:10599) setConsumerName: ImageReader-4000x3000f100m2-10599-1
I/BufferQueueConsumer(10599): [ImageReader-4000x3000f100m2-10599-1](this:0x738298e000,id:1,api:0,p:-1,c:10599) setDefaultBufferSize: width=4000 height=3000
I/BufferQueue(10599): [unnamed-10599-2](this:0x738298f800,id:2,api:0,p:-1,c:-1) BufferQueue core=(10599:com.example.flutter_camera_awesome)
E/libc    (10599): Access denied finding property "vendor.debug.bq.dump"
I/BufferQueueConsumer(10599): [unnamed-10599-2](this:0x738298f800,id:2,api:0,p:-1,c:10599) connect(C): consumer=(10599:com.example.flutter_camera_awesome) controlledByApp=true
E/libc    (10599): Access denied finding property "vendor.debug.bq.dump"
I/BufferQueueConsumer(10599): [unnamed-10599-2](this:0x738298f800,id:2,api:0,p:-1,c:10599) setConsumerName: unnamed-10599-2
E/libc    (10599): Access denied finding property "vendor.debug.bq.dump"
I/BufferQueueConsumer(10599): [SurfaceTexture-0-10599-0](this:0x738298f800,id:2,api:0,p:-1,c:10599) setConsumerName: SurfaceTexture-0-10599-0
I/BufferQueueConsumer(10599): [SurfaceTexture-0-10599-0](this:0x738298f800,id:2,api:0,p:-1,c:10599) setDefaultBufferSize: width=1920 height=1080
I/BufferQueueProducer(10599): [SurfaceTexture-0-10599-0](this:0x738298f800,id:2,api:4,p:1013,c:10599) connect(P): api=4 producer=(1013:???) producerControlledByApp=true
I/BufferQueueProducer(10599): [ImageReader-4000x3000f100m2-10599-1](this:0x738298e000,id:1,api:4,p:1013,c:10599) connect(P): api=4 producer=(1013:???) producerControlledByApp=false
W/Gralloc3(10599): allocator 3.x is not supported
E/ion     (10599): ioctl c0044901 failed with code -1: Invalid argument
E/IMGSRV  (10599): :0: IsTextureConsistent: IMGEGLImage is not consistent
I/BufferQueueProducer(10599): [SurfaceTexture-0-10599-0](this:0x738298f800,id:2,api:4,p:1013,c:10599) queueBuffer: fps=15.62 dur=1024.13 max=71.53 min=54.52
I/BufferQueueProducer(10599): [SurfaceTexture-0-10599-0](this:0x738298f800,id:2,api:4,p:1013,c:10599) queueBuffer: fps=14.96 dur=1002.65 max=72.09 min=62.61
I/BufferQueueProducer(10599): [SurfaceTexture-0-10599-0](this:0x738298f800,id:2,api:4,p:1013,c:10599) queueBuffer: fps=14.94 dur=1004.04 max=69.41 min=62.37
I/ViewRootImpl(10599): ViewRoot's Touch Event : ACTION_DOWN
I/ViewRootImpl(10599): ViewRoot's Touch Event : ACTION_UP
I/BufferQueueProducer(10599): [SurfaceTexture-0-10599-0](this:0x738298f800,id:2,api:4,p:1013,c:10599) queueBuffer: slot 1 is dropped, handle=0x73e0b10c00
I/BufferQueueProducer(10599): [SurfaceTexture-0-10599-0](this:0x738298f800,id:2,api:4,p:1013,c:10599) queueBuffer: fps=15.01 dur=1065.94 max=72.09 min=53.20
I/BufferQueueProducer(10599): [SurfaceTexture-0-10599-0](this:0x738298f800,id:2,api:4,p:1013,c:10599) queueBuffer: fps=14.95 dur=1003.06 max=72.31 min=61.72
I/ViewRootImpl(10599): ViewRoot's Touch Event : ACTION_DOWN
I/ViewRootImpl(10599): ViewRoot's Touch Event : ACTION_UP
I/BufferQueueProducer(10599): [SurfaceTexture-0-10599-0](this:0x738298f800,id:2,api:4,p:1013,c:10599) queueBuffer: fps=15.09 dur=1060.23 max=69.68 min=63.02
I/BufferQueueProducer(10599): [SurfaceTexture-0-10599-0](this:0x738298f800,id:2,api:4,p:1013,c:10599) queueBuffer: fps=14.92 dur=1005.59 max=70.58 min=63.55

Clicked on the shutter button

I/ViewRootImpl(10599): ViewRoot's Touch Event : ACTION_DOWN
I/ViewRootImpl(10599): ViewRoot's Touch Event : ACTION_UP
W/_camera_awesom(10599): Accessing hidden method Lsun/misc/Unsafe;->getUnsafe()Lsun/misc/Unsafe; (greylist,core-platform-api, linking, allowed)
W/_camera_awesom(10599): Accessing hidden method Lsun/misc/Unsafe;->objectFieldOffset(Ljava/lang/reflect/Field;)J (greylist,core-platform-api, linking, allowed)
W/_camera_awesom(10599): Accessing hidden method Lsun/misc/Unsafe;->compareAndSwapObject(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z (greylist, linking, allowed)
W/_camera_awesom(10599): Accessing hidden method Lsun/misc/Unsafe;->putObject(Ljava/lang/Object;JLjava/lang/Object;)V (greylist, linking, allowed)
I/BufferQueueProducer(10599): [SurfaceTexture-0-10599-0](this:0x738298f800,id:2,api:4,p:1013,c:10599) queueBuffer: slot 0 is dropped, handle=0x73e0b10a80
I/BufferQueueProducer(10599): [SurfaceTexture-0-10599-0](this:0x738298f800,id:2,api:4,p:1013,c:10599) queueBuffer: slot 2 is dropped, handle=0x73e0b10d80
I/BufferQueueProducer(10599): [SurfaceTexture-0-10599-0](this:0x738298f800,id:2,api:4,p:1013,c:10599) queueBuffer: slot 4 is dropped, handle=0x73e0b11080
I/BufferQueueProducer(10599): [SurfaceTexture-0-10599-0](this:0x738298f800,id:2,api:4,p:1013,c:10599) queueBuffer: fps=14.95 dur=1003.56 max=73.02 min=56.93
I/BufferQueueProducer(10599): [SurfaceTexture-0-10599-0](this:0x738298f800,id:2,api:4,p:1013,c:10599) queueBuffer: fps=14.99 dur=1000.35 max=70.63 min=62.31
I/BufferQueueProducer(10599): [SurfaceTexture-0-10599-0](this:0x738298f800,id:2,api:4,p:1013,c:10599) queueBuffer: fps=14.98 dur=1001.37 max=72.43 min=62.01
I/BufferQueueProducer(10599): [SurfaceTexture-0-10599-0](this:0x738298f800,id:2,api:4,p:1013,c:10599) queueBuffer: fps=14.98 dur=1001.20 max=68.93 min=62.83
I/BufferQueueProducer(10599): [SurfaceTexture-0-10599-0](this:0x738298f800,id:2,api:4,p:1013,c:10599) queueBuffer: fps=14.96 dur=1002.43 max=69.45 min=64.26
I/ViewRootImpl(10599): ViewRoot's Touch Event : ACTION_DOWN
I/ViewRootImpl(10599): ViewRoot's Touch Event : ACTION_UP
I/BufferQueueProducer(10599): [SurfaceTexture-0-10599-0](this:0x738298f800,id:2,api:4,p:1013,c:10599) queueBuffer: fps=15.09 dur=1060.20 max=71.78 min=60.91
I/BufferQueueProducer(10599): [SurfaceTexture-0-10599-0](this:0x738298f800,id:2,api:4,p:1013,c:10599) queueBuffer: slot 4 is dropped, handle=0x73e0b11080
D/BufferQueueProducer(10599): [SurfaceTexture-0-10599-0](this:0x738298f800,id:2,api:4,p:1013,c:10599) cancelBuffer: slot 5

@g-apparence
Copy link
Collaborator

Hello, thank you reporting this. I'll try to reproduce this quickly.

@g-apparence g-apparence added android Android related issue bug Something isn't working labels Jan 7, 2021
@g-apparence g-apparence self-assigned this Jan 7, 2021
@SaloxiddinTursunaliev
Copy link

SaloxiddinTursunaliev commented Feb 5, 2021

Hi @g-apparence

I am also using camera_awesome: ^0.2.1+2 plugin.
But I can't take a photo nor record a video on Android 10 x86_64 emulator
when I try to take a photo it's giving these errors:

 Session 0: Exception while stopping repeating: 
E/CameraCaptureSession( 3858): android.hardware.camera2.CameraAccessException: CAMERA_ERROR (3): The camera device has encountered a serious error
E/CameraCaptureSession( 3858):  at android.hardware.camera2.impl.CameraDeviceImpl.checkIfCameraClosedOrInError(CameraDeviceImpl.java:2521)
E/CameraCaptureSession( 3858):  at android.hardware.camera2.impl.CameraDeviceImpl.stopRepeating(CameraDeviceImpl.java:1128)
E/CameraCaptureSession( 3858):  at android.hardware.camera2.impl.CameraCaptureSessionImpl.close(CameraCaptureSessionImpl.java:526)
E/CameraCaptureSession( 3858):  at com.apparence.camerawesome.CameraPreview.dispose(CameraPreview.java:160)
E/CameraCaptureSession( 3858):  at com.apparence.camerawesome.CameraStateManager.onError(CameraStateManager.java:154)
E/CameraCaptureSession( 3858):  at android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks.notifyError(CameraDeviceImpl.java:2010)
E/CameraCaptureSession( 3858):  at android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks.lambda$Sm85frAzwGZVMAK-NE_gwckYXVQ(Unknown Source:0)
E/CameraCaptureSession( 3858):  at android.hardware.camera2.impl.-$$Lambda$CameraDeviceImpl$CameraDeviceCallbacks$Sm85frAzwGZVMAK-NE_gwckYXVQ.accept(Unknown Source:8)
E/CameraCaptureSession( 3858):  at com.android.internal.util.function.pooled.PooledLambdaImpl.doInvoke(PooledLambdaImpl.java:271)
E/CameraCaptureSession( 3858):  at com.android.internal.util.function.pooled.PooledLambdaImpl.invoke(PooledLambdaImpl.java:195)
E/CameraCaptureSession( 3858):  at com.android.internal.util.function.pooled.OmniFunction.run(OmniFunction.java:86)
E/CameraCaptureSession( 3858):  at android.os.Handler.handleCallback(Handler.java:883)
E/CameraCaptureSession( 3858):  at android.os.Handler.dispatchMessage(Handler.java:100)
E/CameraCaptureSession( 3858):  at android.os.Looper.loop(Looper.java:214)
E/CameraCaptureSession( 3858):  at android.app.ActivityThread.main(ActivityThread.java:7356)
E/CameraCaptureSession( 3858):  at java.lang.reflect.Method.invoke(Native Method)
E/CameraCaptureSession( 3858):  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
E/CameraCaptureSession( 3858):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
D/AndroidRuntime( 3858): Shutting down VM
E/AndroidRuntime( 3858): FATAL EXCEPTION: main
E/AndroidRuntime( 3858): Process: com.example.Eveyel, PID: 3858
E/AndroidRuntime( 3858): java.lang.IllegalArgumentException: supportsCameraApi:1927: Unknown camera ID 0
E/AndroidRuntime( 3858):        at android.hardware.camera2.CameraManager.throwAsPublicException(CameraManager.java:791)
E/AndroidRuntime( 3858):        at android.hardware.camera2.CameraManager.getCameraCharacteristics(CameraManager.java:327)
E/AndroidRuntime( 3858):        at android.hardware.camera2.CameraManager.openCameraDeviceUserAsync(CameraManager.java:363)
E/AndroidRuntime( 3858):        at android.hardware.camera2.CameraManager.openCameraForUid(CameraManager.java:588)
E/AndroidRuntime( 3858):        at android.hardware.camera2.CameraManager.openCamera(CameraManager.java:516)
E/AndroidRuntime( 3858):        at com.apparence.camerawesome.CameraStateManager.startCamera(CameraStateManager.java:70)
E/AndroidRuntime( 3858):        at com.apparence.camerawesome.CameraStateManager.onError(CameraStateManager.java:155)
E/AndroidRuntime( 3858):        at android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks.notifyError(CameraDeviceImpl.java:2010)
E/AndroidRuntime( 3858):        at android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks.lambda$Sm85frAzwGZVMAK-NE_gwckYXVQ(Unknown Source:0)
E/AndroidRuntime( 3858):        at android.hardware.camera2.impl.-$$Lambda$CameraDeviceImpl$CameraDeviceCallbacks$Sm85frAzwGZVMAK-NE_gwckYXVQ.accept(Unknown Source:8)
E/AndroidRuntime( 3858):        at com.android.internal.util.function.pooled.PooledLambdaImpl.doInvoke(PooledLambdaImpl.java:271)
E/AndroidRuntime( 3858):        at com.android.internal.util.function.pooled.PooledLambdaImpl.invoke(PooledLambdaImpl.java:195)
E/AndroidRuntime( 3858):        at com.android.internal.util.function.pooled.OmniFunction.run(OmniFunction.java:86)
E/AndroidRuntime( 3858):        at android.os.Handler.handleCallback(Handler.java:883)
E/AndroidRuntime( 3858):        at android.os.Handler.dispatchMessage(Handler.java:100)
E/AndroidRuntime( 3858):        at android.os.Looper.loop(Looper.java:214)
E/AndroidRuntime( 3858):        at android.app.ActivityThread.main(ActivityThread.java:7356)
E/AndroidRuntime( 3858):        at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime( 3858):        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
E/AndroidRuntime( 3858):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
E/AndroidRuntime( 3858): Caused by: android.os.ServiceSpecificException: supportsCameraApi:1927: Unknown camera ID 0 (code 3)
E/AndroidRuntime( 3858):        at android.os.Parcel.createException(Parcel.java:2085)
E/AndroidRuntime( 3858):        at android.os.Parcel.readException(Parcel.java:2039)
E/AndroidRuntime( 3858):        at android.os.Parcel.readException(Parcel.java:1987)
E/AndroidRuntime( 3858):        at android.hardware.ICameraService$Stub$Proxy.supportsCameraApi(ICameraService.java:800)
E/AndroidRuntime( 3858):        at android.hardware.camera2.CameraManager.supportsCameraApiLocked(CameraManager.java:844)
E/AndroidRuntime( 3858):        at android.hardware.camera2.CameraManager.supportsCamera2ApiLocked(CameraManager.java:820)
E/AndroidRuntime( 3858):        at android.hardware.camera2.CameraManager.getCameraCharacteristics(CameraManager.java:303)
E/AndroidRuntime( 3858):        ... 18 more
I/Process ( 3858): Sending signal. PID: 3858 SIG: 9
Lost connection to device.

But if run the app on lower Android version it is running successfully.

But one more thing, I am also facing these errors while using official camera plugin

android.hardware.camera2.CameraAccessException: CAMERA_ERROR (3): The camera device has encountered a serious error

If these errors on my emulator or flutter side what do you suggest?

@g-apparence
Copy link
Collaborator

I will try on an emulator (I'm only testing on real device for better behavior).
This seems more related to Android new version that maybe broke the camera emulation.
Unknown camera ID 0
Found no error related for now. Will make a try, but right now I got no answer.
Tryed on older emulators (Android 8 I think). This worked.

@anamauad
Copy link
Author

anamauad commented Feb 5, 2021

I've made an experiment removing the camera_awesome and using the camera lib.
Their example code allows someone to switch the rear cameras.

The same LG K61 Android 10 mobile device listed 2 rear cameras.

I could get a picture taken with the second camera only, not the first one.

Using the first available rear camera, the picture is not taken but it returns a timeout result, while camera_awesome does not return anything, it hangs.

@g-apparence
Copy link
Collaborator

Oh so maybe that's more on the fact that it has 2 rear cameras.
Going to do some research on this. Thank you for investigating this!

@g-apparence
Copy link
Collaborator

Okay, after some digging it seems that multi camera devices has to open logical camera and then related physical device.
So this makes sense that camerawesome do nothing as we don't open any physical camera (which was not required with other devices).

https://developer.android.com/training/camera2/multi-camera
https://source.android.com/devices/camera/multi-camera

I'll try to get a multi camera device to try fixing it.

@g-apparence g-apparence changed the title In Android 10 and 11, the call to _pictureController.takePicture does not return. Stopped working when mobile device was updated from Android 9. MultiCamera : In Android 10 and 11, the call to _pictureController.takePicture does not return. Stopped working when mobile device was updated from Android 9. Feb 12, 2021
@g-apparence g-apparence changed the title MultiCamera : In Android 10 and 11, the call to _pictureController.takePicture does not return. Stopped working when mobile device was updated from Android 9. MultiCamera : In Android 10 and 11, PictureController takePicture does not return on device with multi camera Feb 12, 2021
@j0nscalet
Copy link

j0nscalet commented Feb 18, 2021

@g-apparence This seems to be pretty important as many newer devices will have multiple cameras. I'd love to help resolve this since I have a multi-camera device. Would you mind sharing any thoughts/guidance on what needs to be implemented or fixed to get this working? Happy to dive in.

@g-apparence
Copy link
Collaborator

Hi Jon,
You are right, I started some research and started detection of multi deviceCamera.

I'd be happy to get some help, thank you!
=> I created a branch called feature/multi_camera.

  • For now you now just have a function to detect and list the Cameras inside a multiCamera. (you can find this in CameraSetup.java). The list of cameras is in the CameraCharacteristicsModel that we use across all camerAwesome to get different characteristics. (CameraCharacteristicsModel => multiCamera attribute).

How is structured camerAwesome:

  • You have CameraPicture.java that is responsible to handle taking pictures
  • You have CameraPreview.java that is responsible to handle previews
  • CameraSession.java is responsible for syncing previews and pictures as they are more connected than we could think. (taking a picture requires restarting preview...)
  • CameraStateManager handles the start/stop operations on the camera

What needs next:
I think we needs to handle the multi camera in CameraStateManager to start all other camera if you started a multiCamera.
CameraStateManager don't have CameraCharacteristicsModel for now. This is a mistake and we should create cameraStateManager with it.

The question is do we have to start all camera in a multi Camera or the ability to choose which one to start. I think it's more like this but the Idea behind cameraAwesome is to make it simple. The plugin should work without specifying a list of complex camera id by default. Maybe the ability to choose which sensors inside the multiCamera can be interesting.

Here is the state. Hope I helped you understand the current state. Don't hesitate to ask :) .

@j0nscalet
Copy link

@g-apparence Things have gotten pretty busy again. I ended up getting the functionality I needed out the flutter camera plugin. So I probably won't have time to dive in. Sorry mate!

@g-apparence
Copy link
Collaborator

@j0nscalet No problem 👍

@urossm
Copy link

urossm commented Nov 23, 2021

@g-apparence Things have gotten pretty busy again. I ended up getting the functionality I needed out the flutter camera plugin. So I probably won't have time to dive in. Sorry mate!

Hi, did you managed to load other physical cameras etc. ultrawide camera with the camera plugin?

@istornz
Copy link
Contributor

istornz commented Jan 10, 2023

Closed, please reopen if this bug occurs on latest stable v1.0.0 👍

@istornz istornz closed this as completed Jan 10, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
android Android related issue bug Something isn't working priority 1
Projects
None yet
Development

No branches or pull requests

6 participants