确定FFMPEG的AVFrame中的数据[0]的大小

时间:2015-03-27 09:55:38

标签: c++ ffmpeg sizeof memcpy

我对FFMPEG相对较新,我试图使用以下代码行将视频帧的AVFrame-> data [0]分配给uint8_t * buffer:

size_t sizeOfFrameData = mpAVFrameInput->linesize[0] * mpAVFrameInput->height;

memcpy(mFrameData, mpAVFrameInput->data[0], sizeOfFrameData);

我想知道这是否是在FFMPEG中将帧数据复制到uint8_t *变量的正确方法?

由于

2 个答案:

答案 0 :(得分:1)

获取缓冲区大小:

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

复制像素数据:

int avpicture_layout(const AVPicture *src, enum AVPixelFormat pix_fmt,
                     int width, int height,
                     unsigned char *dest, int dest_size);

答案 1 :(得分:0)

不推荐使用avpicture_get_size(),这可以通过以下方式实现:

int numBytes = av_image_get_buffer_size(
    enum AVPixelFormat
    int width,
    int height,
    int align
    );

请注意,对于通常使用32的align值,我已经看到使用1位的帖子可能会导致帧失真;

但是可以用:填充帧缓冲区数据(即没有大小信息)

int av_image_fill_arrays(uint8_t *dst_data[4], int dst_linesize[4],
                         const uint8_t *src,
                         enum AVPixelFormat pix_fmt, int width, int height, int align);