如何从AVFrame.data []和AVFrame.linesize []获取原始帧数据而不指定像素格式?

时间:2013-10-15 09:41:32

标签: ffmpeg frame

我得到一般的想法,frame.data[]的解释取决于视频(RGB或YUV)的像素格式。但是有没有通用的方法从帧中获取所有像素数据?我只是想计算帧数据的哈希值,而不是解释它来显示图像。

根据AVFrame.h:

uint8_t* AVFrame::data[AV_NUM_DATA_POINTERS]

指向图片/通道平面的指针。

int AVFrame::linesize[AV_NUM_DATA_POINTERS]

对于视频,每个图片行的字节大小。

这是否意味着如果我只是从data[i]提取linesize[i]个字节,那么我会获得有关该帧的完整像素信息?

1 个答案:

答案 0 :(得分:11)

linesize[i]包含i - 平面的步幅。

要获取整个缓冲区,请使用avcodec.h

中的函数
/**
 * Copy pixel data from an AVPicture into a buffer, always assume a
 * linesize alignment of 1. */   
int avpicture_layout(const AVPicture* src, enum AVPixelFormat pix_fmt,
                 int width, int height,
                 unsigned char *dest, int dest_size);

使用

int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height);

计算所需的缓冲区大小。