summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2020-06-06 19:07:35 +0200
committerPaul B Mahol <onemda@gmail.com>2020-06-06 19:49:14 +0200
commit7826fbfeaacca0d7af1387bbfd367db3c6dfd5d5 (patch)
treeb5a922c731a9e661a99c2740c88733e8137344b9
parent1c32d7dfcf0394a332d5ddee2a210d4eb5bd540c (diff)
avfilter/avf_showspectrum: properly handle EOF case
-rw-r--r--libavfilter/avf_showspectrum.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/libavfilter/avf_showspectrum.c b/libavfilter/avf_showspectrum.c
index a4dd7b7879..e99f377fb0 100644
--- a/libavfilter/avf_showspectrum.c
+++ b/libavfilter/avf_showspectrum.c
@@ -1434,7 +1434,8 @@ static int activate(AVFilterContext *ctx)
}
}
- if (s->outpicref && av_audio_fifo_size(s->fifo) >= s->win_size) {
+ if (s->outpicref && (av_audio_fifo_size(s->fifo) >= s->win_size ||
+ ff_outlink_get_status(inlink))) {
AVFrame *fin = ff_get_audio_buffer(inlink, s->win_size);
if (!fin)
return AVERROR(ENOMEM);
@@ -1462,7 +1463,7 @@ static int activate(AVFilterContext *ctx)
av_frame_free(&fin);
av_audio_fifo_drain(s->fifo, s->hop_size);
- if (ret <= 0)
+ if (ret <= 0 && !ff_outlink_get_status(inlink))
return ret;
}
@@ -1493,15 +1494,18 @@ static int activate(AVFilterContext *ctx)
}
FF_FILTER_FORWARD_STATUS(inlink, outlink);
- if (ff_outlink_frame_wanted(outlink) && av_audio_fifo_size(s->fifo) < s->win_size) {
- ff_inlink_request_frame(inlink);
+ if (av_audio_fifo_size(s->fifo) >= s->win_size ||
+ ff_outlink_get_status(inlink) == AVERROR_EOF) {
+ ff_filter_set_ready(ctx, 10);
return 0;
}
- if (av_audio_fifo_size(s->fifo) >= s->win_size) {
- ff_filter_set_ready(ctx, 10);
+ if (ff_outlink_frame_wanted(outlink) && av_audio_fifo_size(s->fifo) < s->win_size &&
+ ff_outlink_get_status(inlink) != AVERROR_EOF) {
+ ff_inlink_request_frame(inlink);
return 0;
}
+
return FFERROR_NOT_READY;
}