StreamConfigurationMap.getOutputFormats()
函数根据手机的硬件返回不同的YUV格式。
例如,我的三星 S21 返回
ImageFormat.YUV_420_888
,以及 ImageFormat.NV21
。
我想知道这里在效率、兼容性或功能对等方面是否有任何差异?例如。
NV21
支持 60 FPS 流媒体,而 YUV_420_888 不支持?或者这纯粹只是为了稍后使用它的数据布局?
所有camera2设备都必须支持
ImageFormat.YUV_420_888
,因此这是最安全的目标格式。
它是一种灵活的格式,可以描述
NV21
或 YV21
(或 NV12
或 YV12
等)布局。
某些设备还希望声明特定格式,例如
NV21
;该设备上的 YUV_420_888
很可能也是完全相同的布局,但如果您选择 NV21
那么您不必查询行和像素步幅。
camera2 API 在大多数情况下不允许根据输出格式指定不同的可用功能。一般的例外是 RAW 输出,因为它直接来自传感器且未经处理,显然电子图像稳定或降噪等功能对 RAW 数据没有影响。但不同的 YUV 格式应该都具有相同的可用功能集。
如果支持格式 X 需要从 ISP 的首选内部格式 Y 进行内部转换,某些 YUV 格式的性能开销可能会低于其他格式。但目前还没有真正的方法来查询这一点。