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

C++ 确定FFMPEG的AVFrame中数据[0]的大小,c++,ffmpeg,sizeof,memcpy,C++,Ffmpeg,Sizeof,Memcpy,我试图使用以下代码行将视频帧的AVFrame->data[0]分配到uint8_t*缓冲区: size_t sizeOfFrameData = mpAVFrameInput->linesize[0] * mpAVFrameInput->height; memcpy(mFrameData, mpAVFrameInput->data[0], sizeOfFrameData); 我想知道这是否是将帧数据复制到FFMPEG中的uint8_t*变量的正确方法?以获得缓

我试图使用以下代码行将视频帧的AVFrame->data[0]分配到uint8_t*缓冲区:

size_t sizeOfFrameData = mpAVFrameInput->linesize[0] * mpAVFrameInput->height;
        
memcpy(mFrameData, mpAVFrameInput->data[0], sizeOfFrameData);

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

以获得缓冲区大小:

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);

如果不推荐使用
avpicture\u get\u size()

int numBytes = av_image_get_buffer_size(
    enum AVPixelFormat
    int width,
    int height,
    int align
    );
请注意,对于通常使用的对齐值32,我看到使用1位的帖子可能会导致帧上的失真

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


您是否尝试过它是否有效(即编译并获得预期的输出)?虽然程序正在编译,但没有获得预期的输出。很可能这不是正确的方法(假设代码中没有其他错误)。这对于非平面格式是正确的。对于平面格式(如YUV),您需要对其他平面执行相同的操作。
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);