avfilter/af_dynaudnorm: call uninit() from config_input()
authorPaul B Mahol <onemda@gmail.com>
Mon, 18 Jan 2016 18:55:40 +0000 (19:55 +0100)
committerPaul B Mahol <onemda@gmail.com>
Tue, 19 Jan 2016 19:14:14 +0000 (20:14 +0100)
Should help dynamic filtergraph reconfiguration.

Signed-off-by: Paul B Mahol <onemda@gmail.com>
libavfilter/af_dynaudnorm.c

index d0bb51d..1dd221c 100644 (file)
@@ -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;
 
 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 =
     s->frame_len =
     inlink->min_samples =
     inlink->max_samples =
@@ -673,35 +704,6 @@ static int request_frame(AVFilterLink *outlink)
     return ret;
 }
 
     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",
 static const AVFilterPad avfilter_af_dynaudnorm_inputs[] = {
     {
         .name           = "default",