什么是COLOR_FormatYUV420Flexible?

时间:2016-07-17 13:07:37

标签: mediacodec

我想在我的android编码器上编码video / avc。编码器(Samsung S5)发布COLOR_FormatYUV420Flexible作为其支持的格式之一。耶!

但我不太明白它是什么以及如何使用它。文档说:

  

每像素灵活12位,采用8位色度和亮度分量的二次采样YUV颜色格式。

     

色度平面在水平和垂直方向上都被2子采样。在Image中使用此格式。此格式对应于YUV_420_888,可以表示COLOR_FormatYUV411Planar,COLOR_FormatYUV411PackedPlanar,COLOR_FormatYUV420Planar,COLOR_FormatYUV420PackedPlanar,COLOR_FormatYUV420SemiPlanar和COLOR_FormatYUV420PackedSemiPlanar格式

这似乎表明我可以使用这个const几乎任何类型的YUV数据:刨床,半刨床,打包等等。这似乎不太可能:编码器如何解释数据,除非我确切地指明U / V值是?

除了这个const之外,我还需要提供哪些元数据?它只是工作吗?

1 个答案:

答案 0 :(得分:4)

几乎,但不完全。

这个常数可以用于几乎任何形式的YUV(平面,半平面,包装和所有这些)。但是,问题是,不是你可以选择布局而编码器必须支持它 - 反之亦然。编码器将选择表面布局并通过灵活的描述对其进行描述,您需要支持它,无论它恰好是什么。

实际上,在使用此功能时,您无法致电getInputBuffers()getInputBuffer(int index),而是致电getInputImage(int index),其中会返回Image,其中包含指向三个平面的开始,以及它们的行和像素步幅。

注意 - 之后调用queueInputBuffer时,您必须提供一个尺寸参数,这可能很难弄清楚 - 有关详细信息,请参阅https://stackoverflow.com/a/35403738/3115956