FFmpeg库常用函数介绍(二)

1 av_bsf_receive_packet

作用:获取过滤后的数据。

函数原型:

int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt);

ctx:初始化后的AVBSFContext;

pkt:用于填充过滤后数据的AVPacket,AVPacket必须是新分配的;

返回值:0表示成功;AVERROR(EAGAIN)表示需要多次调用,因为一个输入packet可能获得多个输出packet,多个输入packet也可能导致一个输出packet;AVERROR_EOF表示到达了数据流的末尾或者文件的末尾,不再有来自过滤器的输出;其他负值表示失败。

2 av_interleaved_write_frame

作用:交错的将音视频帧写入文件。

函数原型:

int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt);

s:输出AVFormatContext;

pkt:输出AVPacket;

返回值:负值表示失败。

注意:和av_write_frame的区别是是否需要交错写入,av_write_frame不会交错写入。

3 av_packet_free

作用:引用计数减1,释放AVPacket的内存。

函数原型:

void av_packet_free(AVPacket **pkt);

pkt:待释放的AVPacket;

注意:和av_free_packet功能类似,但av_free_packet在较新版本中已经被弃用。

4 av_packet_unref

作用:取消对缓冲区的引用,AVPacket其余字段置为默认值。

函数原型:

void av_packet_unref(AVPacket *pkt);

pkt:待取消引用的AVPacket;

注意:即使是局部的AVPacket对象也需要调用该函数。

5 av_write_trailer

作用:将数据流文件尾写入到文件中,并释放文件私有数据,在avformat_write_header调用成功后才可以调用。

函数原型:

int av_write_trailer(AVFormatContext *s);

s:输出AVFormatContext;

返回值:0表示成功。

6 avformat_close_input

作用:释放AVFormatContext。

函数原型:

void avformat_close_input(AVFormatContext **s);

s:要关闭的AVFormatContext;

注意:和avformat_open_input配对使用。

7 avio_close

作用:关闭AVIOContext。

函数原型:

int avio_close(AVIOContext *s);

s:要关闭的AVIOContext;

返回值:负值表示失败。

注意:和avio_open或者avio_open2配对使用。需要注意的是,调用前需要判断该上下文是否依赖文件的输入或输出。ofmt_ctx->oformat->flags & AVFMT_NOFILE为0表示依赖,即需要调用此函数。

//ofmt_ctx: AVFormatContext, oformat是AVOutputFormat

ofmt_ctx->oformat->flags & AVFMT_NOFILE;

8 avio_closep

作用:关闭AVIOContext。

函数原型:

int avio_closep(AVIOContext **s);

s:要关闭的AVIOContext;

返回值:负值表示失败。

注意:与avio_close的区别是会将指向AVIOContext的指针置为NULL。

9 avformat_free_context

作用:释放AVFormatContext以及所有的流。

函数原型:

void avformat_free_context(AVFormatContext *s);

s:要释放的AVFormatContext;

10 av_compare_ts

作用:比较两个以不同时间基表示的时间戳,一般用于将音视频封装于封装格式中进行时间戳比较,以决定先写入哪个帧。

函数原型:

int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b);

ts_a:以时间基tb_a表示的时间戳;

tb_a:时间基;

ts_b:以时间基tb_b表示的时间戳;

tb_b:时间戳;

返回值:-1表示时间戳ts_a早于ts_b,0表示两个时间戳相等,1表示时间戳ts_a滞后于ts_b。

11 av_q2d

作用:将AVRational类型的分数转换为double类型,转换前后仍然基于同一时间基。

函数原型:

static inline double av_q2d(AVRational a);

a:AVRational类型的分数;

返回值:转换后的double类型数值。

12 avcodec_find_decoder

作用:根据解码器ID查找解码器。

函数原型:

const AVCodec *avcodec_find_decoder(AVCodecID id);                        

id:解码器ID;

返回值:找到的解码器,没找到返回NULL。

13 avcodec_find_encoder

作用:根据编码器ID查找编码器。

函数原型:

const AVCodec *avcodec_find_encoder(AVCodecID id);                        

id:编码器ID;

返回值:找到的编码器,没找到返回NULL。

14 av_get_channel_layout_nb_channels

作用:根据声道布局获取声道数目。

函数原型:

int av_get_channel_layout_nb_channels(uint64_t channel_layout);          

channel_layout:声道布局;

返回值:声道数目。

注意:声道布局描述的是声道的分布和排列方式,它决定了声道数和声道之间的位置关系。例如:单声道、立体声道等等。

15 avfilter_inout_alloc

作用:分配AVFilterInOut。

函数原型:

AVFilterInOut *avfilter_inout_alloc();                                      

返回值:成功返回分配的AVFilterInOut,失败返回NULL。

注意:用完后必须使用avfilter_inout_free释放。

16 avfilter_inout_free

作用:释放分配的AVFilterInOut。

函数原型:

void avfilter_inout_free(AVFilterInOut **inout);

inout:待释放的AVFilterInOut;

17 avfilter_graph_alloc

作用:分配AVFilterGraph。

函数原型:

AVFilterGraph *avfilter_graph_alloc();                                     

返回值:成功返回分配的AVFilterGraph,失败返回NULL。

注意:用完后必须使用avfilter_graph_free释放。

18 avfilter_graph_free

作用:释放分配的AVFilterGraph。

函数原型:

void avfilter_graph_free(AVFilterGraph **graph);

graph:待释放的AVFilterGraph;

19 avfilter_get_by_name

作用:根据名称获取滤镜。

函数原型:

const AVFilter *avfilter_get_by_name(const char *name);                  

name:滤镜名称;

返回值:成功返回找到的滤镜,失败返回NULL。

20 avfilter_graph_create_filter

作用:创建一个滤镜实例AVFilterContext,并将其添加到现有的滤镜图中。

函数原型:

int avfilter_graph_create_filter(AVFilterContext **filt_ctx, const AVFilter *filt, const char *name, const char *args, void *opaque, AVFilterGraph *graph_ctx);

filt_ctx:带创建的滤镜实例;

filt:滤镜;

name:被创建的滤镜实例的名称;

args:用于初始化滤镜实例的参数;

opaque:忽略,为NULL;

graph_ctx:已有的滤镜图;

返回值:< 0表示失败。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值