react-native-vision-camera: 🐛 `TOO_MANY_OPEN_CAMERAS` error when rendering multiple Cameras

What’s happening?

TOO_MANY_OPEN_CAMERAS is still thrown with 3.7.0 on Android

Reproduceable Code

Check this repo https://github.com/xseignard/black-screen and navigate between screens

Relevant log output

2024-01-11T11:51:52.930Z	29542	PreviewView	Creating PreviewView...
	2024-01-11T11:51:52.931Z	29542	PreviewView	Content Size: 1920x1080 (0.5625) | Container Size: 0x0 (NaN)
	2024-01-11T11:51:52.931Z	29542	PreviewView	PreviewView is 0x0, rendering 1920x1080 content. Resizing to: 0x0 (COVER)
	2024-01-11T11:51:52.933Z	29542	CameraView	Updating CameraSession...
	2024-01-11T11:51:52.934Z	29542	CameraSession	configure { ... }: Waiting for lock...
	2024-01-11T11:51:52.936Z	29542	CameraSession	configure { ... }: Updating CameraSession Configuration... Difference(deviceChanged=true, outputsChanged=true, sidePropsChanged=true, isActiveChanged=true)
	2024-01-11T11:51:52.936Z	29542	CameraSession	isActive is false, skipping CameraDevice configuration.
	2024-01-11T11:51:52.936Z	29542	CameraSession	isActive is false, skipping CameraCaptureSession configuration.
	2024-01-11T11:51:52.936Z	29542	CameraSession	Successfully updated CameraSession Configuration! isActive: false
	2024-01-11T11:51:53.080Z	29542	CameraView	Updating CameraSession...
	2024-01-11T11:51:53.081Z	29542	CameraSession	configure { ... }: Waiting for lock...
	2024-01-11T11:51:53.082Z	29542	CameraSession	configure { ... }: Updating CameraSession Configuration... Difference(deviceChanged=true, outputsChanged=true, sidePropsChanged=true, isActiveChanged=true)
	2024-01-11T11:51:53.082Z	29542	CameraSession	Need to rebuild CameraDevice and CameraCaptureSession...
	2024-01-11T11:51:53.083Z	29542	CameraSession	Configuring Camera #1...
	2024-01-11T11:51:53.083Z	29542	CameraManager	Camera #1: Opening...
	2024-01-11T11:51:53.086Z	29542	PreviewView	Content Size: 1920x1080 (0.5625) | Container Size: 1080x1918 (0.5630865484880083)
	2024-01-11T11:51:53.087Z	29542	PreviewView	PreviewView is 1080x1918, rendering 1920x1080 content. Resizing to: 1080x1920 (COVER)
	2024-01-11T11:51:53.088Z	1969	System.err	java.lang.SecurityException: Caller with uid 1047 is not android
	2024-01-11T11:51:53.088Z	1969	System.err		at com.android.server.devicepolicy.DevicePolicyManagerService.getCallerIdentity(DevicePolicyManagerService.java:2368)
	2024-01-11T11:51:53.088Z	1969	System.err		at com.android.server.devicepolicy.DevicePolicyManagerService.getCameraDisabled(DevicePolicyManagerService.java:9311)
	2024-01-11T11:51:53.088Z	1969	System.err		at android.app.admin.DevicePolicyManager.getCameraDisabled(DevicePolicyManager.java:8423)
	2024-01-11T11:51:53.088Z	1969	System.err		at com.android.server.camera.CameraServiceProxy$2.isCameraDisabled(CameraServiceProxy.java:622)
	2024-01-11T11:51:53.088Z	1969	System.err		at android.hardware.ICameraServiceProxy$Stub.onTransact(ICameraServiceProxy.java:174)
	2024-01-11T11:51:53.088Z	1969	System.err		at android.os.Binder.execTransactInternal(Binder.java:1344)
	2024-01-11T11:51:53.088Z	1969	System.err		at android.os.Binder.execTransact(Binder.java:1275)
	2024-01-11T11:51:53.088Z	1645	CameraService	CameraService::connect call (PID 29542 "com.xseignard.blackscreen", camera ID 1) and Camera API version 2
	2024-01-11T11:51:53.089Z	1645	Camera2ClientBase	Camera 1: Opened. Client: com.xseignard.blackscreen (PID 29542, UID 10618)
	2024-01-11T11:51:53.089Z	1645	CameraDeviceClient	CameraDeviceClient 1: Opened
	2024-01-11T11:51:53.089Z	1645	CameraService	makeClient: Camera2 API, override to portrait 0
	2024-01-11T11:51:53.089Z	1304	GCH_CameraDeviceHwlImpl	CreateCameraDeviceSessionHwl CAMERA_LAUNCH 1
	2024-01-11T11:51:53.090Z	1304	GCH_HwlResultDispatcher	ResultDispatcherHwl: SetRealtimeThread OK
	2024-01-11T11:51:53.090Z	1304	GCH_CameraVendorModule	ValidateConcurrentOpen: All cameras should be opened before any session is configured.
	2024-01-11T11:51:53.090Z	1304	GCH_CameraDeviceSessionHwlImpl	DestroyPipelinesLocked Destroying pipelines
	2024-01-11T11:51:53.090Z	1304	GCH_HwlResultDispatcher	ResultDispatcherThread Result dispatcher thread is existing . . .
	2024-01-11T11:51:53.090Z	1304	GCH_CameraDevice	CreateCameraDeviceSession: Creating a CameraDeviceSessionHwl failed: Too many users(-87)
	2024-01-11T11:51:53.090Z	1304	GCH_AidlCameraDevice	open: Creating CameraDeviceSession failed: Too many users(-87)
	2024-01-11T11:51:53.090Z	1645	CameraProviderManager	openAidlSession: Transaction error opening a session for camera device 1: 
	2024-01-11T11:51:53.090Z	1645	Camera3-Device	Camera 1: initialize: Could not open camera session: Too many users (-87)
	2024-01-11T11:51:53.090Z	1645	Camera2ClientBase	initializeImpl: Camera 1: unable to initialize device: Too many users (-87)
	2024-01-11T11:51:53.090Z	1645	CameraService	connectHelper: Could not initialize client from HAL.
	2024-01-11T11:51:53.090Z	1645	Camera2ClientBase	Camera 1: start to disconnect
	2024-01-11T11:51:53.090Z	1645	Camera2ClientBase	Camera 1: serializationLock acquired
	2024-01-11T11:51:53.090Z	1645	Camera2ClientBase	Camera 1: Shutting down
	2024-01-11T11:51:53.090Z	1645	Camera2ClientBase	Camera 1: start to cacheDump
	2024-01-11T11:51:53.099Z	1645	Camera3-Device	disconnectImpl: E
	2024-01-11T11:51:53.099Z	1645	CameraService	disconnect: Disconnected client for camera 1 for PID 29542
	2024-01-11T11:51:53.099Z	1645	cameraserver	FGS Logger Transaction failed
	2024-01-11T11:51:53.099Z	1645	cameraserver	-129
	2024-01-11T11:51:53.099Z	1645	Camera2ClientBase	~Camera2ClientBase: Client object's dtor for Camera Id 1 completed. Client was: com.xseignard.blackscreen (PID 29542, UID 10618)
	2024-01-11T11:51:53.099Z	1645	Camera3-Device	disconnectImpl: E
	2024-01-11T11:51:53.099Z	3182	HbmSvManager	 Request state 0 req 1
	2024-01-11T11:51:53.100Z	29542	CameraManager	Camera #1: Error! 2
	2024-01-11T11:51:53.102Z	29542	CameraSession	
	2024-01-11T11:51:53.102Z	29542	CameraView	invokeOnError(...):
	2024-01-11T11:51:53.102Z	29542	System.err	com.mrousavy.camera.core.CameraCannotBeOpenedError: [session/camera-cannot-be-opened] The given Camera device (id: 1) could not be opened! Error: TOO_MANY_OPEN_CAMERAS
	2024-01-11T11:51:53.102Z	29542	System.err		at com.mrousavy.camera.extensions.CameraManager_openCameraKt$openCamera$2$callback$1.onError(CameraManager+openCamera.kt:47)
	2024-01-11T11:51:53.102Z	29542	System.err		at android.hardware.camera2.impl.CameraDeviceImpl$8.run(CameraDeviceImpl.java:385)
	2024-01-11T11:51:53.102Z	29542	System.err		at android.os.Handler.handleCallback(Handler.java:958)
	2024-01-11T11:51:53.102Z	29542	System.err		at android.os.Handler.dispatchMessage(Handler.java:99)
	2024-01-11T11:51:53.102Z	29542	System.err		at android.os.Looper.loopOnce(Looper.java:205)
	2024-01-11T11:51:53.102Z	29542	System.err		at android.os.Looper.loop(Looper.java:294)
	2024-01-11T11:51:53.103Z	29542	System.err		at android.os.HandlerThread.run(HandlerThread.java:67)
	2024-01-11T11:51:53.106Z	29542	CameraSession	PreviewView Surface created! Surface(name=null)/@0xd306005
	2024-01-11T11:51:53.106Z	29542	CameraSession	Setting Preview Output...
	2024-01-11T11:51:53.106Z	29542	CameraSession	PreviewView Surface updated! Surface(name=null)/@0xd306005 1080 x 1920
	2024-01-11T11:51:53.106Z	29542	CameraSession	configure { ... }: Waiting for lock...
	2024-01-11T11:51:53.107Z	29542	CameraSession	configure { ... }: Updating CameraSession Configuration... Difference(deviceChanged=false, outputsChanged=true, sidePropsChanged=true, isActiveChanged=false)
	2024-01-11T11:51:53.107Z	29542	CameraSession	isActive is false, skipping CameraCaptureSession configuration.
	2024-01-11T11:51:53.107Z	29542	CameraSession	Successfully updated CameraSession Configuration! isActive: false
	2024-01-11T11:51:53.123Z	29542	ReactNativeJS	{ [session/camera-cannot-be-opened: [session/camera-cannot-be-opened] The given Camera device (id: 1) could not be opened! Error: TOO_MANY_OPEN_CAMERAS]
  name: 'session/camera-cannot-be-opened',
  _code: 'session/camera-cannot-be-opened',
  _message: '[session/camera-cannot-be-opened] The given Camera device (id: 1) could not be opened! Error: TOO_MANY_OPEN_CAMERAS',
  _cause: undefined }

Camera Device

{
  "sensorOrientation": "landscape-right",
  "hardwareLevel": "full",
  "maxZoom": 7,
  "minZoom": 0.6150000095367432,
  "maxExposure": 24,
  "supportsLowLightBoost": false,
  "neutralZoom": 1,
  "physicalDevices": [
    "wide-angle-camera",
    "ultra-wide-angle-camera"
  ],
  "supportsFocus": true,
  "supportsRawCapture": true,
  "isMultiCam": true,
  "minExposure": -24,
  "name": "BACK (0)",
  "hasFlash": true,
  "hasTorch": true,
  "position": "back",
  "id": "0"
}

Device

Pixel 5 (Android 14)

VisionCamera Version

3.7.0

Can you reproduce this issue in the VisionCamera Example app?

I didn’t try (⚠️ your issue might get ignored & closed if you don’t try this)

Related issues

#1958 #2240

Additional information

About this issue

  • Original URL
  • State: closed
  • Created 6 months ago
  • Comments: 16 (13 by maintainers)

Most upvoted comments

Working on a fix for this issue here: https://github.com/mrousavy/react-native-vision-camera/pull/2494 👀

Still in development, so don’t test yet. Long way to go, this is a really complicated issue (as you can see in the changes/Files of that PR)…

Let’s re-open if the issue still exists!

I’ll try to take another look at this, but the PR closes the session which goes against the Closeable paradigm.