Android Camera2在处理帧时拍照

Android Camera2在处理帧时拍照,android,android-camera2,Android,Android Camera2,我正在使用Camera2 API创建一个摄像头组件,可以扫描条形码,并能够在扫描过程中拍照。这是一种工作,但预览是闪烁-它似乎像以前的帧,有时绿色帧中断实时预览 我的代码基于谷歌的Camera2Basic。我只是再添加一个ImageReader及其表面,作为CaptureRequest.Builder的新输出和目标。其中一个阅读器使用JPEG,另一个使用YUV。当我从输出中移除JPEG读取器的表面时,闪烁消失(不将其传递到createCaptureSession) 有相当多的代码,所以我创建了一

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

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


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

您正在a级设备上测试的设备是什么

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


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

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

是的,你可以。假设您将预览配置为向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());
}

提前感谢