ffmpeg中重要的数据结构记录,
AVFrame结构体:
AVFrame *av_frame_alloc(void) |
分配AVFrame并设置默认值,必须调av_frame_free释放 |
void av_frame_free(AVFrame **frame) |
释放AVFrame,如果该AVFrame有引用的AVBuffer,则先释放引用 |
int av_frame_ref(AVFrame *dst, const AVFrame *src) |
增加引用计数 |
void av_frame_unref(AVFrame *frame) |
减少引用计数 |
void av_frame_move_ref(AVFrame *dst, AVFrame *src) |
将src中的每个字段移动到dst,并重置src |
int av_frame_get_buffer(AVFrame *frame, int align) |
为音频或视频分配新缓冲区,调用前必须先设置格式信息 |
AVPacket结构体:
AVPacket *av_packet_alloc(void) |
分配一个AVPacket,并将其字段设置为默认值,必须调用av_packet_free来释放 |
void av_packet_free(AVPacket **pkt) |
释放掉Packet,如果这个Packet有引用的AVBuffer,将会先释放引用。 |
void av_init_packet(AVPacket *pkt) |
初始化Packet,注意,这并不涉及data和size成员,它们必须分别初始化。 |
int av_new_packet(AVPacket *pkt, int size) |
给AVPacket分配内存,这里引用计数会+1 |
int av_packet_ref(AVPacket *dst, const AVPacket *src) |
增加引用计数 |
void av_packet_unref(AVPacket *pkt) |
减少引用计数 |
void av_packet_move_ref(AVPacket *dst, AVPacket *src) |
将src中的每个字段移动到dst,并重置src |
AVPacket *av_packet_clone(const AVPacket *src) |
克隆一个与src相同数据的Packet,等于av_packet_alloc()+av_packet_ref() |
AVFormatContext:统领全局的基本结构体。主要用于处理封装格式(FLV/MKV/RMVB等)。
AVIOContext:输入输出对应的结构体,用于输入输出(读写文件,RTMP协议等)。
AVStream,AVCodecContext:视音频流对应的结构体,用于视音频编解码。
AVFrame:存储非压缩的数据(视频对应RGB/YUV像素数据,音频对应PCM采样数据)
AVPacket:存储压缩数据(视频对应H.264等码流数据,音频对应AAC/MP3等码流数据)