Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefano Sabatini <stefasab@gmail.com>2013-01-23 00:11:23 +0400
committerStefano Sabatini <stefasab@gmail.com>2013-01-25 22:35:21 +0400
commite80be5a0aa9f9b0d66c2d620f40578ac8ae8de11 (patch)
treee818be926d29d41813a0c75afd422acee3bda6b5 /libavfilter/avf_showwaves.c
parente4e36a4dd290a88c4957400672f9e0c4d092bc86 (diff)
lavfi/showwaves: fail in case of push_frame() error
Diffstat (limited to 'libavfilter/avf_showwaves.c')
-rw-r--r--libavfilter/avf_showwaves.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/libavfilter/avf_showwaves.c b/libavfilter/avf_showwaves.c
index 998b4cbbd4..1b9d28d487 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[] = {