【问题标题】:Android Camera2 take picture while processing framesAndroid Camera2在处理帧时拍照
【发布时间】:2017-10-13 13:48:49
【问题描述】:

我正在使用 Camera2 API 创建一个可以扫描条形码并能够在扫描过程中拍照的相机组件。它有点工作,但预览在闪烁 - 似乎以前的帧,有时绿色帧正在中断实时预览。

我的代码基于 Google 的 Camera2Basic。我只是再添加一个ImageReader 及其表面作为CaptureRequest.Builder 的新输出和目标。其中一位读者使用 JPEG,另一位使用 YUV。当我从输出中移除 JPEG 阅读器的表面时,闪烁消失(不将其传递到 createCaptureSession)。

代码很多,所以我创建了一个要点:click - 试图摆脱完全不相关的代码。

【问题讨论】:

  • Thanks in advance! 如果您认为可以提前感谢,您肯定不会得到帮助。我们不适合那样做。
  • 您写道您正在使用 Nexus 5。您使用哪个 ROM?
  • 实际在两台 Nexuses 5 上进行了测试,一台使用的是 Android 5.1,另一台使用的是 6.0。根本没有生根

标签: android android-camera2


【解决方案1】:

您正在测试的设备是在LEGACY 级别的设备上吗?

如果是这样,任何以 JPEG 输出为目标的捕获可能会慢得多,因为它们可以运行预捕获序列,并且也可能会短暂暂停预览。

但它不应导致绿框,除非存在设备级错误。

【讨论】:

  • 它是 Nexus 5,所以不 - 不是 LEGACY 设备。
【解决方案2】:

如果有人为此苦苦挣扎。 docs 中的表格显示,如果指定了 3 个目标,则 YUV ImageReader 可以使用最大尺寸等于预览尺寸(最大 1920x1080)的图像。减少这个有帮助!

【讨论】:

    【解决方案3】:

    是的,你可以。假设您将预览配置为向 ImageReader 提供 YUV 帧(因为您也可以将 JPEG 放在那里,请检查一下),如下所示:

    mImageReaderPreview = ImageReader.newInstance(mPreviewSize.getWidth(), mPreviewSize.getHeight(), ImageFormat.YUV_420_888, 1);
    

    您可以在 OnImageAvailable 侦听器中处理这些帧:

    @Override
    public void onImageAvailable(ImageReader reader) {
        Image mImage = reader.acquireNextImage();
        if (mImage == null) {
            return;
        }
    
        try {
    
    // Do some custom processing like YUV to RGB conversion, cropping, etc.
    
            mFrameProcessor.setNextFrame(mImage));
            mImage.close();
        } catch (IllegalStateException e) {
            Log.e("TAG", e.getMessage());
    }
    

    【讨论】:

      猜你喜欢
      • 2017-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多