我对FFMPEG相对较新,我试图使用以下代码行将视频帧的AVFrame-> data [0]分配给uint8_t * buffer:
size_t sizeOfFrameData = mpAVFrameInput->linesize[0] * mpAVFrameInput->height;
memcpy(mFrameData, mpAVFrameInput->data[0], sizeOfFrameData);
我想知道这是否是在FFMPEG中将帧数据复制到uint8_t *变量的正确方法?
由于
答案 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);