History

avfilter/af_afade: stop using ff_outlink_get_status on inputs

Paul B Mahol committed 3 years ago

Commit c44fe101 parent a756ae41 file · +25 −17Browse files

Showing the changes to libavfilter (1 of 1 file). Show all

Unified · Split

libavfilter/af_afade.c+25−17
@@ -42,8 +42,8 @@ typedef struct AudioFadeContext { · 41 unmodified lines
42 double silence;42 double silence;
43 double unity;43 double unity;
44 int overlap;44 int overlap;
45 int cf0_eof;45 int status[2];
46 int crossfade_is_over;46 int passthrough;
47 int64_t pts;47 int64_t pts;
48 48
49 void (*fade_samples)(uint8_t **dst, uint8_t * const *src,49 void (*fade_samples)(uint8_t **dst, uint8_t * const *src,
@@ -521,6 +521,13 @@ CROSSFADE(flt, float) · 471 unmodified lines
521CROSSFADE(s16, int16_t)521CROSSFADE(s16, int16_t)
522CROSSFADE(s32, int32_t)522CROSSFADE(s32, int32_t)
523 523
524static int check_input(AVFilterLink *inlink)
525{
526 const int queued_samples = ff_inlink_queued_samples(inlink);
527
528 return ff_inlink_check_available_samples(inlink, queued_samples + 1) == 1;
529}
530
524static int activate(AVFilterContext *ctx)531static int activate(AVFilterContext *ctx)
525{532{
526 AudioFadeContext *s = ctx->priv;533 AudioFadeContext *s = ctx->priv;
@@ -531,7 +538,7 @@ static int activate(AVFilterContext *ctx) · 4 unmodified lines
531 538
532 FF_FILTER_FORWARD_STATUS_BACK_ALL(outlink, ctx);539 FF_FILTER_FORWARD_STATUS_BACK_ALL(outlink, ctx);
533 540
534 if (s->crossfade_is_over) {541 if (s->passthrough && s->status[0]) {
535 ret = ff_inlink_consume_frame(ctx->inputs[1], &in);542 ret = ff_inlink_consume_frame(ctx->inputs[1], &in);
536 if (ret > 0) {543 if (ret > 0) {
537 in->pts = s->pts;544 in->pts = s->pts;
@@ -541,10 +548,10 @@ static int activate(AVFilterContext *ctx) · 3 unmodified lines
541 } else if (ret < 0) {548 } else if (ret < 0) {
542 return ret;549 return ret;
543 } else if (ff_inlink_acknowledge_status(ctx->inputs[1], &status, &pts)) {550 } else if (ff_inlink_acknowledge_status(ctx->inputs[1], &status, &pts)) {
544 ff_outlink_set_status(ctx->outputs[0], status, pts);551 ff_outlink_set_status(outlink, status, pts);
545 return 0;552 return 0;
546 } else if (!ret) {553 } else if (!ret) {
547 if (ff_outlink_frame_wanted(ctx->outputs[0])) {554 if (ff_outlink_frame_wanted(outlink)) {
548 ff_inlink_request_frame(ctx->inputs[1]);555 ff_inlink_request_frame(ctx->inputs[1]);
549 return 0;556 return 0;
550 }557 }
@@ -554,6 +561,7 @@ static int activate(AVFilterContext *ctx) · 3 unmodified lines
554 nb_samples = ff_inlink_queued_samples(ctx->inputs[0]);561 nb_samples = ff_inlink_queued_samples(ctx->inputs[0]);
555 if (nb_samples > s->nb_samples) {562 if (nb_samples > s->nb_samples) {
556 nb_samples -= s->nb_samples;563 nb_samples -= s->nb_samples;
564 s->passthrough = 1;
557 ret = ff_inlink_consume_samples(ctx->inputs[0], nb_samples, nb_samples, &in);565 ret = ff_inlink_consume_samples(ctx->inputs[0], nb_samples, nb_samples, &in);
558 if (ret < 0)566 if (ret < 0)
559 return ret;567 return ret;
@@ -561,7 +569,7 @@ static int activate(AVFilterContext *ctx) · 1 unmodified line
561 s->pts += av_rescale_q(in->nb_samples,569 s->pts += av_rescale_q(in->nb_samples,
562 (AVRational){ 1, outlink->sample_rate }, outlink->time_base);570 (AVRational){ 1, outlink->sample_rate }, outlink->time_base);
563 return ff_filter_frame(outlink, in);571 return ff_filter_frame(outlink, in);
564 } else if (s->cf0_eof && nb_samples >= s->nb_samples &&572 } else if (s->status[0] && nb_samples >= s->nb_samples &&
565 ff_inlink_queued_samples(ctx->inputs[1]) >= s->nb_samples) {573 ff_inlink_queued_samples(ctx->inputs[1]) >= s->nb_samples) {
566 if (s->overlap) {574 if (s->overlap) {
567 out = ff_get_audio_buffer(outlink, s->nb_samples);575 out = ff_get_audio_buffer(outlink, s->nb_samples);
@@ -587,7 +595,7 @@ static int activate(AVFilterContext *ctx) · 19 unmodified lines
587 out->pts = s->pts;595 out->pts = s->pts;
588 s->pts += av_rescale_q(s->nb_samples,596 s->pts += av_rescale_q(s->nb_samples,
589 (AVRational){ 1, outlink->sample_rate }, outlink->time_base);597 (AVRational){ 1, outlink->sample_rate }, outlink->time_base);
590 s->crossfade_is_over = 1;598 s->passthrough = 1;
591 av_frame_free(&cf[0]);599 av_frame_free(&cf[0]);
592 av_frame_free(&cf[1]);600 av_frame_free(&cf[1]);
593 return ff_filter_frame(outlink, out);601 return ff_filter_frame(outlink, out);
@@ -627,19 +635,20 @@ static int activate(AVFilterContext *ctx) · 33 unmodified lines
627 out->pts = s->pts;635 out->pts = s->pts;
628 s->pts += av_rescale_q(s->nb_samples,636 s->pts += av_rescale_q(s->nb_samples,
629 (AVRational){ 1, outlink->sample_rate }, outlink->time_base);637 (AVRational){ 1, outlink->sample_rate }, outlink->time_base);
630 s->crossfade_is_over = 1;638 s->passthrough = 1;
631 av_frame_free(&cf[1]);639 av_frame_free(&cf[1]);
632 return ff_filter_frame(outlink, out);640 return ff_filter_frame(outlink, out);
633 }641 }
634 } else if (ff_outlink_frame_wanted(ctx->outputs[0])) {642 } else if (ff_outlink_frame_wanted(outlink)) {
635 if (!s->cf0_eof && ff_outlink_get_status(ctx->inputs[0])) {643 if (!s->status[0] && check_input(ctx->inputs[0]))
636 s->cf0_eof = 1;644 s->status[0] = AVERROR_EOF;
637 }645 s->passthrough = !s->status[0];
638 if (ff_outlink_get_status(ctx->inputs[1])) {646 if (check_input(ctx->inputs[1])) {
639 ff_outlink_set_status(ctx->outputs[0], AVERROR_EOF, AV_NOPTS_VALUE);647 s->status[1] = AVERROR_EOF;
648 ff_outlink_set_status(outlink, AVERROR_EOF, AV_NOPTS_VALUE);
640 return 0;649 return 0;
641 }650 }
642 if (!s->cf0_eof)651 if (!s->status[0])
643 ff_inlink_request_frame(ctx->inputs[0]);652 ff_inlink_request_frame(ctx->inputs[0]);
644 else653 else
645 ff_inlink_request_frame(ctx->inputs[1]);654 ff_inlink_request_frame(ctx->inputs[1]);
@@ -677,8 +686,7 @@ static AVFrame *get_audio_buffer(AVFilterLink *inlink, int nb_samples) · 31 unmodified lines
677 AVFilterContext *ctx = inlink->dst;686 AVFilterContext *ctx = inlink->dst;
678 AudioFadeContext *s = ctx->priv;687 AudioFadeContext *s = ctx->priv;
679 688
680 return (s->crossfade_is_over ||689 return s->passthrough ?
681 (ff_inlink_queued_samples(inlink) > s->nb_samples)) ?
682 ff_null_get_audio_buffer (inlink, nb_samples) :690 ff_null_get_audio_buffer (inlink, nb_samples) :
683 ff_default_get_audio_buffer(inlink, nb_samples);691 ff_default_get_audio_buffer(inlink, nb_samples);
684}692}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t