summaryrefslogtreecommitdiff
path: root/libavfilter/avf_showspectrum.c
diff options
context:
space:
mode:
authorClément Bœsch <ubitux@gmail.com>2013-03-13 09:56:35 +0100
committerClément Bœsch <ubitux@gmail.com>2013-03-13 19:00:09 +0100
commit27ce858c9861313e5d81ef331bc9ad108f2ef3af (patch)
tree5fd64885f2b50810a3e2c1efca75c24ea80e630e /libavfilter/avf_showspectrum.c
parentdf5be5e27575827d8da404fc066be0f9ff801d2e (diff)
lavfi/showspectrum: raise filter_frame() error.
Diffstat (limited to 'libavfilter/avf_showspectrum.c')
-rw-r--r--libavfilter/avf_showspectrum.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/libavfilter/avf_showspectrum.c b/libavfilter/avf_showspectrum.c
index b1d78608fc..364ee6c378 100644
--- a/libavfilter/avf_showspectrum.c
+++ b/libavfilter/avf_showspectrum.c
@@ -242,7 +242,7 @@ static int config_output(AVFilterLink *outlink)
return 0;
}
-inline static void push_frame(AVFilterLink *outlink)
+inline static int push_frame(AVFilterLink *outlink)
{
ShowSpectrumContext *showspectrum = outlink->src->priv;
@@ -252,7 +252,7 @@ inline static void push_frame(AVFilterLink *outlink)
showspectrum->filled = 0;
showspectrum->req_fullfilled = 1;
- ff_filter_frame(outlink, av_frame_clone(showspectrum->outpicref));
+ return ff_filter_frame(outlink, av_frame_clone(showspectrum->outpicref));
}
static int request_frame(AVFilterLink *outlink)
@@ -273,6 +273,7 @@ static int request_frame(AVFilterLink *outlink)
static int plot_spectrum_column(AVFilterLink *inlink, AVFrame *insamples, int nb_samples)
{
+ int ret;
AVFilterContext *ctx = inlink->dst;
AVFilterLink *outlink = ctx->outputs[0];
ShowSpectrumContext *showspectrum = ctx->priv;
@@ -455,7 +456,9 @@ static int plot_spectrum_column(AVFilterLink *inlink, AVFrame *insamples, int nb
av_rescale_q(showspectrum->consumed,
(AVRational){ 1, inlink->sample_rate },
outlink->time_base);
- push_frame(outlink);
+ ret = push_frame(outlink);
+ if (ret < 0)
+ return ret;
}
return add_samples;
@@ -465,17 +468,19 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *insamples)
{
AVFilterContext *ctx = inlink->dst;
ShowSpectrumContext *showspectrum = ctx->priv;
- int left_samples = insamples->nb_samples;
+ int ret = 0, left_samples = insamples->nb_samples;
showspectrum->consumed = 0;
while (left_samples) {
- const int added_samples = plot_spectrum_column(inlink, insamples, left_samples);
- showspectrum->consumed += added_samples;
- left_samples -= added_samples;
+ int ret = plot_spectrum_column(inlink, insamples, left_samples);
+ if (ret < 0)
+ break;
+ showspectrum->consumed += ret;
+ left_samples -= ret;
}
av_frame_free(&insamples);
- return 0;
+ return ret;
}
static const AVFilterPad showspectrum_inputs[] = {