diff --git a/libavfilter/af_dynaudnorm.c b/libavfilter/af_dynaudnorm.c index d0bb51d789..1dd221ce57 100644 --- a/libavfilter/af_dynaudnorm.c +++ b/libavfilter/af_dynaudnorm.c @@ -255,12 +255,43 @@ static void init_gaussian_filter(DynamicAudioNormalizerContext *s) } } +static av_cold void uninit(AVFilterContext *ctx) +{ + DynamicAudioNormalizerContext *s = ctx->priv; + int c; + + av_freep(&s->prev_amplification_factor); + av_freep(&s->dc_correction_value); + av_freep(&s->compress_threshold); + av_freep(&s->fade_factors[0]); + av_freep(&s->fade_factors[1]); + + for (c = 0; c < s->channels; c++) { + if (s->gain_history_original) + cqueue_free(s->gain_history_original[c]); + if (s->gain_history_minimum) + cqueue_free(s->gain_history_minimum[c]); + if (s->gain_history_smoothed) + cqueue_free(s->gain_history_smoothed[c]); + } + + av_freep(&s->gain_history_original); + av_freep(&s->gain_history_minimum); + av_freep(&s->gain_history_smoothed); + + av_freep(&s->weights); + + ff_bufqueue_discard_all(&s->queue); +} + static int config_input(AVFilterLink *inlink) { AVFilterContext *ctx = inlink->dst; DynamicAudioNormalizerContext *s = ctx->priv; int c; + uninit(ctx); + s->frame_len = inlink->min_samples = inlink->max_samples = @@ -673,35 +704,6 @@ static int request_frame(AVFilterLink *outlink) return ret; } -static av_cold void uninit(AVFilterContext *ctx) -{ - DynamicAudioNormalizerContext *s = ctx->priv; - int c; - - av_freep(&s->prev_amplification_factor); - av_freep(&s->dc_correction_value); - av_freep(&s->compress_threshold); - av_freep(&s->fade_factors[0]); - av_freep(&s->fade_factors[1]); - - for (c = 0; c < s->channels; c++) { - if (s->gain_history_original) - cqueue_free(s->gain_history_original[c]); - if (s->gain_history_minimum) - cqueue_free(s->gain_history_minimum[c]); - if (s->gain_history_smoothed) - cqueue_free(s->gain_history_smoothed[c]); - } - - av_freep(&s->gain_history_original); - av_freep(&s->gain_history_minimum); - av_freep(&s->gain_history_smoothed); - - av_freep(&s->weights); - - ff_bufqueue_discard_all(&s->queue); -} - static const AVFilterPad avfilter_af_dynaudnorm_inputs[] = { { .name = "default",