* Audio merging filter
*/
+#include "libavutil/audioconvert.h"
#include "libavutil/bprint.h"
#include "libavutil/opt.h"
#include "libswresample/swresample.h" // only for SWR_CH_MAX
{0}
};
-static const AVClass amerge_class = {
- .class_name = "AMergeContext",
- .item_name = av_default_item_name,
- .option = amerge_options,
-};
+AVFILTER_DEFINE_CLASS(amerge);
static av_cold void uninit(AVFilterContext *ctx)
{
if ((inlayout[i] >> c) & 1)
*(route[i]++) = out_ch_number++;
}
- formats = avfilter_make_format_list(ff_packed_sample_fmts_array);
- avfilter_set_common_sample_formats(ctx, formats);
+ formats = ff_make_format_list(ff_packed_sample_fmts_array);
+ ff_set_common_formats(ctx, formats);
for (i = 0; i < am->nb_inputs; i++) {
layouts = NULL;
ff_add_channel_layout(&layouts, inlayout[i]);
if (ctx->inputs[i]->sample_rate != ctx->inputs[0]->sample_rate) {
av_log(ctx, AV_LOG_ERROR,
"Inputs must have the same sample rate "
- "(%"PRIi64" for in%d vs %"PRIi64")\n",
+ "%d for in%d vs %d\n",
ctx->inputs[i]->sample_rate, i, ctx->inputs[0]->sample_rate);
return AVERROR(EINVAL);
}
}
av_bprintf(&bp, " -> out:");
av_bprint_channel_layout(&bp, -1, ctx->outputs[0]->channel_layout);
- av_log(ctx, AV_LOG_INFO, "%s\n", bp.str);
+ av_log(ctx, AV_LOG_VERBOSE, "%s\n", bp.str);
return 0;
}
for (i = 0; i < am->nb_inputs; i++)
if (!am->in[i].nb_samples)
- if ((ret = avfilter_request_frame(ctx->inputs[i])) < 0)
+ if ((ret = ff_request_frame(ctx->inputs[i])) < 0)
return ret;
return 0;
}
}
}
-static void filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples)
+static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples)
{
AVFilterContext *ctx = inlink->dst;
AMergeContext *am = ctx->priv;
for (i = 1; i < am->nb_inputs; i++)
nb_samples = FFMIN(nb_samples, am->in[i].nb_samples);
if (!nb_samples)
- return;
+ return 0;
outbuf = ff_get_audio_buffer(ctx->outputs[0], AV_PERM_WRITE, nb_samples);
outs = outbuf->data[0];
}
}
}
- ff_filter_samples(ctx->outputs[0], outbuf);
+ return ff_filter_samples(ctx->outputs[0], outbuf);
}
-static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
+static av_cold int init(AVFilterContext *ctx, const char *args)
{
AMergeContext *am = ctx->priv;
int ret, i;
.min_perms = AV_PERM_READ | AV_PERM_PRESERVE,
};
snprintf(name, sizeof(name), "in%d", i);
- avfilter_insert_inpad(ctx, i, &pad);
+ ff_insert_inpad(ctx, i, &pad);
}
return 0;
}