Почему при рендеринге кадра камеры с помощью OpenGL (а затем его сохранении) создаются неровные изображения по сравнению с сохранением кадра камеры с помощью ImageReader (OpenGL - Ч / Б, ImageReader - Цвет)? Оба используют одинаковые размеры.
![enter image description here](https://i.stack.imgur.com/GasJR.png)
Предпосылки / подробности этого вопроса:
Я создание неблокирующей версии ImageReader с использованием Camera2 и GLES (до GLES31) с целью извлечения кадров неподвижных камер высокого разрешения без прерывания предварительного просмотра.
Установка использует TextureView для предварительного просмотра и GLSurfaceView для захвата кадров вне экрана. GLSurfaceView имеет простой рендерер и шейдер, который переносит aws GL_TEXTURE_EXTERNAL_OES в фреймбуфер, из которого могут быть извлечены необработанные данные изображения.
На моем тестовом устройстве размеры настроены следующим образом: Размер сенсора камеры равен 3264x2448 (получено через CameraCharacteristics)
GLSurfaceView имеет defaultBufferSize 3264x2448 и макет 3264x2448. Формат также установлен на JPEG с помощью getHolder (). SetFormat (ImageFormat.JPEG), а качество JPEG равно 100
Framebuffer установлен на 3264x2448
Это должно, на мой взгляд, привести к 1-к -1 передача кадра камеры, но очевидно, что это не так.
Я пробовал несколько других измерений, таких как соответствие размера экрана, выбор соответствующих размеров из StreamConfigurationMap, нестандартные размеры, все приводит к неровному выводу. Это как если бы в фоновом режиме всегда происходило повышение или понижение дискретизации (GL_TEXTURE_EXTERNAL_OES на самом деле поступает в разных размерах?). недель на данный момент.