X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavfilter%2Faf_amix.c;h=bfba1504ea66fc0b803c64bbd1d2b1a171eb71a6;hb=922b7e6d86e6197dfa5ebde602dd12cc66fb5f1f;hp=c2fb158031143fc471aa21791a7dfc310e570ae2;hpb=565e4993c63f797e2d50ad2f1e8f62fdbe299666;p=ffmpeg diff --git a/libavfilter/af_amix.c b/libavfilter/af_amix.c index c2fb1580311..bfba1504ea6 100644 --- a/libavfilter/af_amix.c +++ b/libavfilter/af_amix.c @@ -28,6 +28,7 @@ * output. */ +#include "libavutil/attributes.h" #include "libavutil/audio_fifo.h" #include "libavutil/avassert.h" #include "libavutil/avstring.h" @@ -275,18 +276,18 @@ static int output_frame(AVFilterLink *outlink, int nb_samples) { AVFilterContext *ctx = outlink->src; MixContext *s = ctx->priv; - AVFilterBufferRef *out_buf, *in_buf; + AVFrame *out_buf, *in_buf; int i; calculate_scales(s, nb_samples); - out_buf = ff_get_audio_buffer(outlink, AV_PERM_WRITE, nb_samples); + out_buf = ff_get_audio_buffer(outlink, nb_samples); if (!out_buf) return AVERROR(ENOMEM); - in_buf = ff_get_audio_buffer(outlink, AV_PERM_WRITE, nb_samples); + in_buf = ff_get_audio_buffer(outlink, nb_samples); if (!in_buf) { - avfilter_unref_buffer(out_buf); + av_frame_free(&out_buf); return AVERROR(ENOMEM); } @@ -308,7 +309,7 @@ static int output_frame(AVFilterLink *outlink, int nb_samples) } } } - avfilter_unref_buffer(in_buf); + av_frame_free(&in_buf); out_buf->pts = s->next_pts; if (s->next_pts != AV_NOPTS_VALUE) @@ -455,7 +456,7 @@ static int request_frame(AVFilterLink *outlink) return output_frame(outlink, available_samples); } -static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *buf) +static int filter_frame(AVFilterLink *inlink, AVFrame *buf) { AVFilterContext *ctx = inlink->dst; MixContext *s = ctx->priv; @@ -474,33 +475,24 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *buf) if (i == 0) { int64_t pts = av_rescale_q(buf->pts, inlink->time_base, outlink->time_base); - ret = frame_list_add_frame(s->frame_list, buf->audio->nb_samples, pts); + ret = frame_list_add_frame(s->frame_list, buf->nb_samples, pts); if (ret < 0) goto fail; } ret = av_audio_fifo_write(s->fifos[i], (void **)buf->extended_data, - buf->audio->nb_samples); + buf->nb_samples); fail: - avfilter_unref_buffer(buf); + av_frame_free(&buf); return ret; } -static int init(AVFilterContext *ctx, const char *args) +static av_cold int init(AVFilterContext *ctx) { MixContext *s = ctx->priv; - int i, ret; - - s->class = &amix_class; - av_opt_set_defaults(s); - - if ((ret = av_set_options_string(s, args, "=", ":")) < 0) { - av_log(ctx, AV_LOG_ERROR, "Error parsing options string '%s'.\n", args); - return ret; - } - av_opt_free(s); + int i; for (i = 0; i < s->nb_inputs; i++) { char name[32]; @@ -519,7 +511,7 @@ static int init(AVFilterContext *ctx, const char *args) return 0; } -static void uninit(AVFilterContext *ctx) +static av_cold void uninit(AVFilterContext *ctx) { int i; MixContext *s = ctx->priv; @@ -559,10 +551,11 @@ static const AVFilterPad avfilter_af_amix_outputs[] = { { NULL } }; -AVFilter avfilter_af_amix = { +AVFilter ff_af_amix = { .name = "amix", .description = NULL_IF_CONFIG_SMALL("Audio mixing."), .priv_size = sizeof(MixContext), + .priv_class = &amix_class, .init = init, .uninit = uninit, @@ -570,4 +563,6 @@ AVFilter avfilter_af_amix = { .inputs = NULL, .outputs = avfilter_af_amix_outputs, + + .flags = AVFILTER_FLAG_DYNAMIC_INPUTS, };