ffmpeg 添加一个新的filter

使用 ffmpeg 4.4.2 添加一个新的 filter , 实现将多声道 (10声道)音频用算法方式转换为具备多声道效果的2声道音频。

  1. libavfilter/allfilters.c 里添加 新的 AVFilter

这里示例:

  • extern AVFilter ff_af_av3a;

libavfilter/Makefile 里 添加 新的 编译.o

OBJS-$(CONFIG_AV3A_FILTER) += af_av3a.o

2) 编写 相关的 实现文件, 这里是: libavfilter/af_av3a.c

主要是 实现一个 AVFilter, 这个 AVFilter 实现了过滤器的 input 和 output
AVFilter ff_af_av3a = {
.name = "av3a",
.description = NULL_IF_CONFIG_SMALL("the audio filter"),
.priv_size = sizeof(AV3AContext),
.priv_class = &av3a_class,
.init = av3a_init,
.uninit = av3a_uninit,
.inputs = avfilter_af_av3a_inputs,
.outputs = avfilter_af_av3a_outputs,
};

其中:
static const AVFilterPad avfilter_af_av3a_inputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.filter_frame = filter_frame, // 实现 过滤的方法
},
{ NULL }
};

static const AVFilterPad avfilter_af_av3a_outputs[] = {
{
.name = "default",
.type = AVMEDIA_TYPE_AUDIO,
.config_props = config_output, // 配置输出的参数
},
{ NULL }
};

3) 如果需要查看filter 中的的具体数据流程
libavfilter/buffersink.c 文件中
asink_query_formats (音频设置的 formats 参数) // 视频是 vsink_query_formats

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容