Это 2017 год, и я, наконец, начинаю переключение с Camera1 на Camera2. В Camera1 я очень полагался на setPreviewCallbackWithBuffer()
для выполнения обработки в реальном времени, однако в Camera2 это работает намного медленнее до такой степени, что становится почти непригодным.
Для сравнения, на Moto G3 Camera1 можно легко производить 30-40 FPS, а на Camera2 я не мог получить более 10-15 FPS.
Вот как я создаю ImageReader
imageReader = ImageReader
.newInstance(
previewSize.width, // size is around 1280x720
previewSize.height,
ImageFormat.YUV_420_888, // note, it is not JPEG
2 // max number of images, does not really affect performance
);
imageReader.setOnImageAvailableListener(
callback,
CameraThread.getInstance().createHandler()
);
Сам обратный вызов выполняет минимально возможное задание:
Image image = reader.acquireNextImage();
image.close();
Я уже проверил аналогичные ответы, например этот. Однако их проблема заключается в том, что они используют JPEG
формат изображения вместо YUV_420_888
.
Как добиться производительности, аналогичной Camera1?