gpt4 book ai didi

c - 使用ffmpeg libavfilter提取亮度数据,具体为PIX_FMT_YUV420P类型

转载 作者:行者123 更新时间:2023-11-30 17:37:37 24 4
gpt4 key购买 nike

这适用于 ffmpeg 0.7(是的,我知道它很旧,但数据访问应该类似)。

我正在编写一个 libavfilter 来从每帧中提取亮度数据。在 draw_slice() 函数中,我可以访问 AVFilterLink 结构,该结构又使我可以访问具有 uint8_t *data[] 指针的 AVFilterBufferRef 结构。对于PIX_FMT_YUV420P类型,我认为data[0]、data[1]、data[2]分别指的是Y U V channel 。

我的问题是,使用指向 data[0](亮度平面)的指针,如何解释数据? pixfmt.h 头文件指出:

PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)

这是否意味着我必须每 2 个字节解释一次亮度平面数据?另外,指针所指向的值的数据类型到底是什么 - int、float 等?

提前致谢

最佳答案

是的,数据[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 高)。

关于c - 使用ffmpeg libavfilter提取亮度数据,具体为PIX_FMT_YUV420P类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22340279/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com