Nicolas George: > Andreas Rheinhardt (12020-09-08): >> Not providing any samples makes no sense at all. And if no samples >> were provided for one of the HRIR streams, one would either run into >> an av_assert1 in ff_inlink_consume_samples() or into a segfault in >> take_samples() in avfilter.c. >> >> Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@gmail.com> >> --- >> libavfilter/af_headphone.c | 8 +++++++- >> 1 file changed, 7 insertions(+), 1 deletion(-) >> >> diff --git a/libavfilter/af_headphone.c b/libavfilter/af_headphone.c >> index 1024ff57b1..f488e0e28d 100644 >> --- a/libavfilter/af_headphone.c >> +++ b/libavfilter/af_headphone.c >> @@ -631,8 +631,14 @@ static int activate(AVFilterContext *ctx) >> if ((ret = check_ir(ctx->inputs[i], i)) < 0) >> return ret; >> >> - if (ff_outlink_get_status(ctx->inputs[i]) == AVERROR_EOF) >> + if (ff_outlink_get_status(ctx->inputs[i]) == AVERROR_EOF) { >> + if (!ff_inlink_queued_samples(ctx->inputs[i])) { >> + av_log(ctx, AV_LOG_ERROR, "No samples provided for " >> + "HRIR stream %d.\n", i - 1); >> + return AVERROR_INVALIDDATA; >> + } >> s->in[i].eof = 1; >> + } > > No, this is bogus. A filter should not call ff_outlink_get_status() on > its input, that is breaking the abstraction provided by the API. In > fact, everything in `git grep 'ff_outlink_get_status.*input'` is a bug. >
How should one then check whether an input is finished? Check for ff_inlink_check_available_samples(ctx->inputs[i], ff_inlink_queued_samples(ctx->inputs[i]) + 1) being 1? - Andreas _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".