Skip to content

🐛 [Android] Cannot capture RAW using .capturePhotoToFile() if permission is granted in the same launch of app #4046

Description

@Jacky161

Prerequisites

Reproduction

https://github.com/Jacky161/react-native-vision-camera

Steps to reproduce

  1. Clone https://github.com/Jacky161/react-native-vision-camera.git
  2. bun install inside apps/simple-camera
  3. Run on Android Device
  4. Grant all requested permissions
  5. Within the same launch of the app, capture an image.
  6. Image capture fails.
  7. Fully close the app via the app drawer, and reopen it.
  8. Capture an image. Notice that it is successful.

What did you expect to happen?

RAW image is captured successfully and is displayed on the next screen.

What actually happened?

RAW image fails to capture:

Failed to take Photo! [Error: androidx.camera.core.ImageCaptureException: Image with an unsupported format was used
	at androidx.camera.core.imagecapture.DngImage2Disk.writeImageToFile(DngImage2Disk.java:82)
	at androidx.camera.core.imagecapture.DngImage2Disk.apply(DngImage2Disk.java:65)
	at androidx.camera.core.imagecapture.ProcessingNode.saveRawToDisk(ProcessingNode.java:317)
	at androidx.camera.core.imagecapture.ProcessingNode.processOnDiskCapture(ProcessingNode.java:288)
	at androidx.camera.core.imagecapture.ProcessingNode.lambda$processInputPacket$6$androidx-camera-core-imagecapture-ProcessingNode(ProcessingNode.java:203)
	at androidx.camera.core.imagecapture.ProcessingNode$$ExternalSyntheticLambda4.run(D8$$SyntheticClass:0)
	at androidx.camera.core.CameraXTracer.trace(CameraXTracer.kt:35)
	at androidx.camera.core.imagecapture.ProcessingNode.processInputPacket(ProcessingNode.java:193)
	at androidx.camera.core.imagecapture.ProcessingNode.lambda$transform$0$androidx-camera-core-imagecapture-ProcessingNode(ProcessingNode.java:148)
	at androidx.camera.core.imagecapture.ProcessingNode$$ExternalSyntheticLambda8.run(D8$$SyntheticClass:0)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1100)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:1572)
Caused by: java.lang.IllegalArgumentException: Missing metadata fields for tag CalibrationIlluminant1 (c65a)
	at android.hardware.camera2.DngCreator.nativeWriteImage(Native Method)
	at android.hardware.camera2.DngCreator.writeByteBuffer(DngCreator.java:511)
	at android.hardware.camera2.DngCreator.writeImage(DngCreator.java:445)
	at androidx.camera.core.imagecapture.DngImage2Disk.writeImageToFile(DngImage2Disk.java:80)
	... 12 more

Affected platforms

Android (device)

Device(s) affected

Samsung Galaxy S22 Ultra (Android 16), LG Velvet 5G (Android 13)

VisionCamera version

5.0.11

React Native version

0.85.3

React Native architecture

New Architecture (Fabric / bridgeless)

Features being used

  • Preview
  • Photo capture
  • Video capture
  • Frame Processors (worklets)
  • Skia Frame Processors
  • Code/Barcode Scanner
  • Location metadata
  • Multi-cam
  • Depth data
  • HDR / custom dynamic range
  • Custom format / FPS / resolution

Relevant logs / stack trace

06-25 10:14:52.205  5111  5136 I CameraManagerGlobal: Camera 0 facing CAMERA_FACING_BACK state now CAMERA_STATE_OPEN for client com.margelo.nitro.camera.example.simple API Level 2 User Id 0Device Id 0
06-25 10:14:52.215  5111  5239 I CXCP    : Opened CameraId-0 in 198.927 ms
06-25 10:14:52.217  5111  5153 D SurfaceView: 51898495 updateSurfacePosition RenderWorker, frameNr = 74, position = [2, 75, 1442, 1155] surfaceSize = 1440x1080
06-25 10:14:52.217  5111  5153 I SV[51898495 MainActivity]: uSP: rtp = Rect(2, 75 - 1442, 1155) rtsw = 1440 rtsh = 1080
06-25 10:14:52.217  5111  5153 I SV[51898495 MainActivity]: onSSPAndSRT: pl = 2 pt = 75 sx = 1.0 sy = 1.0
06-25 10:14:52.217  5111  5153 I SV[51898495 MainActivity]: aOrMT: VRI[MainActivity]@e4d5551 t = android.view.SurfaceControl$Transaction@6ff8cd3 fN = 74 android.view.SurfaceView.-$$Nest$mapplyOrMergeTransaction:0 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionChanged:1932 android.graphics.RenderNode$CompositePositionUpdateListener.positionChanged:401
06-25 10:14:52.217  5111  5153 I VRI[MainActivity]@e4d5551: mWNT: t=0xb400006e8ced2710 mBlastBufferQueue=0xb40000705c886390 fn= 74 HdrRenderState mRenderHdrSdrRatio=1.0 caller= android.view.SurfaceView.applyOrMergeTransaction:1863 android.view.SurfaceView.-$$Nest$mapplyOrMergeTransaction:0 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionChanged:1932
06-25 10:14:52.219  5111  5222 I CXCP    : Camera open completed: OpenCameraResult(cameraState=CameraState-1, errorCode=null)
06-25 10:14:52.223  5111  5243 I CXCP    : PruningCameraDeviceManager: CameraId-0 opened successfully
06-25 10:14:52.224  5111  5242 I CXCP    : Creating CameraCaptureSession from CameraId-0 using CaptureSessionState-1 with:
06-25 10:14:52.224  5111  5242 I CXCP    :   Stream-1 -> Surface(name=null mNativeObject=-5476376664021856064)/@0x4cac70d
06-25 10:14:52.224  5111  5242 I CXCP    :   Stream-2 -> Surface(name=null mNativeObject=-5476376664021865952)/@0x9beca17
06-25 10:14:52.260  5111  5153 D SurfaceView: 51898495 updateSurfacePosition RenderWorker, frameNr = 77, position = [1, 75, 1442, 1155] surfaceSize = 1440x1080
06-25 10:14:52.260  5111  5153 I SV[51898495 MainActivity]: uSP: rtp = Rect(1, 75 - 1442, 1155) rtsw = 1440 rtsh = 1080
06-25 10:14:52.260  5111  5153 I SV[51898495 MainActivity]: onSSPAndSRT: pl = 1 pt = 75 sx = 1.0006944 sy = 1.0
06-25 10:14:52.260  5111  5153 I SV[51898495 MainActivity]: aOrMT: VRI[MainActivity]@e4d5551 t = android.view.SurfaceControl$Transaction@6ff8cd3 fN = 77 android.view.SurfaceView.-$$Nest$mapplyOrMergeTransaction:0 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionChanged:1932 android.graphics.RenderNode$CompositePositionUpdateListener.positionChanged:401
06-25 10:14:52.260  5111  5153 I VRI[MainActivity]@e4d5551: mWNT: t=0xb400006e8ced2710 mBlastBufferQueue=0xb40000705c886390 fn= 77 HdrRenderState mRenderHdrSdrRatio=1.0 caller= android.view.SurfaceView.applyOrMergeTransaction:1863 android.view.SurfaceView.-$$Nest$mapplyOrMergeTransaction:0 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionChanged:1932
06-25 10:14:52.264  5111  5153 D SurfaceView: 51898495 updateSurfacePosition RenderWorker, frameNr = 78, position = [1, 75, 1441, 1155] surfaceSize = 1440x1080
06-25 10:14:52.264  5111  5153 I SV[51898495 MainActivity]: uSP: rtp = Rect(1, 75 - 1441, 1155) rtsw = 1440 rtsh = 1080
06-25 10:14:52.264  5111  5153 I SV[51898495 MainActivity]: onSSPAndSRT: pl = 1 pt = 75 sx = 1.0 sy = 1.0
06-25 10:14:52.264  5111  5153 I SV[51898495 MainActivity]: aOrMT: VRI[MainActivity]@e4d5551 t = android.view.SurfaceControl$Transaction@6ff8cd3 fN = 78 android.view.SurfaceView.-$$Nest$mapplyOrMergeTransaction:0 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionChanged:1932 android.graphics.RenderNode$CompositePositionUpdateListener.positionChanged:401
06-25 10:14:52.265  5111  5153 I VRI[MainActivity]@e4d5551: mWNT: t=0xb400006e8ced2710 mBlastBufferQueue=0xb40000705c886390 fn= 78 HdrRenderState mRenderHdrSdrRatio=1.0 caller= android.view.SurfaceView.applyOrMergeTransaction:1863 android.view.SurfaceView.-$$Nest$mapplyOrMergeTransaction:0 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionChanged:1932
06-25 10:14:52.299  5111  5153 D SurfaceView: 51898495 updateSurfacePosition RenderWorker, frameNr = 82, position = [0, 75, 1441, 1155] surfaceSize = 1440x1080
06-25 10:14:52.299  5111  5153 I SV[51898495 MainActivity]: uSP: rtp = Rect(0, 75 - 1441, 1155) rtsw = 1440 rtsh = 1080
06-25 10:14:52.299  5111  5153 I SV[51898495 MainActivity]: onSSPAndSRT: pl = 0 pt = 75 sx = 1.0006944 sy = 1.0
06-25 10:14:52.299  5111  5153 I SV[51898495 MainActivity]: aOrMT: VRI[MainActivity]@e4d5551 t = android.view.SurfaceControl$Transaction@6ff8cd3 fN = 82 android.view.SurfaceView.-$$Nest$mapplyOrMergeTransaction:0 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionChanged:1932 android.graphics.RenderNode$CompositePositionUpdateListener.positionChanged:401
06-25 10:14:52.300  5111  5153 I VRI[MainActivity]@e4d5551: mWNT: t=0xb400006e8ced2710 mBlastBufferQueue=0xb40000705c886390 fn= 82 HdrRenderState mRenderHdrSdrRatio=1.0 caller= android.view.SurfaceView.applyOrMergeTransaction:1863 android.view.SurfaceView.-$$Nest$mapplyOrMergeTransaction:0 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionChanged:1932
06-25 10:14:52.306  5111  5153 D SurfaceView: 51898495 updateSurfacePosition RenderWorker, frameNr = 83, position = [0, 75, 1440, 1155] surfaceSize = 1440x1080
06-25 10:14:52.306  5111  5153 I SV[51898495 MainActivity]: uSP: rtp = Rect(0, 75 - 1440, 1155) rtsw = 1440 rtsh = 1080
06-25 10:14:52.306  5111  5153 I SV[51898495 MainActivity]: onSSPAndSRT: pl = 0 pt = 75 sx = 1.0 sy = 1.0
06-25 10:14:52.306  5111  5153 I SV[51898495 MainActivity]: aOrMT: VRI[MainActivity]@e4d5551 t = android.view.SurfaceControl$Transaction@6ff8cd3 fN = 83 android.view.SurfaceView.-$$Nest$mapplyOrMergeTransaction:0 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionChanged:1932 android.graphics.RenderNode$CompositePositionUpdateListener.positionChanged:401
06-25 10:14:52.306  5111  5153 I VRI[MainActivity]@e4d5551: mWNT: t=0xb400006e8ced2710 mBlastBufferQueue=0xb40000705c886390 fn= 83 HdrRenderState mRenderHdrSdrRatio=1.0 caller= android.view.SurfaceView.applyOrMergeTransaction:1863 android.view.SurfaceView.-$$Nest$mapplyOrMergeTransaction:0 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionChanged:1932
06-25 10:14:52.736  5111  5195 E ReactNativeJS: [Error: Uncaught (in promise, id: 0): "Error: java.lang.RuntimeException: Timeouted: JPromise was destroyed!
06-25 10:14:52.736  5111  5195 E ReactNativeJS: 	at com.facebook.jni.HybridData$Destructor.deleteNative(Native Method)
06-25 10:14:52.736  5111  5195 E ReactNativeJS: 	at com.facebook.jni.HybridData$Destructor.destruct(HybridData.java:82)
06-25 10:14:52.736  5111  5195 E ReactNativeJS: 	at com.facebook.jni.DestructorThread$1.run(DestructorThread.java:78)
06-25 10:14:52.736  5111  5195 E ReactNativeJS: "]
06-25 10:14:52.786  5111  5240 D CXCP    : CaptureSessionState-1 Configured
06-25 10:14:52.786  5111  5242 D CXCP    : CXCP#createCaptureSession-0 - 560.839 ms
06-25 10:14:52.788  5111  5558 W .example.simple: Long monitor contention with owner CXCP-05 (5242) at void android.hardware.camera2.impl.CameraDeviceImpl.waitUntilIdle()(CameraDeviceImpl.java:1762) waiters=0 in void android.hardware.camera2.impl.CameraDeviceImpl$6.run() for 549ms
06-25 10:14:52.788  5111  5242 I CXCP    : Configured CaptureSessionState-1 in 564.393 ms
06-25 10:14:52.788  5111  5242 D CXCP    : GraphProcessor(cameraGraph: CameraGraph-1) onGraphStarted
06-25 10:14:52.788  5111  5242 D CXCP    : CameraGraph-1 state updated to GRAPH_STARTED
06-25 10:14:52.789  5111  5242 D CXCP    : Updated current camera internal state: OPEN to CombinedCameraState(state=OPEN, error=null)
06-25 10:14:52.789  5111  5242 D CXCP    : Building CaptureRequest for Request(streams=[Stream-1], template=RequestTemplate(value=1))@7aac32b
06-25 10:14:52.792  5111  5242 D CXCP    : CXCP#createCaptureRequest-0 - 2.415 ms
06-25 10:14:52.793  5111  5242 D CXCP    : GraphRequestProcessor-1 submitting Camera2CaptureSequence-1
06-25 10:14:52.793  5111  5239 D CXCP    : CaptureSessionState-1 Ready
06-25 10:14:52.795  5111  5111 I ActiveCameraSessionSingle: Camera #CameraId-0 State changed! Type: OPEN | Error: null
06-25 10:14:52.802  5111  5242 D CXCP    : CXCP#setRepeatingRequest-0 - 7.045 ms
06-25 10:14:52.802  5111  5242 D CXCP    : GraphRequestProcessor-1 submitted Camera2CaptureSequence-1
06-25 10:14:52.802  5111  5241 D CXCP    : CaptureSessionState-1 Active
06-25 10:14:52.807  5111  5136 I CameraManagerGlobal: Camera 0 facing CAMERA_FACING_BACK state now CAMERA_STATE_ACTIVE for client com.margelo.nitro.camera.example.simple API Level 2 User Id 0Device Id 0
06-25 10:14:52.887  5111  5111 I SurfaceView: 51898495 Changes: creating=false format=false size=false visible=false alpha=false hint=false left=true top=false z=false attached=true lifecycleStrategy=false
06-25 10:14:52.888  5111  5111 I SurfaceView: 51898495 Cur surface: Surface(name=null mNativeObject=-5476376664021856064)/@0x4cac70d
06-25 10:14:52.888  5111  5111 D SurfaceComposerClient: setCornerRadius ## 317e87f SurfaceView[com.margelo.nitro.camera.example.simple/com.margelo.nitro.camera.example.simple.MainActivity]@0#3324 cornerRadius=0.000000
06-25 10:14:52.888  5111  5111 I SV[51898495 MainActivity]: updateSurface: mVisible = true mSurface.isValid() = true
06-25 10:14:52.888  5111  5111 I SV[51898495 MainActivity]: updateSurface: mSurfaceCreated = true surfaceChanged = false visibleChanged = false
06-25 10:14:52.888  5111  5111 V SurfaceView: Layout: x=-300 y=75 w=1440 h=1080, frame=Rect(0, 0 - 1440, 1080)
06-25 10:14:52.889  5111  5111 I VRI[MainActivity]@e4d5551: registerCallbackForPendingTransactions
06-25 10:14:52.921  5111  5153 D SurfaceView: 51898495 updateSurfacePosition RenderWorker, frameNr = 94, position = [-301, 75, 1381, 2317] surfaceSize = 1440x1080
06-25 10:14:52.921  5111  5153 I SV[51898495 MainActivity]: uSP: rtp = Rect(-301, 75 - 1381, 2317) rtsw = 1440 rtsh = 1080
06-25 10:14:52.921  5111  5153 I SV[51898495 MainActivity]: onSSPAndSRT: pl = -301 pt = 75 sx = 1.1680555 sy = 2.0759258
06-25 10:14:52.922  5111  5153 I SV[51898495 MainActivity]: aOrMT: VRI[MainActivity]@e4d5551 t = android.view.SurfaceControl$Transaction@6ff8cd3 fN = 94 android.view.SurfaceView.-$$Nest$mapplyOrMergeTransaction:0 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionChanged:1932 android.graphics.RenderNode$CompositePositionUpdateListener.positionChanged:401
06-25 10:14:52.922  5111  5153 I VRI[MainActivity]@e4d5551: mWNT: t=0xb400006e8ced2710 mBlastBufferQueue=0xb40000705c886390 fn= 94 HdrRenderState mRenderHdrSdrRatio=1.0 caller= android.view.SurfaceView.applyOrMergeTransaction:1863 android.view.SurfaceView.-$$Nest$mapplyOrMergeTransaction:0 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionChanged:1932
06-25 10:14:52.922  5111  5174 I VRI[MainActivity]@e4d5551: mWNT: t=0xb400006e8cefa790 mBlastBufferQueue=0xb40000705c886390 fn= 94 HdrRenderState mRenderHdrSdrRatio=1.0 caller= android.view.ViewRootImpl$10.onFrameDraw:6536 android.view.ViewRootImpl$4.onFrameDraw:2489 android.view.ThreadedRenderer$1.onFrameDraw:718
06-25 10:14:52.971  5111  5861 D nativeloader: Load /data/app/~~8FnvxEwvRxKilmV4A6QLZA==/com.margelo.nitro.camera.example.simple-gGlmM4QLrf6iGhg6L6fJ_w==/base.apk!/lib/arm64-v8a/libimagepipeline.so using class loader ns clns-10 (caller=/data/app/~~8FnvxEwvRxKilmV4A6QLZA==/com.margelo.nitro.camera.example.simple-gGlmM4QLrf6iGhg6L6fJ_w==/base.apk!classes20.dex): ok
06-25 10:14:52.983  5111  5861 I Kumiho-Kumiho: getPackageName: com.margelo.nitro.camera.example.simple
06-25 10:14:52.993  5111  5872 I Kumiho-Kumiho: getPackageName: com.margelo.nitro.camera.example.simple
06-25 10:14:53.000  5111  5872 I Kumiho-Kumiho: getPackageName: com.margelo.nitro.camera.example.simple
06-25 10:14:53.102  5111  5244 D StreamStateObserver: Update Preview stream state to STREAMING
06-25 10:14:53.103  5111  5225 I BLASTBufferQueue: [317e87f SurfaceView[com.margelo.nitro.camera.example.simple/com.margelo.nitro.camera.example.simple.MainActivity]@0#2](f:0,a:0,s:0) onFrameAvailable the first frame is available
06-25 10:14:53.103  5111  5225 I SurfaceComposerClient: apply transaction with the first frame. layerId: 3325, bufferData(ID: 21951577849864, frameNumber: 1)
06-25 10:14:53.104  5111  5111 I HybridPreviewViewSpec: PreviewView started!
06-25 10:14:53.536  5111  5111 I VRI[MainActivity]@e4d5551: handleResized, frames=ClientWindowFrames{frame=[0,0][1080,2316] display=[0,0][1080,2316] parentFrame=[0,0][0,0]} displayId=0 dragResizing=false compatScale=1.0 frameChanged=false attachedFrameChanged=false configChanged=false displayChanged=false compatScaleChanged=false dragResizingChanged=false
06-25 10:14:56.065  5111  5111 I InsetsSourceConsumer: applyRequestedVisibilityToControl: visible=true, type=statusBars, host=com.margelo.nitro.camera.example.simple/com.margelo.nitro.camera.example.simple.MainActivity
06-25 10:14:56.236  5111  5111 I VRI[MainActivity]@e4d5551: ViewPostIme pointer 0
06-25 10:14:56.239  5111  5111 I VRI[MainActivity]@e4d5551: call setFrameRateCategory for touch hint category=high hint, reason=touch, vri=VRI[MainActivity]@e4d5551
06-25 10:14:56.259  5111  5111 I VRI[MainActivity]@e4d5551: ViewPostIme pointer 1
06-25 10:14:57.763  5111  5111 I VRI[MainActivity]@e4d5551: ViewPostIme pointer 0
06-25 10:14:57.826  5111  5111 I VRI[MainActivity]@e4d5551: ViewPostIme pointer 1
06-25 10:14:57.828  5111  5111 W unknown:ReactNative: Can't cancel already finished gesture. Is a child View trying to start a gesture from an UP/CANCEL event?
06-25 10:14:57.834  5111  5195 I ReactNativeJS: Capturing Photo...
06-25 10:14:57.838  5111  5219 I HybridCameraPhotoOutputSpec: Capturing Photo to file...
06-25 10:14:57.838  5111  5219 D ImageCapture: setFlashMode: flashMode = 2
06-25 10:14:57.838  5111  5219 D CXCP    : setFlashAsync: flashMode = 2, requestControl = androidx.camera.camera2.impl.DeferredUseCaseCameraRequestControl@9dd7d3c
06-25 10:14:57.838  5111  5239 D CXCP    : State3AControl.getFinalPreferredAeMode: preferAeMode = 1
06-25 10:14:57.840  5111  5111 D ImageCapture: takePictureInternal
06-25 10:14:57.840  5111  5111 D TakePictureManagerImpl: Issue the next TakePictureRequest.
06-25 10:14:57.840  5111  5239 D CXCP    : UseCaseCameraRequestControlImpl#setParametersAsync: [DEFAULT] values = {CaptureRequest.Key(android.control.aeMode)=1, CaptureRequest.Key(android.control.afMode)=4, CaptureRequest.Key(android.control.awbMode)=1}, optionPriority = OPTIONAL
06-25 10:14:57.841  5111  5111 D ProcessingRequest: ProcessingRequest: mRequestId = 0, mTagBundleKey = 265117420
06-25 10:14:57.843  5111  5239 D CXCP    : UseCaseCameraState#updateState: parameters = {CaptureRequest.Key(android.control.aeExposureCompensation)=0, CaptureRequest.Key(android.control.aeMode)=1, CaptureRequest.Key(android.control.afMode)=4, CaptureRequest.Key(android.control.awbMode)=1}, internalParameters = {Metadata.Key(camerax.tag_bundle)=android.hardware.camera2.CaptureRequest.setTag.CX}, streams = null, template = RequestTemplate(value=1)
06-25 10:14:57.845  5111  5239 D CXCP    : Update RepeatingRequest: Request(streams=[Stream-1], template=RequestTemplate(value=1))@e2994bb
06-25 10:14:57.847  5111  5223 D CXCP    : Building CaptureRequest for Request(streams=[Stream-1], template=RequestTemplate(value=1))@e2994bb
06-25 10:14:57.848  5111  5223 D CXCP    : CXCP#createCaptureRequest-0 - 0.430 ms
06-25 10:14:57.848  5111  5223 D CXCP    : GraphRequestProcessor-1 submitting Camera2CaptureSequence-2
06-25 10:14:57.849  5111  5239 D CXCP    : StillCaptureRequestControl: submitting CaptureRequest(captureConfigs=[androidx.camera.core.impl.CaptureConfig@6a77dd8], captureMode=1, flashType=0, result=CompletableDeferredImpl{Active}@ab89531) at androidx.camera.camera2.impl.DeferredUseCaseCameraRequestControl@9dd7d3c
06-25 10:14:57.850  5111  5239 D CXCP    : FlashControl: Waiting for any ongoing update to be completed
06-25 10:14:57.850  5111  5223 D CXCP    : CXCP#setRepeatingRequest-0 - 1.763 ms
06-25 10:14:57.850  5111  5223 D CXCP    : GraphRequestProcessor-1 submitted Camera2CaptureSequence-2
06-25 10:14:58.108  5111  5241 D CXCP    : awaitFlashModeUpdate: initialFlashMode = 2
06-25 10:14:58.108  5111  5241 D CXCP    : StillCaptureRequestControl: Issuing single capture
06-25 10:14:58.112  5111  5241 D CXCP    : UseCaseCameraRequestControlImpl#issueSingleCaptureAsync
06-25 10:14:58.114  5111  5241 D CXCP    : UseCaseCameraRequestControl: Submitting still captures to capture pipeline
06-25 10:14:58.115  5111  5241 D CXCP    : CapturePipeline#invokeCaptureTasks: tasks = [PRE_CAPTURE, MAIN_CAPTURE, POST_CAPTURE], captureMode = 1, flashMode = 2, flashType = 0
06-25 10:14:58.115  5111  5241 D CXCP    : CapturePipeline#defaultNoFlashCapture
06-25 10:14:58.115  5111  5241 D CXCP    : CapturePipeline#List<PipelineTask>.invoke: tasks = [PRE_CAPTURE, MAIN_CAPTURE, POST_CAPTURE]
06-25 10:14:58.115  5111  5241 D CXCP    : CapturePipeline#List<PipelineTask>.invoke: starting PRE_CAPTURE
06-25 10:14:58.115  5111  5241 D CXCP    : CapturePipeline#List<PipelineTask>.invoke: PRE_CAPTURE completed
06-25 10:14:58.115  5111  5241 D CXCP    : CapturePipeline#List<PipelineTask>.invoke: starting MAIN_CAPTURE
06-25 10:14:58.115  5111  5241 D CXCP    : CapturePipeline#submitRequestInternal; Submitting [androidx.camera.core.impl.CaptureConfig@6a77dd8] with CameraPipe
06-25 10:14:58.117  5111  5241 D CXCP    : CapturePipeline#List<PipelineTask>.invoke: MAIN_CAPTURE completed
06-25 10:14:58.118  5111  5241 D CXCP    : CapturePipeline#submitRequestInternal: Acquiring session for submitting requests
06-25 10:14:58.118  5111  5241 D CXCP    : CapturePipeline#submitRequestInternal: Submitting [Request(streams=[Stream-2], template=RequestTemplate(value=2))@bd0536d]
06-25 10:14:58.118  5111  5241 D CXCP    : CapturePipeline#List<PipelineTask>.invoke: Waiting for POST_CAPTURE signal
06-25 10:14:58.119  5111  5221 D CXCP    : Building CaptureRequest for Request(streams=[Stream-2], template=RequestTemplate(value=2))@bd0536d
06-25 10:14:58.119  5111  5241 D CXCP    : StillCaptureRequestControl: Waiting for deferred list from CaptureRequest(captureConfigs=[androidx.camera.core.impl.CaptureConfig@6a77dd8], captureMode=1, flashType=0, result=CompletableDeferredImpl{Active}@ab89531)
06-25 10:14:58.120  5111  5221 D CXCP    : CXCP#createCaptureRequest-0 - 0.612 ms
06-25 10:14:58.120  5111  5221 D CXCP    : GraphRequestProcessor-1 submitting Camera2CaptureSequence-3
06-25 10:14:58.121  5111  5221 D CXCP    : CXCP#capture-0 - 0.693 ms
06-25 10:14:58.121  5111  5221 D CXCP    : GraphRequestProcessor-1 submitted Camera2CaptureSequence-3
06-25 10:14:58.150  5111  5239 D CXCP    : CaptureSessionState-1 CaptureQueueEmpty
06-25 10:14:58.354  5111  5111 D ProcessingRequest: onCaptureStarted: request ID = 0
06-25 10:14:58.359  5111  6059 D AudioSystem: onNewServiceWithAdapter: media.audio_flinger service obtained 0xb4000070cc915a10
06-25 10:14:58.361  5111  6059 D AudioSystem: getService: checking for service media.audio_flinger: 0xb400006f6cf48680
06-25 10:14:58.376  5111  5240 D CXCP    : StillCaptureRequestControl: Waiting for deferred list from CaptureRequest(captureConfigs=[androidx.camera.core.impl.CaptureConfig@6a77dd8], captureMode=1, flashType=0, result=CompletableDeferredImpl{Active}@ab89531) done
06-25 10:14:58.377  5111  5240 D CXCP    : CapturePipeline#List<PipelineTask>.invoke: Waiting for POST_CAPTURE signal done
06-25 10:14:58.380  5111  5111 D CaptureNode: OnImageAvailableListener: mCurrentRequest ID = 0, image.isNull = false
06-25 10:14:58.380  5111  5111 I ProcessingRequest: onImageCaptured: request ID = 0
06-25 10:14:58.380  5111  5111 D TakePictureManagerImpl: Issue the next TakePictureRequest.
06-25 10:14:58.380  5111  5111 D TakePictureManagerImpl: No new request.
06-25 10:14:58.381  5111  6066 D ProcessingNode: processOnDiskCapture: request ID = 0
06-25 10:14:58.389  5111  5111 W ProcessingRequest: onProcessFailure: request ID = 0
06-25 10:14:58.389  5111  5111 W ProcessingRequest: androidx.camera.core.ImageCaptureException: Image with an unsupported format was used
06-25 10:14:58.389  5111  5111 W ProcessingRequest: 	at androidx.camera.core.imagecapture.DngImage2Disk.writeImageToFile(DngImage2Disk.java:82)
06-25 10:14:58.389  5111  5111 W ProcessingRequest: 	at androidx.camera.core.imagecapture.DngImage2Disk.apply(DngImage2Disk.java:65)
06-25 10:14:58.389  5111  5111 W ProcessingRequest: 	at androidx.camera.core.imagecapture.ProcessingNode.saveRawToDisk(ProcessingNode.java:317)
06-25 10:14:58.389  5111  5111 W ProcessingRequest: 	at androidx.camera.core.imagecapture.ProcessingNode.processOnDiskCapture(ProcessingNode.java:288)
06-25 10:14:58.389  5111  5111 W ProcessingRequest: 	at androidx.camera.core.imagecapture.ProcessingNode.lambda$processInputPacket$6$androidx-camera-core-imagecapture-ProcessingNode(ProcessingNode.java:203)
06-25 10:14:58.389  5111  5111 W ProcessingRequest: 	at androidx.camera.core.imagecapture.ProcessingNode$$ExternalSyntheticLambda4.run(D8$$SyntheticClass:0)
06-25 10:14:58.389  5111  5111 W ProcessingRequest: 	at androidx.camera.core.CameraXTracer.trace(CameraXTracer.kt:35)
06-25 10:14:58.389  5111  5111 W ProcessingRequest: 	at androidx.camera.core.imagecapture.ProcessingNode.processInputPacket(ProcessingNode.java:193)
06-25 10:14:58.389  5111  5111 W ProcessingRequest: 	at androidx.camera.core.imagecapture.ProcessingNode.lambda$transform$0$androidx-camera-core-imagecapture-ProcessingNode(ProcessingNode.java:148)
06-25 10:14:58.389  5111  5111 W ProcessingRequest: 	at androidx.camera.core.imagecapture.ProcessingNode$$ExternalSyntheticLambda8.run(D8$$SyntheticClass:0)
06-25 10:14:58.389  5111  5111 W ProcessingRequest: 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1100)
06-25 10:14:58.389  5111  5111 W ProcessingRequest: 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
06-25 10:14:58.389  5111  5111 W ProcessingRequest: 	at java.lang.Thread.run(Thread.java:1572)
06-25 10:14:58.389  5111  5111 W ProcessingRequest: Caused by: java.lang.IllegalArgumentException: Missing metadata fields for tag CalibrationIlluminant1 (c65a)
06-25 10:14:58.389  5111  5111 W ProcessingRequest: 	at android.hardware.camera2.DngCreator.nativeWriteImage(Native Method)
06-25 10:14:58.389  5111  5111 W ProcessingRequest: 	at android.hardware.camera2.DngCreator.writeByteBuffer(DngCreator.java:511)
06-25 10:14:58.389  5111  5111 W ProcessingRequest: 	at android.hardware.camera2.DngCreator.writeImage(DngCreator.java:445)
06-25 10:14:58.389  5111  5111 W ProcessingRequest: 	at androidx.camera.core.imagecapture.DngImage2Disk.writeImageToFile(DngImage2Disk.java:80)
06-25 10:14:58.389  5111  5111 W ProcessingRequest: 	... 12 more
06-25 10:14:58.395  5111  5195 E ReactNativeJS: 'Failed to take Photo!', [Error: androidx.camera.core.ImageCaptureException: Image with an unsupported format was used
06-25 10:14:58.395  5111  5195 E ReactNativeJS: 	at androidx.camera.core.imagecapture.DngImage2Disk.writeImageToFile(DngImage2Disk.java:82)
06-25 10:14:58.395  5111  5195 E ReactNativeJS: 	at androidx.camera.core.imagecapture.DngImage2Disk.apply(DngImage2Disk.java:65)
06-25 10:14:58.395  5111  5195 E ReactNativeJS: 	at androidx.camera.core.imagecapture.ProcessingNode.saveRawToDisk(ProcessingNode.java:317)
06-25 10:14:58.395  5111  5195 E ReactNativeJS: 	at androidx.camera.core.imagecapture.ProcessingNode.processOnDiskCapture(ProcessingNode.java:288)
06-25 10:14:58.395  5111  5195 E ReactNativeJS: 	at androidx.camera.core.imagecapture.ProcessingNode.lambda$processInputPacket$6$androidx-camera-core-imagecapture-ProcessingNode(ProcessingNode.java:203)
06-25 10:14:58.395  5111  5195 E ReactNativeJS: 	at androidx.camera.core.imagecapture.ProcessingNode$$ExternalSyntheticLambda4.run(D8$$SyntheticClass:0)
06-25 10:14:58.395  5111  5195 E ReactNativeJS: 	at androidx.camera.core.CameraXTracer.trace(CameraXTracer.kt:35)
06-25 10:14:58.395  5111  5195 E ReactNativeJS: 	at androidx.camera.core.imagecapture.ProcessingNode.processInputPacket(ProcessingNode.java:193)
06-25 10:14:58.395  5111  5195 E ReactNativeJS: 	at androidx.camera.core.imagecapture.ProcessingNode.lambda$transform$0$androidx-camera-core-imagecapture-ProcessingNode(ProcessingNode.java:148)
06-25 10:14:58.395  5111  5195 E ReactNativeJS: 	at androidx.camera.core.imagecapture.ProcessingNode$$ExternalSyntheticLambda8.run(D8$$SyntheticClass:0)
06-25 10:14:58.395  5111  5195 E ReactNativeJS: 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1100)
06-25 10:14:58.395  5111  5195 E ReactNativeJS: 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
06-25 10:14:58.395  5111  5195 E ReactNativeJS: 	at java.lang.Thread.run(Thread.java:1572)
06-25 10:14:58.395  5111  5195 E ReactNativeJS: Caused by: java.lang.IllegalArgumentException: Missing metadata fields for tag CalibrationIlluminant1 (c65a)
06-25 10:14:58.395  5111  5195 E ReactNativeJS: 	at android.hardware.camera2.DngCreator.nativeWriteImage(Native Method)
06-25 10:14:58.395  5111  5195 E ReactNativeJS: 	at android.hardware.camera2.DngCreator.writeByteBuffer(DngCreator.java:511)
06-25 10:14:58.395  5111  5195 E ReactNativeJS: 	at android.hardware.camera2.DngCreator.writeImage(DngCreator.java:445)
06-25 10:14:58.395  5111  5195 E ReactNativeJS: 	at androidx.camera.core.imagecapture.DngImage2Disk.writeImageToFile(DngImage2Disk.java:80)
06-25 10:14:58.395  5111  5195 E ReactNativeJS: 	... 12 more
06-25 10:14:58.395  5111  5195 E ReactNativeJS: ]

Additional context

Video of the issue:

Screen_Recording_20260625_102534_SimpleCamera.mp4

Submission

  • The reproduction I linked is either (preferred) a PR against this repo that adds a failing harness test following the harness-tests README, or (fallback) a public repo that reproduces the bug on a fresh clone. I understand the issue will be closed without one.
  • I pasted logs as text (not screenshots).
  • I wrote this report in my own words. I did not paste AI-generated descriptions of the bug.

Metadata

Metadata

Assignees

No one assigned

    Labels

    🐛 bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions