Какой формат изображения следует использовать для обработки в реальном времени с помощью Camera2 в Android? - PullRequest
0 голосов
/ 15 февраля 2019

Я занимаюсь разработкой приложения для Android, которое обрабатывает кадры предварительного просмотра Camera2 и отображает обработанные кадры на текстуре.Сначала я тестировал api camera1, он отлично работает для обработки изображений в реальном времени.

private class CameraPreviewCallback implements Camera.PreviewCallback {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
  processingRunnable.setNextFrame(data, camera);
}

}

Затем я изменил свой код, который использует камеру2 API.Для получения предварительных кадров я установил ImageFormat как YUV_420_888

    mImageReaderPreview = ImageReader.newInstance(mPreviewSize.getWidth(), mPreviewSize.getHeight(), ImageFormat.YUV_420_888, 3);
            mImageReaderPreview.setOnImageAvailableListener(mOnPreviewAvailableListener, mBackgroundHandler);    

private final ImageReader.OnImageAvailableListener mOnPreviewAvailableListener = new ImageReader.OnImageAvailableListener() {
            @Override
            public void onImageAvailable(ImageReader reader) {
                Image mImage = reader.acquireLatestImage();
                if(mImage == null) {
                    return;
                }
           processingRunnable.setNextFrame(convertYUV420888ToNV21(mImage));
                mImage.close();
            }
        };

Однако он работает медленнее, чем camera1.Может быть, это из-за одного дополнительного преобразования из YUV_420_888 в NV21.Поскольку Camera1 может напрямую предоставлять кадр NV21 от Camera1.

1 Ответ

0 голосов
/ 15 февраля 2019

Преобразование может быть дорогостоящим, в зависимости от того, как вы его реализуете и какова компоновка YUV_420_888 на данном устройстве.

Конечно, если он написан на чистом Java, вероятно, будет медленным.

Тем не менее, если используемое устройство находится на аппаратном уровне LEGACY, камера2 должна работать в устаревшем режиме, который может быть медленным для получения информации YUV.Для этих устройств использование API1 может быть предпочтительным для вашего варианта использования.

...