diff options
author | Paul B Mahol <onemda@gmail.com> | 2023-05-29 23:30:56 +0200 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2023-05-30 02:16:42 +0200 |
commit | 51a1124a684ae8b9c9f56a2b958ae09847964525 (patch) | |
tree | 608e01357f00f0fb4554d1e05c89efb9c4da61d6 /libavfilter/avf_showspectrum.c | |
parent | 9f9534f5b643f7349396eb33599c4895d1faefa8 (diff) |
avfilter/avf_showspectrum: do not use ff_outlink_get_status() on inlink
Diffstat (limited to 'libavfilter/avf_showspectrum.c')
-rw-r--r-- | libavfilter/avf_showspectrum.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/libavfilter/avf_showspectrum.c b/libavfilter/avf_showspectrum.c index 6c3d0e8c2b..23269dbb4c 100644 --- a/libavfilter/avf_showspectrum.c +++ b/libavfilter/avf_showspectrum.c @@ -109,6 +109,7 @@ typedef struct ShowSpectrumContext { float dmin, dmax; uint64_t samples; int (*plot_channel)(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs); + int eof; float opacity_factor; @@ -1543,8 +1544,7 @@ static int plot_spectrum_column(AVFilterLink *inlink, AVFrame *insamples) if (!s->single_pic && (s->sliding != FULLFRAME || s->xpos == 0)) { if (s->old_pts < outpicref->pts || s->sliding == FULLFRAME || - (ff_outlink_get_status(inlink) == AVERROR_EOF && - ff_inlink_queued_samples(inlink) <= s->hop_size)) { + (s->eof && ff_inlink_queued_samples(inlink) <= s->hop_size)) { AVFrame *clone; if (s->legend) { @@ -1600,7 +1600,7 @@ static int activate(AVFilterContext *ctx) FF_FILTER_FORWARD_STATUS_BACK(outlink, inlink); - if (s->outpicref) { + if (s->outpicref && ff_inlink_queued_samples(inlink) > 0) { AVFrame *fin; ret = ff_inlink_consume_samples(inlink, s->hop_size, s->hop_size, &fin); @@ -1627,8 +1627,7 @@ static int activate(AVFilterContext *ctx) } } - if (ff_outlink_get_status(inlink) == AVERROR_EOF && - s->sliding == FULLFRAME && + if (s->eof && s->sliding == FULLFRAME && s->xpos > 0 && s->outpicref) { if (s->orientation == VERTICAL) { @@ -1656,11 +1655,15 @@ static int activate(AVFilterContext *ctx) return 0; } - if (ff_inlink_acknowledge_status(inlink, &status, &pts)) { - if (status == AVERROR_EOF) { - ff_outlink_set_status(outlink, status, s->pts); - return 0; - } + if (!s->eof && ff_inlink_acknowledge_status(inlink, &status, &pts)) { + s->eof = status == AVERROR_EOF; + ff_filter_set_ready(ctx, 100); + return 0; + } + + if (s->eof) { + ff_outlink_set_status(outlink, AVERROR_EOF, s->pts); + return 0; } if (ff_inlink_queued_samples(inlink) >= s->hop_size) { |