Skip to content

🐛 Unable to capture video in multi-camera #3816

@sanketpipaliya208

Description

@sanketpipaliya208

Prerequisites

Reproduction

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

Steps to reproduce

Just look at my error you might get the issue

What did you expect to happen?

It should take photos or videos of two camera view

What actually happened?

I got this error when I tried to capture a photo for both outputs

 LOG  🚀 - MultiCameraScreen - e: [Error: java.lang.IllegalArgumentException: androidx.camera.core.internal.CameraUseCaseAdapter$CameraException: java.lang.IllegalArgumentException: No supported surface combination is found for camera device - Id : 2. May be attempting to bind too many use cases. Existing surfaces: []. New configs: [androidx.camera.core.impl.PreviewConfig@5279011, androidx.camera.core.impl.ImageCaptureConfig@de3b576, androidx.camera.core.impl.PreviewConfig@a826777, androidx.camera.core.impl.ImageCaptureConfig@2167fe4]. GroupableFeature settings: FeatureSettings(cameraMode=0, requiredMaxBitDepth=8, hasVideoCapture=false, videoStabilization=UNSPECIFIED, isUltraHdrOn=false, isHighSpeedOn=false, isFeatureComboInvocation=false, requiresFeatureComboQuery=false, targetFpsRange=[0, 0], isStrictFpsRequired=false).
	at androidx.camera.lifecycle.LifecycleCameraRepository.bindToLifecycleCamera(LifecycleCameraRepository.java:402)
	at androidx.camera.lifecycle.LifecycleCameraProviderImpl.bindToLifecycleInternal(LifecycleCameraProviderImpl.kt:695)
	at androidx.camera.lifecycle.LifecycleCameraProviderImpl.bindToLifecycleInternal$default(LifecycleCameraProviderImpl.kt:597)
	at androidx.camera.lifecycle.LifecycleCameraProviderImpl.bindToLifecycle(LifecycleCameraProviderImpl.kt:402)
	at androidx.camera.lifecycle.ProcessCameraProvider.bindToLifecycle(ProcessCameraProvider.kt:371)
	at com.margelo.nitro.camera.hybrids.HybridCameraSession$configure$1.invokeSuspend(HybridCameraSession.kt:126)
	at com.margelo.nitro.camera.hybrids.HybridCameraSession$configure$1.invoke(Unknown Source:8)
	at com.margelo.nitro.camera.hybrids.HybridCameraSession$configure$1.invoke(Unknown Source:2)
	at com.margelo.nitro.core.Promise$Companion$async$1.invokeSuspend(Promise.kt:146)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
	at android.os.Handler.handleCallback(Handler.java:995)
	at android.os.Handler.dispatchMessage(Handler.java:103)
	at android.os.Looper.loopOnce(Looper.java:273)
	at android.os.Looper.loop(Looper.java:363)
	at android.app.ActivityThread.main(ActivityThread.java:10060)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:632)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)
Caused by: androidx.camera.core.internal.CameraUseCaseAdapter$CameraException: java.lang.IllegalArgumentException: No supported surface combination is found for camera device - Id : 2. May be attempting to bind too many use cases. Existing surfaces: []. New configs: [androidx.camera.core.impl.PreviewConfig@5279011, androidx.camera.core.impl.ImageCaptureConfig@de3b576, androidx.camera.core.impl.PreviewConfig@a826777, androidx.camera.core.impl.ImageCaptureConfig@2167fe4]. GroupableFeature settings: FeatureSettings(cameraMode=0, requiredMaxBitDepth=8, hasVideoCapture=false, videoStabilization=UNSPECIFIED, isUltraHdrOn=false, isHighSpeedOn=false, isFeatureComboInvocation=false, requiresFeatureComboQuery=false, targetFpsRange=[0, 0], isStrictFpsRequired=false).
	at androidx.camera.core.internal.CameraUseCaseAdapter.addUseCases(CameraUseCaseAdapter.java:385)
	at androidx.camera.lifecycle.LifecycleCamera.bind(LifecycleCamera.java:307)
	at androidx.camera.lifecycle.LifecycleCameraRepository.bindToLifecycleCamera(LifecycleCameraRepository.java:400)
	... 18 more
Caused by: java.lang.IllegalArgumentException: No supported surface combination is found for camera device - Id : 2. May be attempting to bind too many use cases. Existing surfaces: []. New configs: [androidx.camera.core.impl.PreviewConfig@5279011, androidx.camera.core.impl.ImageCaptureConfig@de3b576, androidx.camera.core.impl.PreviewConfig@a826777, androidx.camera.core.impl.ImageCaptureConfig@2167fe4]. GroupableFeature settings: FeatureSettings(cameraMode=0, requiredMaxBitDepth=8, hasVideoCapture=false, videoStabilization=UNSPECIFIED, isUltraHdrOn=false, isHighSpeedOn=false, isFeatureComboInvocation=false, requiresFeatureComboQuery=false, targetFpsRange=[0, 0], isStrictFpsRequired=false).
	at androidx.camera.camera2.adapter.SupportedSurfaceCombination.resolveSpecsBySettings(SupportedSurfaceCombination.kt:622)
	at androidx.camera.camera2.adapter.SupportedSurfaceCombination.resolveSpecsByCheckingMethod(SupportedSurfaceCombination.kt:531)
	at androidx.camera.camera2.adapter.SupportedSurfaceCombination.getSuggestedStreamSpecifications(SupportedSurfaceCombination.kt:485)
	at androidx.camera.camera2.adapter.CameraSurfaceAdapter.getSuggestedStreamSpecs(CameraSurfaceAdapter.kt:252)
	at androidx.camera.core.internal.StreamSpecsCalculatorImpl.calculateSuggestedStreamSpecsForNewUseCases(StreamSpecsCalculator.kt:292)
	at androidx.camera.core.internal.StreamSpecsCalculatorImpl.calculateSuggestedStreamSpecs(StreamSpecsCalculator.kt:158)
	at androidx.camera.core.internal.CameraUseCaseAdapter.calculateAndValidateUseCases(CameraUseCaseAdapter.java:514)
	at androidx.camera.core.internal.CameraUseCaseAdapter.calculateAndValidateUseCases(CameraUseCaseAdapter.java:546)
	at androidx.camera.core.internal.CameraUseCaseAdapter.addUseCases(CameraUseCaseAdapter.java:378)
	... 20 more
]
  const frontDevice = useCameraDevice("back");
  const device = useCameraDevice("back");
  const devices = useCameraDevices();
  const backDevice = devices.find((d) => d.type === "triple") || device;
  // const telephotoDevice = devices.find((d) => d.type === "telephoto") || device;

  const frontPreviewOutput = usePreviewOutput();
  const backPreviewOutput = usePreviewOutput();

  const frontPhotoOutput = usePhotoOutput();
  const backPhotoOutput = usePhotoOutput();

 const startSession = useCallback(async () => {
    if (!frontDevice || !backDevice) return;

    setStatus("loading");
    setErrorMsg(null);

    if (!VisionCamera.supportsMultiCamSessions) {
      setStatus("unsupported");
      return;
    }

    const session = await VisionCamera.createCameraSession(true);
    sessionRef.current = session;

    try {
      const [frontController, backController] = await session.configure([
        // Front camera
        {
          input: frontDevice,
          outputs: [
            { output: frontPreviewOutput, mirrorMode: "off" },
            { output: frontPhotoOutput, mirrorMode: "off" },
            // { output: frontRecorder.videoOutput, mirrorMode: "off" },
          ],
          constraints: [],
        },
        // Back camera
        {
          input: backDevice,
          outputs: [
            { output: backPreviewOutput, mirrorMode: "off" },
            { output: backPhotoOutput, mirrorMode: "off" },
            // { output: backRecorder.videoOutput, mirrorMode: "off" },
          ],
          constraints: [],
        },
      ]);

      setStatus("running");
    } catch (e: unknown) {
      console.log("🚀 - MultiCameraScreen - e:", e);
      const msg = e instanceof Error ? e.message : String(e);
      setErrorMsg(msg);
      setStatus("error");
      session.dispose();
      return;
    }

    await session.start();

    session.addOnErrorListener((error) => {
      console.log("Session error:", error);
      setErrorMsg(error.message);
      // Handle the error, e.g. show an error message, stop the session, etc.
      setStatus("error");
    });
  }, [frontDevice, backDevice, frontPreviewOutput, backPreviewOutput]);

Affected platforms

Android (device)

Device(s) affected

Samsung S24

VisionCamera version

^5.0.7

React Native version

0.83.4

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

No crashes

Additional context

No response

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