1

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

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

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

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

预览大小的计算是通过从SurfaceTexture.class列表中选择大小来完成的,具有与视频输出大小相同的纵横比,并且在 1920x0180 大小约束内,这是由 camera2 API 保证的最大预览大小。

说了这么多,当使用createHighSpeedRequestList时,如果它发现传递给会话的任何表面都没有支持的高速尺寸的尺寸,则此方法将失败,这也适用于预览表面。请参阅以下来源: android.hardware.camera2.utils.SurfaceUtils.checkConstrainedHighSpeedSurfaces

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

我最好的猜测是我应该遍历所有这些,然后在StreamConfigurationMap.getHighSpeedVideoSizes返回的高速大小列表中找到一个,但我想知道是否有更可靠的方法,或者一个很好的例子我可以看看。

4

1 回答 1

0

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

于 2019-04-21T19:41:49.973 回答