AVFrame结构体保存的是解码后和原始的音视频信息。AVFrame通过函数av_frame_alloc()初始化,该函数仅仅分配AVFrame实例本身,而没有分配其内部的缓存。AVFrame实例由av_frame_free()释放;AVFrame实例通常分配一次,重复使用,如分配一个AVFrame实例来保留解码器中输出的视频帧(此时应在恰当的时候使用av_frame_unref()清理参考帧并将AVFrame归零)。该类所描述的数据通常由AVBuffer的API来保存一个引用计数,并保存于AVFrame.buf
/AVFrame.extended_buf,在至少存在一个参考的时候(如AVFrame.buf[0] != NULL),则该对象被标记为“被引用”。在此情况下,AVFrame所包含的每一组数据必须包含于AVFrame的缓存中。
AVFrame的定义如下:
通过对其内部的成员变量的研究可以看出,除了基本的储存像素的缓存之外,其成员大多还是与编解码相关的一些参数,如分辨率、帧类型、量化参数表、参考帧列表等。所以从大体上看,AVFrame就是一个容器类,同AVPacket不同的是所容纳的是原始的像素数据,相同点是都有很多编解码相关的参数作为补充数据。