2014-05-24 3 views
8

У меня есть пользовательская полноэкранная камера в ландшафтном режиме. Размер устройства составляет 1024 х 600.камера - просмотр изменений после начала записи видео

Поддерживаемые Размер просмотра Список
ширина х высота
320 х 240
352 х 288
528 х 432
640 х 480
1024 х 576
1024 х 768

Поддерживаемые видео Список Размер
ширина х высота
176 х 144
320 х 240
352 х 288
640 х 480
720 х 480
1280 х 720

Без setPreviewSize мой предварительный просмотр сжат сверху и снизу и длиннее слева и справа.

Мой предварительный getOptimalPreviewSize возвращение 1024 х 576 Размер, и ближнее размер видео 1280 х 720

Таким образом, после установки размера видео и начать запись видео

mediaRecorder.setVideoSize (1280, 720);

вид с поверхности изменяется (в данном случае увеличенный).

Интересно, как решить проблему разности размеров и до и после записи всегда видеть тот же предварительный просмотр?

ответ

0

Я бы просто придерживался 1280x720. Я думаю, что есть значительный успех, если вы используете этот размер предварительного просмотра, не записывая видео.

Позвольте мне объяснить: разрешение, которое вы выбрали в setPreviewSize(), имеет два эффекта: оно определяет соотношение сторон изображения, которое получено вашим SurfaceView или TextureView, и определяет размер буфера данных, полученного в Camera.PreviewCallback.onPreviewFrame() (если вы используете setPreviewCallback()). Это разрешение не влияет на время предварительного просмотра на поверхности или текстуре, поскольку эти операции выполняются на аппаратном уровне.

1

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

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

Как правило, «обработка» включает в себя:

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

Оба устройства, как правило, запрограммированы как на специализированное оборудование, так и на графический процессор. System-on-Chip (SoC) означает, что в дополнение к процессору и графическому процессору, которое может использовать поставщик (и только поставщик), для обработки может использоваться много специализированного оборудования.


Если у вас есть устройство, которое использует обрезку в качестве средства, чтобы соответствовать размеру, то предварительный и окончательная граница изображения/видео не будут соответствовать. Вы ничего не можете с этим поделать, если не настроили дополнительный код обработки для этой модели устройства.

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

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