首页 > 学院 > 开发设计 > 正文

AVFilter

2019-11-06 08:31:38
字体:
来源:转载
供稿:网友
下面看一下AVFilter是如何被使用的,我们以ffplay.c为例吧,分析一下其中AVFilter相关的代码.1 产生graph:AVFilterGraph *graph = avfilter_graph_alloc();2 创建sourceAVFilterContext *filt_src;avfilter_graph_create_filter(&filt_src, &input_filter, "src",NULL, is, graph);第一个参数是生成的filter(是一个source),第二个参数是一个AVFilter结构的实例,第三个参数是要创建的fitler的名字,第四个参数是不知道什么用,第五个参数是user data(调用者的私有数据),第六个参数是graph的指针.其中第二个参数的实例必须由调用者自己实现,才能将帧送到graph中.3 创建sinkAVFilterContext *filt_out;ret = avfilter_graph_create_filter(&filt_out, avfilter_get_by_name("buffersink"), "out", NULL, pix_fmts, graph);参数同上,不解释.所创建的这个sink是一个buffersink,可参考libavfitler的源码文件sink_buffer.c看看它是个什么玩意.sink_buffer其实是一个能通过buffer输出帧的sink,当然它的输出不是通过pad,因为它后面没有fitler了.用它做sink,可以让使用这个graph的代码轻松取得graph处理后的帧.4 连接source和sinkavfilter_link(filt_src, 0, filt_out, 0);第一个参数是接在前面的filter,第二个参数是前fitler的要连接的pad的序号,第三个参数是后面的filter,第四个参数是后filter的要连接的pad.5 对graph做最后的检查avfilter_graph_config(graph, NULL);我们是从sink中取出处理完成的帧,所以最好把sink的引用保存下来,比如:AVFilterContext *out_video_filter=filt_out;6实现input_filter
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表