我得到一般的想法,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]
个字节,那么我会获得有关该帧的完整像素信息?
答案 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);
计算所需的缓冲区大小。