You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-04 22:03:09 +02:00
avfilter/af_afade: fix check_input for empty streams
Use ff_outlink_get_status directly to get pending EOF state. Fixes assertion failure with: ffmpeg -lavfi "sine=f=1000:d=2[a];sine=f=440:d=2,atrim=end=0[b];[a][b]acrossfade=d=1" -f framecrc - ffmpeg -lavfi "sine=f=1000:d=2,atrim=end=0[a];sine=f=440:d=2[b];[a][b]acrossfade=d=1" -f framecrc - Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
@ -541,13 +541,6 @@ CROSSFADE(flt, float)
|
||||
CROSSFADE(s16, int16_t)
|
||||
CROSSFADE(s32, int32_t)
|
||||
|
||||
static int check_input(AVFilterLink *inlink)
|
||||
{
|
||||
const int queued_samples = ff_inlink_queued_samples(inlink);
|
||||
|
||||
return ff_inlink_check_available_samples(inlink, queued_samples + 1) == 1;
|
||||
}
|
||||
|
||||
static int pass_frame(AVFilterLink *inlink, AVFilterLink *outlink, int64_t *pts)
|
||||
{
|
||||
AVFrame *in;
|
||||
@ -675,10 +668,10 @@ static int activate(AVFilterContext *ctx)
|
||||
ff_inlink_queued_samples(ctx->inputs[1]) >= s->nb_samples) {
|
||||
return pass_crossfade(ctx);
|
||||
} else if (ff_outlink_frame_wanted(outlink)) {
|
||||
if (!s->status[0] && check_input(ctx->inputs[0]))
|
||||
if (!s->status[0] && ff_outlink_get_status(ctx->inputs[0]))
|
||||
s->status[0] = AVERROR_EOF;
|
||||
s->passthrough = !s->status[0];
|
||||
if (check_input(ctx->inputs[1])) {
|
||||
if (ff_outlink_get_status(ctx->inputs[1])) {
|
||||
s->status[1] = AVERROR_EOF;
|
||||
ff_outlink_set_status(outlink, AVERROR_EOF, AV_NOPTS_VALUE);
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user