X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavfilter%2Faf_afade.c;h=4edfd27a3c610484480f63ce409bba76101f0ed2;hb=a8c762a17d5d12f7e6838c023e5b597737547fd4;hp=0c43b2233dedc74e7862b06575da32344ed7400a;hpb=e1b89c76f66343d1b495165664647317c66764bb;p=ffmpeg diff --git a/libavfilter/af_afade.c b/libavfilter/af_afade.c index 0c43b2233de..4edfd27a3c6 100644 --- a/libavfilter/af_afade.c +++ b/libavfilter/af_afade.c @@ -454,21 +454,22 @@ static int activate(AVFilterContext *ctx) if (s->crossfade_is_over) { ret = ff_inlink_consume_frame(ctx->inputs[1], &in); - if (ret < 0) { + if (ret > 0) { + in->pts = s->pts; + s->pts += av_rescale_q(in->nb_samples, + (AVRational){ 1, outlink->sample_rate }, outlink->time_base); + return ff_filter_frame(outlink, in); + } else if (ret < 0) { return ret; } else if (ff_inlink_acknowledge_status(ctx->inputs[1], &status, &pts)) { ff_outlink_set_status(ctx->outputs[0], status, pts); return 0; - } else { - if (ff_outlink_frame_wanted(ctx->outputs[0]) && !in) { + } else if (!ret) { + if (ff_outlink_frame_wanted(ctx->outputs[0])) { ff_inlink_request_frame(ctx->inputs[1]); return 0; } } - in->pts = s->pts; - s->pts += av_rescale_q(in->nb_samples, - (AVRational){ 1, outlink->sample_rate }, outlink->time_base); - return ff_filter_frame(outlink, in); } if (ff_inlink_queued_samples(ctx->inputs[0]) > s->nb_samples) { @@ -484,7 +485,7 @@ static int activate(AVFilterContext *ctx) (AVRational){ 1, outlink->sample_rate }, outlink->time_base); return ff_filter_frame(outlink, in); } else if (ff_inlink_queued_samples(ctx->inputs[0]) >= s->nb_samples && - ff_inlink_queued_samples(ctx->inputs[1]) >= s->nb_samples) { + ff_inlink_queued_samples(ctx->inputs[1]) >= s->nb_samples && s->cf0_eof) { if (s->overlap) { out = ff_get_audio_buffer(outlink, s->nb_samples); if (!out)