Android OpenGL camera2 разрешение текстуры

Введение

Я использую CaptureRequest.Builder и предоставляю два поверхности в качестве цели: SurfaceTexture для рисования GL и ImageReader (getSurface ()) для обработки кадра.

Я установил желаемое разрешение 640x480, установив surfaceTexture.setDefaultBufferSize и создав ImageReader.newInstance.

Проблема

Похоже, что SurfaceTexture Текстура OpenGL получает изображение с другим аспектом соотношение, чем 640x480 (4: 3), больше похоже на 2560x1440 (16: 9) (SurfaceTexture занимает весь экран, см. IMG 3). Следует отметить, что оба телефона имеют одинаковое соотношение сторон разрешения 16: 9. (Смещение текстуры по бокам оставлено намеренно).

Ниже вы можете увидеть IMG 1, отображаемый на экране монитора, а IMG 2 и IMG 3 - это снимки экрана телефона, на которых в текущем обзоре активности отображается камера. предварительный просмотр.

Вопрос

Как правильно заставить SurfaceTexture или GLSurfaceView.Renderer, чтобы получить конкретное (в данном случае 4: 3) изображение текстуры с соотношением сторон изображения с камеры. для произвольного размера View?

Актуально

Следует отметить, что существует приложение, который решает проблему, но для этого они изменяют размер представления, чтобы он соответствовал желаемому соотношению сторон.

См. также:

IMG 1 - отображаемое исходное изображение:  введите описание изображения здесь

IMG 2 - хорошее соотношение сторон (Google Nexus 5 - Android 6.0 .1):  введите описание изображения здесь

IMG 3 - плохое соотношение сторон текстуры (LG-D855 - Android 5.0)  введите описание изображения здесь


person alex    schedule 26.02.2018    source источник


Ответы (1)


«Исправлена» проблема путем обновления телефона LG до Android 6.0.

person alex    schedule 28.02.2018
comment
Это не решение, если вы выпустите свое приложение для всего мира. Поэтому не используйте Camera2 API, если вы поддерживаете Android 5-7: github.com/googlesamples / android-Camera2Basic / issues / 123 - person user25; 06.01.2019