]> git.sesse.net Git - ffmpeg/blobdiff - libavfilter/af_afftdn.c
avfilter/vf_mix: always output frame if array is filled
[ffmpeg] / libavfilter / af_afftdn.c
index 77e5406d1d9912df72eef3e230446ae2c13cafbe..9619aadbee0c8219352f2fc9b8c6794bcbbcf858 100644 (file)
@@ -564,7 +564,7 @@ static void read_custom_noise(AudioFFTDeNoiseContext *s, int ch)
 
         p = NULL;
 
-        ret = sscanf(arg, "%d", &band_noise[i]);
+        ret = av_sscanf(arg, "%d", &band_noise[i]);
         if (ret != 1) {
             av_log(s, AV_LOG_ERROR, "Custom band noise must be integer.\n");
             break;
@@ -1163,15 +1163,13 @@ static int output_frame(AVFilterLink *inlink)
     ThreadData td;
     int ret = 0;
 
-    if (!in) {
-        in = ff_get_audio_buffer(outlink, s->window_length);
-        if (!in)
-            return AVERROR(ENOMEM);
-    }
+    in = ff_get_audio_buffer(outlink, s->window_length);
+    if (!in)
+        return AVERROR(ENOMEM);
 
     ret = av_audio_fifo_peek(s->fifo, (void **)in->extended_data, s->window_length);
     if (ret < 0)
-        return ret;
+        goto end;
 
     if (s->track_noise) {
         for (int ch = 0; ch < inlink->channels; ch++) {
@@ -1248,7 +1246,9 @@ static int output_frame(AVFilterLink *inlink)
                 dst[m] = orig[m] - src[m];
             break;
         default:
-            return AVERROR_BUG;
+            av_frame_free(&out);
+            ret = AVERROR_BUG;
+            goto end;
         }
         memmove(src, src + s->sample_advance, (s->window_length - s->sample_advance) * sizeof(*src));
         memset(src + (s->window_length - s->sample_advance), 0, s->sample_advance * sizeof(*src));
@@ -1381,7 +1381,8 @@ static int process_command(AVFilterContext *ctx, const char *cmd, const char *ar
         if (!strcmp(args, "start")) {
             s->sample_noise_start = 1;
             s->sample_noise_end = 0;
-        } else if (!strcmp(args, "end")) {
+        } else if (!strcmp(args, "end") ||
+                   !strcmp(args, "stop")) {
             s->sample_noise_start = 0;
             s->sample_noise_end = 1;
         }
@@ -1389,7 +1390,7 @@ static int process_command(AVFilterContext *ctx, const char *cmd, const char *ar
                !strcmp(cmd, "noise_reduction")) {
         float nr;
 
-        if (sscanf(args, "%f", &nr) == 1) {
+        if (av_sscanf(args, "%f", &nr) == 1) {
             s->noise_reduction = av_clipf(nr, 0.01, 97);
             need_reset = 1;
         }
@@ -1397,7 +1398,7 @@ static int process_command(AVFilterContext *ctx, const char *cmd, const char *ar
                !strcmp(cmd, "noise_floor")) {
         float nf;
 
-        if (sscanf(args, "%f", &nf) == 1) {
+        if (av_sscanf(args, "%f", &nf) == 1) {
             s->noise_floor = av_clipf(nf, -80, -20);
             need_reset = 1;
         }