平面YUV420数据布局

Planar YUV420 data layout

在我的项目中,我使用了OpenH264编解码器,据说它以YUV 4:2:0 planar格式输出数据。解码后我得到 一个数组 width * height * 1.5 个元素,显示时看起来像这个图像:

http://o3d.googlecode.com/svn/trunk/samples_webgl/assets/shaving_cream.png

为什么主区域下方有四个区域(其中包含 Y - 负责灰度 - 元素),而不是像我的第二张图片那样的两个区域?这是否意味着格式不同,或者我错了,我的世界刚刚崩溃?

我认为结果应该是这样的:

这正是你假设的方式。您只是忽略了图像宽度上的 U 和 V 像素数量的一半。所以U数据的偶数行在左边,奇数行在右边。接下来是V数据。

为了按照您想要的方式排列它,解码器必须交错 U 和 V 数据。它不会那样做。在转换为 RGB 之前不要开始查看图像:)

接受的答案完全正确,我只是添加更多关于转换为 YUV 值的信息:

size.total = size.width * size.height;
y = yuv[position.y * size.width + position.x];
u = yuv[(position.y / 2) * (size.width / 2) + (position.x / 2) + size.total];
v = yuv[(position.y / 2) * (size.width / 2) + (position.x / 2) + size.total + (size.total / 4)];

参考:https://en.wikipedia.org/wiki/YUV

thiagolr 的图表非常准确。一个看起来更像你的准确图表是

Hans Passant 解释了你的图片看起来像有 4 张图片的原因。