【问题标题】:Android camera2 speed-upAndroid camera2 加速
【发布时间】:2015-02-17 17:03:09
【问题描述】:

我需要加快 camera2 API 的捕获速度。我试图从谷歌样本构建“android-Camera2Basic”项目。对于示例中的默认捕获请求:

 if (null == activity || null == mCameraDevice) {
            return;
        }
        // This is the CaptureRequest.Builder that we use to take a picture.
        final CaptureRequest.Builder captureBuilder =
                mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
        captureBuilder.addTarget(mImageReader.getSurface());

        // Use the same AE and AF modes as the preview.
        captureBuilder.set(CaptureRequest.CONTROL_AF_MODE,
                CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
        captureBuilder.set(CaptureRequest.CONTROL_AE_MODE,
                CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);

        // Orientation
        int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
        captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, ORIENTATIONS.get(rotation));

        CameraCaptureSession.CaptureCallback CaptureCallback
                = new CameraCaptureSession.CaptureCallback() {

            @Override
            public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request,
                                           TotalCaptureResult result) {
                showToast("Saved: " + mFile);
                unlockFocus();
            }
        };

        mCaptureSession.stopRepeating();
        mCaptureSession.capture(captureBuilder.build(), CaptureCallback, null);

发送请求需要 200-300 毫秒

mCaptureSession.capture(captureBuilder.build(), CaptureCallback, null);

然后得到结果

onImageAvailable(ImageReader reader)

可以减少这个时间吗?我尝试为捕获请求设置不同的参数,例如TEMPLATE_ZERO_SHUTTER_LAG,NOISE_REDUCTION_MODE_OFF,EDGE_MODE_OFF等,但它没有任何效果。 如果我尝试捕捉突发,那么除了第一个图像之外,所有图像都非常快,不会超过 30-40 毫秒。如何减少第一张图像的拍摄时间?

【问题讨论】:

  • 我很确定初始时间是硬件限制,您无法将其缩小。这就是请求通过传感器控制器、传感器捕获它、解码原始数据并将结果发送回您的应用控件所需的时间。
  • 我猜。但是在突发捕获帧中捕获的速度非常快,除了第一个。另外我尽量不要停止预览捕捉,所以相机应该是“热”的,不需要启动所有参数。但结果是一样的。而且我认为 ZERO_SHUTTER_LAG 选项不能有相同的结果。
  • @MaximMetelskiy 你是如何快速捕捉到突发的?即使使用 captureBurst,我的图片也间隔 200-300 毫秒。如果你愿意,我可以问一个新问题。
  • @acheroncaptain 我认为这可能取决于设备型号和 camera2 支持的版本。我的数据是完全支持 camera2 API 的 Nexus 5 的实际数据。根据我的经验,同样的结果可能有 Nexus 6 和 LG G Flex 2。如果你有这样的设备之一并且帧之间不能达到 30-40 毫秒,那么我可以帮助你。但我需要看看你的捕获代码。
  • @MaximMetelskiy 我有一个 Nexus 5。我在这里发布了一个新问题:stackoverflow.com/questions/29265126/…

标签: android android-camera


【解决方案1】:

回复您的评论,但将其变成正确的答案:

如果您从幻灯片 #22 上的 Samsung dev. conference 检查这些幻灯片,它会显示 camera2 模型。如您所见,有几个队列:

  • 待处理的请求队列
  • 在飞行捕获队列中
  • 将图像队列输出到 Surface 以显示相机预览
  • 以及对onCaptureComplete的回调

这解释了为什么第一次捕捉速度很慢,但在连拍模式下,下一张图像来得非常快。请求和处理排队,第一个需要 300 毫秒才能到达回调,但下一个已经“紧随其后”。

如果您对新 API 感兴趣(谁不会,camera2 很棒),您也可以查看full video from the Samsung Dev. conference on YouTube。和the official docs。很多关于这些的好信息。

【讨论】:

    猜你喜欢
    • 2023-01-24
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多