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