为高速视频会话获取最佳视频预览大小

Get the optimal video preview size for a high-speed video session

此问题针对的是高速视频会话,而不是普通视频会话。

目前在 Android Camera2 API 中,为了确定最佳预览尺寸,我使用目标视频输出尺寸作为参考,并使用尺寸选择列表从中计算出最佳预览尺寸返回者:

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

视频输出大小是从返回的列表中选择的: StreamConfigurationMap.getHighSpeedVideoSizes();

预览尺寸计算是通过从SurfaceTexture.class列表中选择尺寸来完成的,与视频输出尺寸具有相同的宽高比,并且在1920x0180尺寸范围内constrain,即camera2要保证的最大预览尺寸API.

综上所述,当使用 createHighSpeedRequestList 时,如果发现传递给会话的任何表面的尺寸不符合支持的高速尺寸,则此方法将失败,这适用也到预览表面。请参阅以下来源: android.hardware.camera2.utils.SurfaceUtils.checkConstrainedHighSpeedSurfaces

问题是,为高速视频会话获取有效预览尺寸的最佳方式是什么?我不能依赖 SurfaceTexture.class 返回的选项列表,因为这些与高速会话无关。

我最好的猜测是我应该遍历所有这些并只找到一个在 StreamConfigurationMap.getHighSpeedVideoSizes 返回的高速大小列表中的一个,但是想知道有没有更扎实靠谱的方法,或者有好的例子可以参考

您的情况无需调用 StreamConfigurationMap.getOutputSizes(SurfaceTexture.class)。从 StreamConfigurationMap.getHighSpeedVideoSizes() 获得的列表中的任何大小都将满足前一个条件。请注意,如果您选择某些特定的 FPS,则可能不支持后一个列表中的某些尺寸。通常我们更喜欢最大的可用尺寸,但如果您的要求允许较小的尺寸,那就去做吧:这可能会显着减少电池消耗并提高设备响应能力。