margelo / margelo/react-native-vision-camera
🐛 [Android] Cannot capture RAW using .capturePhotoToFile() if permission is granted in the same launch of app
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 9.6k
- Forks
- 1.4k
- Avg merge
- 1d 28m
- Merged PRs (30d)
- 4
Description
Prerequisites
- I have read and followed every applicable step in the Nitro Modules Troubleshooting guide.
- I have read the VisionCamera Troubleshooting guide.
- I have searched existing issues and found nothing matching.
- I am on the latest version of react-native-vision-camera, or have a specific reason I cannot upgrade.
Reproduction
https://github.com/Jacky161/react-native-vision-camera
Steps to reproduce
- Clone https://github.com/Jacky161/react-native-vision-camera.git
bun installinsideapps/simple-camera- Run on Android Device
- Grant all requested permissions
- Within the same launch of the app, capture an image.
- Image capture fails.
- Fully close the app via the app drawer, and reopen it.
- 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:
https://github.com/user-attachments/assets/99833101-718d-4891-a21e-58f145b03370
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.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the failure in the linked apps/simple-camera project by granting permissions and calling capturePhotoToFile during the first launch, then compare it with a relaunch. Start by tracing the Android RAW capture path around the reported ImageCaptureException and permission timing. Done means RAW capture succeeds immediately after permissions are granted, without requiring an app restart.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android, react-native, typescript
- Domain
- mobile
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100