2017-10-13 112 views
0

我使用Camera2 API来创建一个摄像头组件,可以扫描条形码和扫描已期间的拍照能力处理框架。这是有点工作,但预览闪烁 - 它似乎像以前的帧,有时绿色框架中断实时预览。的Android Camera2拍照而

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

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

+0

'提前致谢!'如果​​您认为您可以提前致谢,您肯定无法获得帮助。我们不是那样的。 – greenapps

+0

你写过你正在使用Nexus 5.你使用哪种ROM? –

+0

实际上在两个Nexus 5上测试了这一点,其中一个使用Android 5.1和另一个6.0。根本没有生根 – aalices

回答

0

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

1

是你一个LEGACY -level设备上测试的设备?

如果是这样,靶向JPEG输出任何捕获可能慢得多,因为它们可以运行一个precapture序列,并可能略微停顿一下,预览以及。

但应该不会造成绿色框架,除非有一个设备级的错误。

+0

它是一个Nexus 5,所以没有 - 不是一个LEGACY设备。 – aalices

0

是的,你可以。假设您配置预览饲料用YUV帧的ImageReader(因为你也可以把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()); 
}