AVPacket 相关API

本文详细介绍了FFmpeg中AVPacket的相关API,包括如何分配、初始化、复制、调整大小等操作,并解释了AVPacket的数据管理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AVPacket 相关API 定义是在avcodec.h  中, 但是函数实体在avpacket.c 中。需要注意的是av_packet_alloc() 申请的是AVPacket 本身struct 的空间,data buff 需要单独申请,比如av_new_packet()。data buff 通过av_packet_unref() 释放,当refcount 为1 时,buff 才真正释放,av_packet_ref() refcountf 加1, av_packet_unref() refcount 减1。packet_side_data 是packet 一些附加信息,例如在编码结束时,更新一些流的参数。

函数原型

作用

AVPacket *av_packet_alloc(void);

alloc avpacket struct,但是没有给data 开辟空间,可通过av_new_packet() 去为data 开辟空间

AVPacket *av_packet_clone(const AVPacket *src)

根据src clone 一个avpacket,等于av_packet_alloc() + av_packet_ref()

void av_packet_free(AVPacket **pkt);

free avpacket, 如果ref 被计数,将先unref

void av_init_packet(AVPacket *pkt)

初始化avpacket 成默认值

int av_new_packet(AVPacket *pkt,int size)

为avpacket date 开辟空间

void av_shrink_packet(AVPacket *pkt,int size);

将AVPacket 的size减小到设置的size

int avgrow_packet(AVPacket *pkt,int grow_by);

通过realloc 增加grow_by 的空间

int  av_packet_from_data(*pkt,data,size)

将malloc 过的data 传递给avpacket

av_packet_new_side_data(pkt,sideDateType,size)

alloc side data

av_packet_add_side_data(pkt,sideDateTyoe,*data,size)

添加side_data 信息

u8 *av_packet_pack_dictionary(dict,size)

pack a dictionary for use in side_date

int av_packet_unpack_dictionary(data,size,dict)

unpack adictionary from side_data

av_packet_free_side_data(avpacket *data)

free all the side data

int av_packet_ref(AVPacket *dst,const AVPacket *src)

相当于将AVPacket软链接

void av_packet_unref(AVPakct* pkt)

当unref count 到1 时,data将被清空

void av_packet_move_ref(AVPackt *dst,AVPackt*src)

将 src move 到dst , src 被清空,ref count 不变

int av_packet_copy_props(AVPackt *dst,AVPackt*src)

只仅仅将properties copy

int av_packet_make_refcounted(AVPacket *pkt)

确保data buf 存在

int av_packet_make_writeable(AVPacket *pkt)

与上差不多,都是确保data buf空间的存在

void av_packet_rescale_ts(pkt,RationaSrc.RationalDst)

将pts,dts,duration时间信息进行转换

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值