此处的相关代码:
private void setupCamera(int width, int height) {
CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
try {
CameraCharacteristics cameraCharacteristics = null;
for (String cameraId : cameraManager.getCameraIdList()) {
mCameraId = cameraId;
cameraCharacteristics = cameraManager.getCameraCharacteristics(mCameraId);
if (cameraCharacteristics.get(CameraCharacteristics.LENS_FACING) ==
CameraCharacteristics.LENS_FACING_BACK) {
break;
}
}
StreamConfigurationMap map = cameraCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
mImageSize = new Size(640, 480);
mFrameDuration = map.getOutputMinFrameDuration(ImageFormat.YUV_420_888,mImageSize);
mImageReader = ImageReader.newInstance(640,
480,
ImageFormat.YUV_420_888, 50);
mSurface = mImageReader.getSurface();
mImageReader.setOnImageAvailableListener(mOnImageAvailableListener, mImageReaderHandler);
使用Google的Camera2 API示例代码中的标准方法设置PreviewSize。
它在华硕Zenpad P028平板电脑(牛轧糖)上运行
一遍又一遍显示的日志:
- I/[MALI][Gralloc]: lock_ycbcr: videobuffer_status is invalid, use default value
- D/Surface: Surface::setBuffersUserDimensions(this=0x70ee1c7c00,w=640,h=480)
好像在来回重置缓冲区大小。可以预测地将帧速率降低到每帧60ms。
在我的Nexus 5P手机(棉花糖)上不会发生这种情况。
我尝试将mImageSize
设置为不同的尺寸。