Получите оптимальный размер предварительного просмотра видео для высокоскоростной видеосессии

1

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

В настоящее время в 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, но я хочу знать, есть ли более надежный надежный способ или хороший пример на что я мог посмотреть.

Теги:
android-camera2
video

1 ответ

0

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

  • 1
    Моя проблема, и, пожалуйста, дайте мне знать ваши мысли, связана с тем, если, полагаясь на getHighSpeedVideoSizes в качестве источника для разрешения размера предварительного просмотра, бренд неожиданно неожиданно выпускает новое устройство с замедленным движением 4K, которое тогда будет означать 4K Предварительный размер. Хотя я думаю, что вряд ли это произойдет в ближайшее время, если отложить этот факт в сторону, в обычной не высокоскоростной видеосессии запись 4K на устройствах меньшего размера дисплея не является проблемой, так как предварительный просмотр разрешен с помощью SurfaceTexture. класс и такой размер не привязан к видеовыходу, поэтому его можно ограничить до 1920x1080.
  • 1
    Я сочувствую вашей озабоченности, но могу предложить несколько способов решения проблемы <s> if </ s>, когда будет представлено высокоскоростное видео с разрешением 4K. Прежде всего, ограничение, что поверхность предварительного просмотра для высокоскоростного захвата должна быть такого же размера, как поверхность записывающего устройства, это ограничение является искусственным и может быть снято для всех или для пользовательской платформы. Во-вторых, одно и то же устройство может обеспечить экран 4K или более. Наконец, они могут сказать, что захват со скоростью 120 кадров в секунду больше не является «высокоскоростным» и будет следовать правилам обычной записи.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню