[FFmpeg-cvslog] lavfi/atempo: raise filter_frame() error.

Clément Bœsch git at videolan.org
Wed Mar 13 19:11:09 CET 2013


ffmpeg | branch: master | Clément Bœsch <ubitux at gmail.com> | Wed Mar 13 09:55:43 2013 +0100| [1b0d0e6b7274c1d0c1ca9f7081d437f31c1a00f3] | committer: Clément Bœsch

lavfi/atempo: raise filter_frame() error.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=1b0d0e6b7274c1d0c1ca9f7081d437f31c1a00f3
---

 libavfilter/af_atempo.c |   23 ++++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)

diff --git a/libavfilter/af_atempo.c b/libavfilter/af_atempo.c
index 53bf9e2..9547969 100644
--- a/libavfilter/af_atempo.c
+++ b/libavfilter/af_atempo.c
@@ -1020,10 +1020,12 @@ static int config_props(AVFilterLink *inlink)
     return yae_reset(atempo, format, sample_rate, channels);
 }
 
-static void push_samples(ATempoContext *atempo,
-                         AVFilterLink *outlink,
-                         int n_out)
+static int push_samples(ATempoContext *atempo,
+                        AVFilterLink *outlink,
+                        int n_out)
 {
+    int ret;
+
     atempo->dst_buffer->sample_rate = outlink->sample_rate;
     atempo->dst_buffer->nb_samples  = n_out;
 
@@ -1033,12 +1035,15 @@ static void push_samples(ATempoContext *atempo,
                      (AVRational){ 1, outlink->sample_rate },
                      outlink->time_base);
 
-    ff_filter_frame(outlink, atempo->dst_buffer);
+    ret = ff_filter_frame(outlink, atempo->dst_buffer);
+    if (ret < 0)
+        return ret;
     atempo->dst_buffer = NULL;
     atempo->dst        = NULL;
     atempo->dst_end    = NULL;
 
     atempo->nsamples_out += n_out;
+    return 0;
 }
 
 static int filter_frame(AVFilterLink *inlink, AVFrame *src_buffer)
@@ -1047,6 +1052,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *src_buffer)
     ATempoContext *atempo = ctx->priv;
     AVFilterLink *outlink = ctx->outputs[0];
 
+    int ret = 0;
     int n_in = src_buffer->nb_samples;
     int n_out = (int)(0.5 + ((double)n_in) / atempo->tempo);
 
@@ -1065,14 +1071,17 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *src_buffer)
         yae_apply(atempo, &src, src_end, &atempo->dst, atempo->dst_end);
 
         if (atempo->dst == atempo->dst_end) {
-            push_samples(atempo, outlink, n_out);
+            ret = push_samples(atempo, outlink, n_out);
+            if (ret < 0)
+                goto end;
             atempo->request_fulfilled = 1;
         }
     }
 
     atempo->nsamples_in += n_in;
+end:
     av_frame_free(&src_buffer);
-    return 0;
+    return ret;
 }
 
 static int request_frame(AVFilterLink *outlink)
@@ -1107,7 +1116,7 @@ static int request_frame(AVFilterLink *outlink)
                      atempo->stride);
 
             if (n_out) {
-                push_samples(atempo, outlink, n_out);
+                ret = push_samples(atempo, outlink, n_out);
             }
         }
 



More information about the ffmpeg-cvslog mailing list