什么是 COLOR_FormatYUV420Flexible?

what is COLOR_FormatYUV420Flexible?

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

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

Flexible 12 bits per pixel, subsampled YUV color format with 8-bit chroma and luma components.

Chroma planes are subsampled by 2 both horizontally and vertically. Use this format with Image. This format corresponds to YUV_420_888, and can represent the COLOR_FormatYUV411Planar, COLOR_FormatYUV411PackedPlanar, COLOR_FormatYUV420Planar, COLOR_FormatYUV420PackedPlanar, COLOR_FormatYUV420SemiPlanar and COLOR_FormatYUV420PackedSemiPlanar formats

这似乎表明我可以将此 const 用于几乎任何类型的 YUV 数据:平面、半平面、打包等。这似乎不太可能:除非我指定,否则编码器如何知道如何解释数据U/V 值的确切位置?

除了这个常量之外,我还需要提供任何元数据吗?有用吗?

差不多,但不完全是。

这个常数几乎可以用于任何形式的 YUV(平面、半平面、打包等等)。但是,要注意的是,不是您可以选择布局,编码器必须支持它——恰恰相反。 encoder会选择surface layout,通过flexible description来描述,需要你支持,随便哪个。

在实践中,当使用这个时,你不调用 getInputBuffers()getInputBuffer(int index),你调用 getInputImage(int index),returns 和 Image,其中包含指向三个平面起点的指针,以及它们的行和像素步幅。

注意 - 之后调用 queueInputBuffer 时,您必须提供一个大小参数,这可能很难弄清楚 - 有关详细信息,请参阅