Введение
Я использую 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)