diff options
author | Stefano Sabatini <stefasab@gmail.com> | 2013-01-22 21:11:23 +0100 |
---|---|---|
committer | Stefano Sabatini <stefasab@gmail.com> | 2013-01-25 19:35:21 +0100 |
commit | e80be5a0aa9f9b0d66c2d620f40578ac8ae8de11 (patch) | |
tree | e818be926d29d41813a0c75afd422acee3bda6b5 /libavfilter | |
parent | e4e36a4dd290a88c4957400672f9e0c4d092bc86 (diff) | |
download | ffmpeg-streaming-e80be5a0aa9f9b0d66c2d620f40578ac8ae8de11.zip ffmpeg-streaming-e80be5a0aa9f9b0d66c2d620f40578ac8ae8de11.tar.gz |
lavfi/showwaves: fail in case of push_frame() error
Diffstat (limited to 'libavfilter')
-rw-r--r-- | libavfilter/avf_showwaves.c | 15 |
1 files 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[] = { |