Соответствующий код здесь:
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);
Установка PreviewSize с использованием стандартных методов из кода примера Camera2 API от Google.
Это работает на планшете Asus Zenpad P028 (Nougat)
Журналы, которые отображаются снова и снова:
- I/[MALI][Gralloc]: lock_ycbcr: videobuffer_status is invalid, use default value
- D/Surface: Surface::setBuffersUserDimensions(this=0x70ee1c7c00,w=640,h=480)
Похоже, он сбрасывает размер буфера туда и обратно. Что предсказуемо замедляет частоту кадров до 60 мс на кадр.
Этого не происходит на моем телефоне Nexus 5P (Marshmallow).
Я пытался настроить mImageSize
на разные размеры.