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

viv*_*lwt 12 ffmpeg frame

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

根据AVFrame.h:

uint8_t* AVFrame::data[AV_NUM_DATA_POINTERS]
Run Code Online (Sandbox Code Playgroud)

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

int AVFrame::linesize[AV_NUM_DATA_POINTERS]
Run Code Online (Sandbox Code Playgroud)

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

这是否意味着,如果我只是从提取data[i]linesize[i]字节,然后我得到的帧的全像素的信息?

pog*_*kiy 11

linesize[i]包含i第-th个飞机的步幅.

要获取整个缓冲区,请使用from中的函数 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);
Run Code Online (Sandbox Code Playgroud)

使用

int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height);
Run Code Online (Sandbox Code Playgroud)

计算所需的缓冲区大小.