[FFmpeg-devel] [PATCH] lavfi/showwaves: fail in case of push_frame() error

Stefano Sabatini stefasab at gmail.com
Thu Jan 24 01:54:30 CET 2013


---
 libavfilter/avf_showwaves.c |   15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/libavfilter/avf_showwaves.c b/libavfilter/avf_showwaves.c
index 998b4cb..1b9d28d 100644
--- a/libavfilter/avf_showwaves.c
+++ b/libavfilter/avf_showwaves.c
@@ -160,14 +160,16 @@ static int config_output(AVFilterLink *outlink)
     return 0;
 }
 
-inline static void push_frame(AVFilterLink *outlink)
+inline static int push_frame(AVFilterLink *outlink)
 {
     ShowWavesContext *showwaves = outlink->src->priv;
+    int ret;
 
-    ff_filter_frame(outlink, showwaves->outpicref);
-    showwaves->req_fullfilled = 1;
+    if ((ret = ff_filter_frame(outlink, showwaves->outpicref)) >= 0)
+        showwaves->req_fullfilled = 1;
     showwaves->outpicref = NULL;
     showwaves->buf_idx = 0;
+    return ret;
 }
 
 static int request_frame(AVFilterLink *outlink)
@@ -198,7 +200,7 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples)
     int linesize = outpicref ? outpicref->linesize[0] : 0;
     int16_t *p = (int16_t *)insamples->data[0];
     int nb_channels = av_get_channel_layout_nb_channels(insamples->audio->channel_layout);
-    int i, j, k, h;
+    int i, j, k, h, ret = 0;
     const int n = showwaves->n;
     const int x = 255 / (nb_channels * n); /* multiplication factor, pre-computed to avoid in-loop divisions */
 
@@ -244,12 +246,13 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples)
             showwaves->buf_idx++;
         }
         if (showwaves->buf_idx == showwaves->w)
-            push_frame(outlink);
+            if ((ret = push_frame(outlink)) < 0)
+                break;
         outpicref = showwaves->outpicref;
     }
 
     avfilter_unref_buffer(insamples);
-    return 0;
+    return ret;
 }
 
 static const AVFilterPad showwaves_inputs[] = {
-- 
1.7.9.5



More information about the ffmpeg-devel mailing list