这属于ffmpeg 0.7(是的,我知道它是旧的,但数据访问应该是类似的)。
我正在写一个libavfilter来从每帧提取亮度数据。在draw_slice()函数中,我可以访问AVFilterLink结构,这反过来又让我访问具有uint8_t *data[]指针的AVFilterBufferRef结构。对于PIX_FMT_YUV420P类型,我认为data[0]、data[1]、data[2]分别指Y、V通道。
我的问题是,指针指向数据[0](亮度平面),我如何解释数据?pixfmt.h头文件声明:
PIX_FMT_YUV420P,///& lt;平面YUV 4:2:0, 12bpp, (1cr &每2x2个Y个样本Cb个样本)
这是否意味着我必须每2个字节解释亮度平面数据?此外,指针指向的值的数据类型究竟是什么- int, float等?
Thanks in advance
是data[0]为亮度。它是每像素8位(一个字节)。但是你必须看着线前进。
查看循环中的每个像素:
uint8_t pixval;
for(int y = 0 ; y < height; ++y )
{
for(int x = 0 ; x < width; ++x )
{
pixval = data[0][x+(y*stride)];
}
}
(显然,您可以优化它)
U和V平面的分辨率是Y平面的四分之一(高度和宽度各占一半)。所以每个字节是4像素(2宽2高)。