1.AVPacket相關函數介紹
操作AVPacket的函數大約有30個,主要分為:AVPacket的創建初始化,AVPacket中的data數據管理(clone,free,copy),AVPacket中的side_data數據管理。
void av_init_packet(AVPacket *pkt);
初始化packet的值為默認值,該函數不會影響data引用的數據緩存空間和size,需要單獨處理。
int av_new_packet(AVPacket *pkt, int size);
av_init_packet的增強版,不但會初始化字段,還為data分配了存儲空間
AVPacket *av_packet_alloc(void);
創建一個AVPacket,將其字段設為默認值(data為空,沒有數據緩存空間)。
void av_packet_free(AVPacket **pkt);
釋放使用av_packet_alloc創建的AVPacket,如果該Packet有引用計數(packet->buf不為空),則先調用av_packet_unref。
AVPacket *av_packet_clone(const AVPacket *src);
其功能是av_packet_alloc和av_packet_ref
int av_copy_packet(AVPacket *dst, const AVPacket *src);
復制一個新的packet,包括數據緩存
int av_copy_packet_side_data(AVPacket *dst, const AVPacket *src);
初始化一個引用計數的packet,並指定了其數據緩存
int av_grow_packet(AVPacket *pkt, int grow_by);
增大Packet->data指向的數據緩存
void av_shrink_packet(AVPacket *pkt, int size);
減小Packet->data指向的數據緩存