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