【问题标题】:Is it possible to combine Preview, ImageAnalysis, and VideoCapture with CameraX?是否可以将 Preview、ImageAnalysis 和 VideoCapture 与 CameraX 结合使用?
【发布时间】:2020-04-30 13:36:33
【问题描述】:

是否可以同时绑定PreviewImageAnalysisVideoCapture?成对组合,所有可能的组合(即Preview+ImageAnalysisPreview+VideoCaptureImageAnalysis+VideoCapture)工作得很好,但是将所有三个组合在一起会引发以下异常。

java.lang.IllegalArgumentException: No supported surface combination is found for camera device - Id : 1.  May be attempting to bind too many use cases.
    at androidx.camera.camera2.internal.Camera2DeviceSurfaceManager.getSuggestedResolutions(Camera2DeviceSurfaceManager.java:193)
    at androidx.camera.core.CameraX.calculateSuggestedResolutions(CameraX.java:943)
    at androidx.camera.core.CameraX.bindToLifecycle(CameraX.java:293)
    at androidx.camera.lifecycle.ProcessCameraProvider.bindToLifecycle(ProcessCameraProvider.java:229)

是否有任何解决方法可以让我使用ImageAnalysis 并同时录制视频?

【问题讨论】:

  • 这个限制可能取决于设备,我不确定。但是如果你有 ImageAnalysis,你可以运行你的自定义录像机(基于 MediaCodec)。
  • 这个成功了吗?
  • 很遗憾没有。我最终使用 Camera2 实现了我自己的解决方案。我不知道自从我发布原始帖子以来,CameraX 是否发生了任何变化。

标签: android android-camera2 android-camerax


【解决方案1】:

由于相机硬件管道的缩放器单元限制,同时输出的数量受到限制。

一般来说,高端设备之外不支持 3 个并行 YUV 输出。

您可以在此处查看许多表格: https://developer.android.com/reference/android/hardware/camera2/CameraDevice#createCaptureSession(android.hardware.camera2.params.SessionConfiguration)

并查看可以在各种硬件级别上设置哪些类型的并行输出(PRIV 和 YUV 是这些用例的操作对象)。

只要分析以 640x480 或更低分辨率运行,完整的设备就可以做到这一点。但 LEGACY 和 LIMITED 不能。

也就是说,您可以使用 ImageAnalysis 帧来驱动预览,但它肯定不太方便 - 可能需要使用 NDK 或其他麻烦。

【讨论】:

  • 在某些情况下无法使用ImageAnalysis 进行预览。例如,在进行图像识别时,您需要帧非常小以最大限度地减少延迟。我最终使用Camera2 并将3 个表面传递给CameraDevice.createCaptureSession(),分别用于预览、图像分析和视频捕获。这很顺利,现在百万美元的问题是:如果我可以用Camera2 做到这一点,为什么我不能用CameraX 做到这一点?
  • 它可能在您的测试设备上运行,但可能有很多设备无法运行。但是,CameraX 在您的设备上应该可以类似地工作,因此出现问题很奇怪。 CameraX 选择的分辨率可能比您手动设置的分辨率高?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 2015-06-07
  • 2015-01-02
相关资源
最近更新 更多