4:2:0 视频像素格式

若要解码压缩的 4:2:0 视频,请使用以下未压缩像素格式之一。

像素格式 说明
YUY2 4:2:2 视频像素格式中所述,除两行输出 Cb 和 Cr 样本外,每行实际生成 4:2:0 Cb 和 Cr 样本。 每对输出行的第二行通常是第一行的重复行,或者通过平均对第一行中的样本和下一对第一行的样本来生成。
UYVY 4:2:2 视频像素格式中所述,除两行输出 Cb 和 Cr 样本外,每行实际生成 4:2:0 Cb 和 Cr 样本。 每对输出行的第二行通常是第一行的重复行,或者通过平均对第一行中的样本和下一对第一行的样本来生成。
YV12 所有 Y 样本首先在内存中作为一组无符号字符 (可能具有较大步幅的内存对齐) ,然后紧随所有 Cr 样本 (Y 行的一半,) 行数的一半,然后以类似的方式立即跟随所有 Cb 样本。
IYUV 与 YV12 相同,除了交换 Cb 和 Cr 平面的顺序。
NV12 一种格式,其中所有 Y 样本首先在内存中作为无符号字符数组找到,其行数偶数 (可能具有更大的内存对齐) 的步幅。 紧随其后的是包含交错 Cb 和 Cr 样本的无符号字符数组。 如果这些样本作为小端 WORD 类型进行寻址,Cb 将处于最小有效位,Cr 将位于与 Y 样本相同的总步幅的最大有效位中。 NV12 是首选的 4:2:0 像素格式。
NV21 与 NV12 相同,除了对 Cb 和 Cr 样本进行交换,以便将无符号字符的色度数组与 Cb 一起用于每个样本 (这样,如果作为一个小端 WORD 类型进行寻址,Cr 将处于最小有效位,Cb 将处于最重要的位) 。
IMC1 与 YV12 相同,只是 Cb 和 Cr 平面的步幅与 Y 平面的步幅相同。 此外,Cb 和 Cr 平面必须落在内存边界上,这些边界是 16 行的倍数。 下面的代码示例演示 Cb 和 Cr 平面的计算。
BYTE* pCr = pY + (((Height + 15) & ~15) * Stride);
BYTE* pCb = pY + (((((Height * 3) / 2) + 15) & ~15) * Stride);
在前面的示例中,pY 是指向内存数组开头的字节指针,Height 必须是 16 的倍数。
IMC2 与 IMC1 相同,只是 Cb 和 Cr 线交错在半步边界处。 换句话说,chrominance 区域中的每个全步线以 Cr 线开头,后跟一条从下一个半步边界开始的 Cb 线。 (这是比 IMC1 更具地址空间效率的格式,因为它将色度地址空间削减一半,因此总地址空间减少 25%。) 这是与 NV12 相关的可选首选格式,但 NV12 似乎更受欢迎。
IMC3 与 IMC1 相同,但交换 Cb 和 Cr 除外。
IMC4 与 IMC2 相同,但交换 Cb 和 Cr 除外。

有关这些格式的详细信息,请参阅 Microsoft Media Foundation 文档中 推荐的 8 位 YUV 视频呈现格式