Получите оптимальный размер предварительного просмотра видео для высокоскоростной видеосессии - PullRequest
1 голос
/ 21 апреля 2019

Этот вопрос предназначен для высокоскоростных видеосессий, а не для обычных видеосессий.

В настоящее время в Android Camera2 API для определения оптимального размера предварительного просмотра я использую целевой выходной размер видео в качестве эталона и вычисляю из него наилучший размер предварительного просмотра, используя список вариантов размера, возвращаемых:

// SurfaceTexture.class to get the preview sizes supported by the surface
StreamConfigurationMap.getOutputSizes(SurfaceTexture.class);

Размер выходного видеосигнала выбирается из списка, возвращаемого: StreamConfigurationMap.getHighSpeedVideoSizes ();

Вычисление размера для предварительного просмотра выполняется путем выбора размера из списка SurfaceTexture.class с тем же соотношением сторон, что и для размера выходного видеосигнала, и с ограничением размера 1920x0180, которое является максимальным размером предварительного просмотра. гарантируется API-интерфейсом camera2.

Сказал, что при использовании createHighSpeedRequestList этот метод завершится ошибкой, если обнаружит, что любая из поверхностей, переданных в сеанс, не имеет размера из поддерживаемых скоростных размеров, и это относится также к поверхности предварительного просмотра. Смотрите источник в: android.hardware.camera2.utils.SurfaceUtils.checkConstrainedHighSpeedSurfaces

Вопрос в том, каков оптимальный способ получения действительного размера предварительного просмотра для высокоскоростных видеосеансов? Я не могу полагаться на список вариантов, возвращаемых SurfaceTexture.class , поскольку они не связаны с высокоскоростным сеансом.

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

1 Ответ

0 голосов
/ 21 апреля 2019

Нет необходимости вызывать StreamConfigurationMap.getOutputSizes (SurfaceTexture.class) в вашем случае. Любой размер в списке, который вы получаете из StreamConfigurationMap.getHighSpeedVideoSizes (), будет удовлетворять прежнему условию. Обратите внимание: если вы выберете какой-то конкретный FPS, некоторые размеры в последнем списке могут не поддерживаться Обычно мы предпочитаем самый большой из доступных размеров, но если ваши требования позволяют что-то меньшее, сделайте это: это может значительно снизить расход батареи и улучшить отзывчивость устройства.

...