| @@ -298,8 +298,6 @@ static int convert_coeffs(AVFilterContext *ctx, int selir) · 297 unmodified lines |
| 298 | 298 | part_size = 1 << av_log2(s->minp); |
| 299 | 299 | max_part_size = 1 << av_log2(s->maxp); |
| 300 | 300 | |
| 301 | | − s->min_part_size = part_size; |
| 302 | | − |
| 303 | 301 | for (int i = 0; left > 0; i++) { |
| 304 | 302 | int step = part_size == max_part_size ? INT_MAX : 1 + (i == 0); |
| 305 | 303 | int nb_partitions = FFMIN(step, (left + part_size - 1) / part_size); |
| @@ -592,6 +590,36 @@ FF_ENABLE_DEPRECATION_WARNINGS · 286 unmodified lines |
| 592 | 590 | if (!s->loading) |
| 593 | 591 | return AVERROR(ENOMEM); |
| 594 | 592 | |
| 593 | + s->xfade[0] = ff_get_audio_buffer(outlink, s->min_part_size); |
| 594 | + s->xfade[1] = ff_get_audio_buffer(outlink, s->min_part_size); |
| 595 | + if (!s->xfade[0] || !s->xfade[1]) |
| 596 | + return AVERROR(ENOMEM); |
| 597 | + |
| 598 | + switch (s->format) { |
| 599 | + case AV_SAMPLE_FMT_FLTP: |
| 600 | + for (int ch = 0; ch < s->nb_channels; ch++) { |
| 601 | + float *dst0 = (float *)s->xfade[0]->extended_data[ch]; |
| 602 | + float *dst1 = (float *)s->xfade[1]->extended_data[ch]; |
| 603 | + |
| 604 | + for (int n = 0; n < s->min_part_size; n++) { |
| 605 | + dst0[n] = (n + 1.f) / s->min_part_size; |
| 606 | + dst1[n] = 1.f - dst0[n]; |
| 607 | + } |
| 608 | + } |
| 609 | + break; |
| 610 | + case AV_SAMPLE_FMT_DBLP: |
| 611 | + for (int ch = 0; ch < s->nb_channels; ch++) { |
| 612 | + double *dst0 = (double *)s->xfade[0]->extended_data[ch]; |
| 613 | + double *dst1 = (double *)s->xfade[1]->extended_data[ch]; |
| 614 | + |
| 615 | + for (int n = 0; n < s->min_part_size; n++) { |
| 616 | + dst0[n] = (n + 1.0) / s->min_part_size; |
| 617 | + dst1[n] = 1.0 - dst0[n]; |
| 618 | + } |
| 619 | + } |
| 620 | + break; |
| 621 | + } |
| 622 | + |
| 595 | 623 | return 0; |
| 596 | 624 | } |
| 597 | 625 | |
| @@ -610,6 +638,9 @@ static av_cold void uninit(AVFilterContext *ctx) · 12 unmodified lines |
| 610 | 638 | av_frame_free(&s->norm_ir[i]); |
| 611 | 639 | } |
| 612 | 640 | |
| 641 | + av_frame_free(&s->xfade[0]); |
| 642 | + av_frame_free(&s->xfade[1]); |
| 643 | + |
| 613 | 644 | av_frame_free(&s->video); |
| 614 | 645 | } |
| 615 | 646 | |
| @@ -691,6 +722,8 @@ static av_cold int init(AVFilterContext *ctx) · 75 unmodified lines |
| 691 | 722 | |
| 692 | 723 | ff_afir_init(&s->afirdsp); |
| 693 | 724 | |
| 725 | + s->min_part_size = 1 << av_log2(s->minp); |
| 726 | + |
| 694 | 727 | return 0; |
| 695 | 728 | } |
| 696 | 729 | |