2015-04-03 2 views
4

Я хочу захватить видео с соотношением сторон 4: 3 с камеры, обращенной к андроиду, с использованием Camera2 API (добавлено в версии 5.0 для Android). Он работает правильно, если камера не имеет матрицу 16: 9 (в качестве фронтальной камеры на Samsung Galaxy S5). В этом случае изображение выглядит растянутым, как если бы изображение было снято 16: 9 и сжато в поверхность 4: 3, предоставленную MediaRecorder.Захват изображения камеры 4: 3 с помощью андроида Camera2 API на фотокамере с матрицей сенсора 16: 9

В соответствии с документацией не должно быть никакой дополнительной конфигурации, если размер MediaRecorder установлен на один из размеров, предоставленный getOutputSizes(MediaRecorder.class). Камера должна автоматически обрезать картинку, чтобы она соответствовала размеру поверхности MediaRecorder.

Я проверил также ситуацию с обратным адресом - запись видеоизображения 16: 9 на камеру с матрицей сенсора 4: 3 (фронтальная камера Nexus-5). Он работает правильно - изображение обрезается до 16: 9.

Я предполагаю, что это ошибка в API андроида, но хотелось бы увидеть, есть ли что-то, что я пропустил здесь.

Самый простой способ воспроизвести эту проблему - использовать пример приложения camera2Basic, предлагаемый Google, следующим change, который переключается на использование фронтальной камеры и размера 4: 3 для предварительного просмотра. Он работает правильно на Nexus-5, но обеспечивает растянутое изображение на Samsung Galaxy S5. Ниже снимок экрана приложения camera2Basic на Samsung Galaxy S5 (android 5.0).

enter image description here

+0

Вы поняли, как решить эту проблему? или в этом случае ничего нельзя сделать? – Droidwala

+1

@Droidwala Я не нашел обходного пути для этого. –

ответ

0

Вы можете (и должны) использовать встроенную функцию обрезки, чтобы выбрать 4x3 область изображения, если это 16x9. То есть, просто обрезать, чтобы отбросить «ненужные» пиксели с обеих сторон. Это можно сделать, просто добавив поле/значение в CaptureRequest с помощью CaptureRequest.SCALER_CROP_REGION.

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

+0

Я тестировал с SCALER_CROP_REGION, установленным на 4: 3, и это не помогло. Рисунок все еще растягивается. –

0

Вы можете избежать этого, ссылаясь на исходный код приложения android camera2. https://android.googlesource.com/platform/packages/apps/Camera2/+/android-cts-5.1_r4/src/com/android/camera/one/v2/OneCameraZslImpl.java

+1

Хотя это может ответить на вопрос, [было бы предпочтительнее] (http://meta.stackoverflow.com/q/8259) включить сюда основные части ответа и предоставить ссылку для справки. – IKavanagh

Смежные вопросы