130 float c_re,
float c_im,
131 float mag_totall,
float mag_totalr,
132 float fl_phase,
float fr_phase,
133 float bl_phase,
float br_phase,
134 float sl_phase,
float sr_phase,
139 float c_re,
float c_im,
140 float lfe_re,
float lfe_im,
141 float mag_totall,
float mag_totalr,
142 float fl_phase,
float fr_phase,
143 float bl_phase,
float br_phase,
144 float sl_phase,
float sr_phase,
189 for (
int ch = 0; ch <
s->nb_in_channels &&
s->level_in >= 0.f; ch++)
190 s->input_levels[ch] =
s->level_in;
196 s->input_levels[ch] =
s->f_i[n];
204 for (
int ch = 0; ch <
s->nb_out_channels &&
s->level_out >= 0.f; ch++)
205 s->output_levels[ch] =
s->level_out;
211 s->output_levels[ch] =
s->f_o[n];
224 s->nb_in_channels =
inlink->ch_layout.nb_channels;
226 for (
int ch = 0; ch <
inlink->ch_layout.nb_channels; ch++) {
230 0,
s->win_size, &
scale, 0);
236 if (!
s->input_levels)
253 s->lowcut = 1.f *
s->lowcutf / (
inlink->sample_rate * 0.5) * (
s->win_size / 2);
254 s->highcut = 1.f *
s->highcutf / (
inlink->sample_rate * 0.5) * (
s->win_size / 2);
274 1,
s->win_size, &iscale, 0);
280 if (!
s->output_levels)
292 if (!
s->overlap_buffer || !
s->output || !
s->output_out || !
s->output_mag ||
293 !
s->output_ph || !
s->factors || !
s->sfactors)
296 s->rdft_size =
s->win_size / 2 + 1;
300 s->l_phase =
av_calloc(
s->rdft_size,
sizeof(*
s->l_phase));
301 s->r_phase =
av_calloc(
s->rdft_size,
sizeof(*
s->r_phase));
303 s->c_phase =
av_calloc(
s->rdft_size,
sizeof(*
s->c_phase));
304 s->mag_total =
av_calloc(
s->rdft_size,
sizeof(*
s->mag_total));
305 s->lfe_mag =
av_calloc(
s->rdft_size,
sizeof(*
s->lfe_mag));
306 s->lfe_phase =
av_calloc(
s->rdft_size,
sizeof(*
s->lfe_phase));
307 if (!
s->x_pos || !
s->y_pos || !
s->l_phase || !
s->r_phase || !
s->lfe_phase ||
308 !
s->c_phase || !
s->mag_total || !
s->lfe_mag || !
s->c_mag)
324 #define MIN_MAG_SUM 0.00000001f
328 float reference,
r,
a;
333 reference = angle *
M_PI / 180.f;
360 r = focus > 0.f ? 1.f -
powf(1.
f -
r, 1.
f + focus * 20.
f) :
powf(
r, 1.
f - focus * 20.
f);
374 static inline void get_lfe(
int output_lfe,
int n,
float lowcut,
float highcut,
375 float *lfe_mag,
float c_mag,
float *mag_total,
int lfe_mode)
377 if (output_lfe && n < highcut) {
378 *lfe_mag = n < lowcut ? 1.f : .5f*(1.f+
cosf(
M_PI*(lowcut-n)/(lowcut-highcut)));
381 *mag_total -= *lfe_mag;
388 dst[2 * n ] = mag * cosf(ph); \
389 dst[2 * n + 1] = mag * sinf(ph);
394 float *
factor = (
float *)
s->factors->extended_data[ch];
395 const float f_x =
s->f_x[
sc_map[chan >= 0 ? chan : 0]];
396 const float f_y =
s->f_y[
sc_map[chan >= 0 ? chan : 0]];
397 const int rdft_size =
s->rdft_size;
398 const float *x =
s->x_pos;
399 const float *y =
s->y_pos;
403 for (
int n = 0; n < rdft_size; n++)
407 for (
int n = 0; n < rdft_size; n++)
411 for (
int n = 0; n < rdft_size; n++)
415 for (
int n = 0; n < rdft_size; n++)
419 for (
int n = 0; n < rdft_size; n++)
423 for (
int n = 0; n < rdft_size; n++)
427 for (
int n = 0; n < rdft_size; n++)
431 for (
int n = 0; n < rdft_size; n++)
435 for (
int n = 0; n < rdft_size; n++)
439 for (
int n = 0; n < rdft_size; n++)
448 float *sfactor = (
float *)
s->sfactors->extended_data[ch];
449 float *
factor = (
float *)
s->factors->extended_data[ch];
450 float *omag = (
float *)
s->output_mag->extended_data[ch];
451 float *oph = (
float *)
s->output_ph->extended_data[ch];
452 float *dst = (
float *)
s->output->extended_data[ch];
453 const int rdft_size =
s->rdft_size;
454 const float smooth =
s->smooth;
457 for (
int n = 0; n < rdft_size; n++)
463 for (
int n = 0; n < rdft_size; n++)
466 for (
int n = 0; n < rdft_size; n++) {
467 const float mag = omag[n];
468 const float ph = oph[n];
477 float *omag = (
float *)
s->output_mag->extended_data[ch];
478 float *oph = (
float *)
s->output_ph->extended_data[ch];
479 const float *mag_total =
s->mag_total;
480 const int rdft_size =
s->rdft_size;
481 const float *c_phase =
s->c_phase;
482 const float *l_phase =
s->l_phase;
483 const float *r_phase =
s->r_phase;
484 const float *lfe_mag =
s->lfe_mag;
485 const float *c_mag =
s->c_mag;
489 memcpy(omag, c_mag, rdft_size *
sizeof(*omag));
492 memcpy(omag, lfe_mag, rdft_size *
sizeof(*omag));
501 memcpy(omag, mag_total, rdft_size *
sizeof(*omag));
511 memcpy(oph, c_phase, rdft_size *
sizeof(*oph));
516 memcpy(oph, l_phase, rdft_size *
sizeof(*oph));
521 memcpy(oph, r_phase, rdft_size *
sizeof(*oph));
544 float *omag = (
float *)
s->output_mag->extended_data[ch];
545 float *oph = (
float *)
s->output_ph->extended_data[ch];
546 const float *mag_total =
s->mag_total;
547 const float *lfe_phase =
s->lfe_phase;
548 const int rdft_size =
s->rdft_size;
549 const float *c_phase =
s->c_phase;
550 const float *l_phase =
s->l_phase;
551 const float *r_phase =
s->r_phase;
552 const float *lfe_mag =
s->lfe_mag;
553 const float *c_mag =
s->c_mag;
566 memcpy(omag, c_mag, rdft_size *
sizeof(*omag));
569 memcpy(omag, lfe_mag, rdft_size *
sizeof(*omag));
578 memcpy(omag, mag_total, rdft_size *
sizeof(*omag));
586 memcpy(oph, lfe_phase, rdft_size *
sizeof(*oph));
590 memcpy(oph, c_phase, rdft_size *
sizeof(*oph));
595 memcpy(oph, l_phase, rdft_size *
sizeof(*oph));
600 memcpy(oph, r_phase, rdft_size *
sizeof(*oph));
629 float c_re,
float c_im,
630 float mag_totall,
float mag_totalr,
631 float fl_phase,
float fr_phase,
632 float bl_phase,
float br_phase,
633 float sl_phase,
float sr_phase,
638 float fl_mag, fr_mag, ls_mag, rs_mag, lb_mag, rb_mag;
639 float *dstc, *dstl, *dstr, *dstls, *dstrs, *dstlb, *dstrb, *dstlfe;
640 float lfe_mag, c_phase, mag_total = (mag_totall + mag_totalr) * 0.5;
643 dstl = (
float *)
s->output->extended_data[0];
644 dstr = (
float *)
s->output->extended_data[1];
645 dstc = (
float *)
s->output->extended_data[2];
646 dstlfe = (
float *)
s->output->extended_data[3];
647 dstlb = (
float *)
s->output->extended_data[4];
648 dstrb = (
float *)
s->output->extended_data[5];
649 dstls = (
float *)
s->output->extended_data[6];
650 dstrs = (
float *)
s->output->extended_data[7];
652 c_phase =
atan2f(c_im, c_re);
654 get_lfe(
s->output_lfe, n,
s->lowcut,
s->highcut, &lfe_mag, hypotf(c_re, c_im), &mag_total,
s->lfe_mode);
663 dstl[2 * n ] = fl_mag *
cosf(fl_phase);
664 dstl[2 * n + 1] = fl_mag *
sinf(fl_phase);
666 dstr[2 * n ] = fr_mag *
cosf(fr_phase);
667 dstr[2 * n + 1] = fr_mag *
sinf(fr_phase);
670 dstc[2 * n + 1] = c_im;
672 dstlfe[2 * n ] = lfe_mag *
cosf(c_phase);
673 dstlfe[2 * n + 1] = lfe_mag *
sinf(c_phase);
675 dstlb[2 * n ] = lb_mag *
cosf(bl_phase);
676 dstlb[2 * n + 1] = lb_mag *
sinf(bl_phase);
678 dstrb[2 * n ] = rb_mag *
cosf(br_phase);
679 dstrb[2 * n + 1] = rb_mag *
sinf(br_phase);
681 dstls[2 * n ] = ls_mag *
cosf(sl_phase);
682 dstls[2 * n + 1] = ls_mag *
sinf(sl_phase);
684 dstrs[2 * n ] = rs_mag *
cosf(sr_phase);
685 dstrs[2 * n + 1] = rs_mag *
sinf(sr_phase);
689 float c_re,
float c_im,
690 float lfe_re,
float lfe_im,
691 float mag_totall,
float mag_totalr,
692 float fl_phase,
float fr_phase,
693 float bl_phase,
float br_phase,
694 float sl_phase,
float sr_phase,
699 float fl_mag, fr_mag, ls_mag, rs_mag, lb_mag, rb_mag;
700 float *dstc, *dstl, *dstr, *dstls, *dstrs, *dstlb, *dstrb, *dstlfe;
703 dstl = (
float *)
s->output->extended_data[0];
704 dstr = (
float *)
s->output->extended_data[1];
705 dstc = (
float *)
s->output->extended_data[2];
706 dstlfe = (
float *)
s->output->extended_data[3];
707 dstlb = (
float *)
s->output->extended_data[4];
708 dstrb = (
float *)
s->output->extended_data[5];
709 dstls = (
float *)
s->output->extended_data[6];
710 dstrs = (
float *)
s->output->extended_data[7];
719 dstl[2 * n ] = fl_mag *
cosf(fl_phase);
720 dstl[2 * n + 1] = fl_mag *
sinf(fl_phase);
722 dstr[2 * n ] = fr_mag *
cosf(fr_phase);
723 dstr[2 * n + 1] = fr_mag *
sinf(fr_phase);
726 dstc[2 * n + 1] = c_im;
728 dstlfe[2 * n ] = lfe_re;
729 dstlfe[2 * n + 1] = lfe_im;
731 dstlb[2 * n ] = lb_mag *
cosf(bl_phase);
732 dstlb[2 * n + 1] = lb_mag *
sinf(bl_phase);
734 dstrb[2 * n ] = rb_mag *
cosf(br_phase);
735 dstrb[2 * n + 1] = rb_mag *
sinf(br_phase);
737 dstls[2 * n ] = ls_mag *
cosf(sl_phase);
738 dstls[2 * n + 1] = ls_mag *
sinf(sl_phase);
740 dstrs[2 * n ] = rs_mag *
cosf(sr_phase);
741 dstrs[2 * n + 1] = rs_mag *
sinf(sr_phase);
747 const float *srcl = (
const float *)
s->input->extended_data[0];
748 const float *srcr = (
const float *)
s->input->extended_data[1];
749 const int output_lfe =
s->output_lfe &&
s->create_lfe;
750 const int lfe_mode =
s->lfe_mode;
751 const float highcut =
s->highcut;
752 const float lowcut =
s->lowcut;
753 const float angle =
s->angle;
754 const float focus =
s->focus;
755 float *magtotal =
s->mag_total;
756 float *lfemag =
s->lfe_mag;
757 float *lphase =
s->l_phase;
758 float *rphase =
s->r_phase;
759 float *cphase =
s->c_phase;
760 float *cmag =
s->c_mag;
761 float *xpos =
s->x_pos;
762 float *ypos =
s->y_pos;
764 for (
int n = 0; n <
s->rdft_size; n++) {
765 float l_re = srcl[2 * n], r_re = srcr[2 * n];
766 float l_im = srcl[2 * n + 1], r_im = srcr[2 * n + 1];
767 float c_phase =
atan2f(l_im + r_im, l_re + r_re);
768 float l_mag = hypotf(l_re, l_im);
769 float r_mag = hypotf(r_re, r_im);
770 float mag_total = hypotf(l_mag, r_mag);
771 float l_phase =
atan2f(l_im, l_re);
772 float r_phase =
atan2f(r_im, r_re);
773 float phase_dif =
fabsf(l_phase - r_phase);
774 float mag_sum = l_mag + r_mag;
775 float c_mag = mag_sum * 0.5f;
779 mag_dif = (l_mag - r_mag) / mag_sum;
780 if (phase_dif >
M_PI)
781 phase_dif = 2.f *
M_PI - phase_dif;
786 get_lfe(output_lfe, n, lowcut, highcut, &lfemag[n], c_mag, &mag_total, lfe_mode);
794 magtotal[n] = mag_total;
801 const float *srcl = (
const float *)
s->input->extended_data[0];
802 const float *srcr = (
const float *)
s->input->extended_data[1];
803 const float *srclfe = (
const float *)
s->input->extended_data[2];
804 const float angle =
s->angle;
805 const float focus =
s->focus;
806 float *magtotal =
s->mag_total;
807 float *lfephase =
s->lfe_phase;
808 float *lfemag =
s->lfe_mag;
809 float *lphase =
s->l_phase;
810 float *rphase =
s->r_phase;
811 float *cphase =
s->c_phase;
812 float *cmag =
s->c_mag;
813 float *xpos =
s->x_pos;
814 float *ypos =
s->y_pos;
816 for (
int n = 0; n <
s->rdft_size; n++) {
817 float l_re = srcl[2 * n], r_re = srcr[2 * n];
818 float l_im = srcl[2 * n + 1], r_im = srcr[2 * n + 1];
819 float lfe_re = srclfe[2 * n], lfe_im = srclfe[2 * n + 1];
820 float c_phase =
atan2f(l_im + r_im, l_re + r_re);
821 float l_mag = hypotf(l_re, l_im);
822 float r_mag = hypotf(r_re, r_im);
823 float lfe_mag = hypotf(lfe_re, lfe_im);
824 float lfe_phase =
atan2f(lfe_im, lfe_re);
825 float mag_total = hypotf(l_mag, r_mag);
826 float l_phase =
atan2f(l_im, l_re);
827 float r_phase =
atan2f(r_im, r_re);
828 float phase_dif =
fabsf(l_phase - r_phase);
829 float mag_sum = l_mag + r_mag;
830 float c_mag = mag_sum * 0.5f;
834 mag_dif = (l_mag - r_mag) / mag_sum;
835 if (phase_dif >
M_PI)
836 phase_dif = 2.f *
M_PI - phase_dif;
849 lfephase[n] = lfe_phase;
850 magtotal[n] = mag_total;
857 const float *srcl = (
const float *)
s->input->extended_data[0];
858 const float *srcr = (
const float *)
s->input->extended_data[1];
859 const float *srcc = (
const float *)
s->input->extended_data[2];
860 const int output_lfe =
s->output_lfe &&
s->create_lfe;
861 const int lfe_mode =
s->lfe_mode;
862 const float highcut =
s->highcut;
863 const float lowcut =
s->lowcut;
864 const float angle =
s->angle;
865 const float focus =
s->focus;
866 float *magtotal =
s->mag_total;
867 float *lfemag =
s->lfe_mag;
868 float *lphase =
s->l_phase;
869 float *rphase =
s->r_phase;
870 float *cphase =
s->c_phase;
871 float *cmag =
s->c_mag;
872 float *xpos =
s->x_pos;
873 float *ypos =
s->y_pos;
875 for (
int n = 0; n <
s->rdft_size; n++) {
876 float l_re = srcl[2 * n], r_re = srcr[2 * n];
877 float l_im = srcl[2 * n + 1], r_im = srcr[2 * n + 1];
878 float c_re = srcc[2 * n], c_im = srcc[2 * n + 1];
879 float c_phase =
atan2f(c_im, c_re);
880 float c_mag = hypotf(c_re, c_im);
881 float l_mag = hypotf(l_re, l_im);
882 float r_mag = hypotf(r_re, r_im);
883 float mag_total = hypotf(l_mag, r_mag);
884 float l_phase =
atan2f(l_im, l_re);
885 float r_phase =
atan2f(r_im, r_re);
886 float phase_dif =
fabsf(l_phase - r_phase);
887 float mag_sum = l_mag + r_mag;
891 mag_dif = (l_mag - r_mag) / mag_sum;
892 if (phase_dif >
M_PI)
893 phase_dif = 2.f *
M_PI - phase_dif;
898 get_lfe(output_lfe, n, lowcut, highcut, &lfemag[n], c_mag, &mag_total, lfe_mode);
906 magtotal[n] = mag_total;
913 float *srcl, *srcr, *srcc, *srcsl, *srcsr;
916 srcl = (
float *)
s->input->extended_data[0];
917 srcr = (
float *)
s->input->extended_data[1];
918 srcc = (
float *)
s->input->extended_data[2];
919 srcsl = (
float *)
s->input->extended_data[3];
920 srcsr = (
float *)
s->input->extended_data[4];
922 for (n = 0; n <
s->rdft_size; n++) {
923 float fl_re = srcl[2 * n], fr_re = srcr[2 * n];
924 float fl_im = srcl[2 * n + 1], fr_im = srcr[2 * n + 1];
925 float c_re = srcc[2 * n], c_im = srcc[2 * n + 1];
926 float sl_re = srcsl[2 * n], sl_im = srcsl[2 * n + 1];
927 float sr_re = srcsr[2 * n], sr_im = srcsr[2 * n + 1];
928 float fl_mag = hypotf(fl_re, fl_im);
929 float fr_mag = hypotf(fr_re, fr_im);
930 float fl_phase =
atan2f(fl_im, fl_re);
931 float fr_phase =
atan2f(fr_im, fr_re);
932 float sl_mag = hypotf(sl_re, sl_im);
933 float sr_mag = hypotf(sr_re, sr_im);
934 float sl_phase =
atan2f(sl_im, sl_re);
935 float sr_phase =
atan2f(sr_im, sr_re);
936 float phase_difl =
fabsf(fl_phase - sl_phase);
937 float phase_difr =
fabsf(fr_phase - sr_phase);
938 float magl_sum = fl_mag + sl_mag;
939 float magr_sum = fr_mag + sr_mag;
942 float mag_totall = hypotf(fl_mag, sl_mag);
943 float mag_totalr = hypotf(fr_mag, sr_mag);
944 float bl_phase =
atan2f(fl_im + sl_im, fl_re + sl_re);
945 float br_phase =
atan2f(fr_im + sr_im, fr_re + sr_re);
949 if (phase_difl >
M_PI)
950 phase_difl = 2.f *
M_PI - phase_difl;
952 if (phase_difr >
M_PI)
953 phase_difr = 2.f *
M_PI - phase_difr;
958 s->upmix_5_0(
ctx, c_re, c_im,
959 mag_totall, mag_totalr,
970 float *srcl, *srcr, *srcc, *srclfe, *srcsl, *srcsr;
973 srcl = (
float *)
s->input->extended_data[0];
974 srcr = (
float *)
s->input->extended_data[1];
975 srcc = (
float *)
s->input->extended_data[2];
976 srclfe = (
float *)
s->input->extended_data[3];
977 srcsl = (
float *)
s->input->extended_data[4];
978 srcsr = (
float *)
s->input->extended_data[5];
980 for (n = 0; n <
s->rdft_size; n++) {
981 float fl_re = srcl[2 * n], fr_re = srcr[2 * n];
982 float fl_im = srcl[2 * n + 1], fr_im = srcr[2 * n + 1];
983 float c_re = srcc[2 * n], c_im = srcc[2 * n + 1];
984 float lfe_re = srclfe[2 * n], lfe_im = srclfe[2 * n + 1];
985 float sl_re = srcsl[2 * n], sl_im = srcsl[2 * n + 1];
986 float sr_re = srcsr[2 * n], sr_im = srcsr[2 * n + 1];
987 float fl_mag = hypotf(fl_re, fl_im);
988 float fr_mag = hypotf(fr_re, fr_im);
989 float fl_phase =
atan2f(fl_im, fl_re);
990 float fr_phase =
atan2f(fr_im, fr_re);
991 float sl_mag = hypotf(sl_re, sl_im);
992 float sr_mag = hypotf(sr_re, sr_im);
993 float sl_phase =
atan2f(sl_im, sl_re);
994 float sr_phase =
atan2f(sr_im, sr_re);
995 float phase_difl =
fabsf(fl_phase - sl_phase);
996 float phase_difr =
fabsf(fr_phase - sr_phase);
997 float magl_sum = fl_mag + sl_mag;
998 float magr_sum = fr_mag + sr_mag;
1000 float mag_difr = magr_sum <
MIN_MAG_SUM ?
FFDIFFSIGN(fr_mag, sr_mag) : (fr_mag - sr_mag) / magr_sum;
1001 float mag_totall = hypotf(fl_mag, sl_mag);
1002 float mag_totalr = hypotf(fr_mag, sr_mag);
1003 float bl_phase =
atan2f(fl_im + sl_im, fl_re + sl_re);
1004 float br_phase =
atan2f(fr_im + sr_im, fr_re + sr_re);
1008 if (phase_difl >
M_PI)
1009 phase_difl = 2.f *
M_PI - phase_difl;
1011 if (phase_difr >
M_PI)
1012 phase_difr = 2.f *
M_PI - phase_difr;
1017 s->upmix_5_1(
ctx, c_re, c_im, lfe_re, lfe_im,
1018 mag_totall, mag_totalr,
1029 float *srcl, *srcr, *srcc, *srclfe, *srcbl, *srcbr;
1032 srcl = (
float *)
s->input->extended_data[0];
1033 srcr = (
float *)
s->input->extended_data[1];
1034 srcc = (
float *)
s->input->extended_data[2];
1035 srclfe = (
float *)
s->input->extended_data[3];
1036 srcbl = (
float *)
s->input->extended_data[4];
1037 srcbr = (
float *)
s->input->extended_data[5];
1039 for (n = 0; n <
s->rdft_size; n++) {
1040 float fl_re = srcl[2 * n], fr_re = srcr[2 * n];
1041 float fl_im = srcl[2 * n + 1], fr_im = srcr[2 * n + 1];
1042 float c_re = srcc[2 * n], c_im = srcc[2 * n + 1];
1043 float lfe_re = srclfe[2 * n], lfe_im = srclfe[2 * n + 1];
1044 float bl_re = srcbl[2 * n], bl_im = srcbl[2 * n + 1];
1045 float br_re = srcbr[2 * n], br_im = srcbr[2 * n + 1];
1046 float fl_mag = hypotf(fl_re, fl_im);
1047 float fr_mag = hypotf(fr_re, fr_im);
1048 float fl_phase =
atan2f(fl_im, fl_re);
1049 float fr_phase =
atan2f(fr_im, fr_re);
1050 float bl_mag = hypotf(bl_re, bl_im);
1051 float br_mag = hypotf(br_re, br_im);
1052 float bl_phase =
atan2f(bl_im, bl_re);
1053 float br_phase =
atan2f(br_im, br_re);
1054 float phase_difl =
fabsf(fl_phase - bl_phase);
1055 float phase_difr =
fabsf(fr_phase - br_phase);
1056 float magl_sum = fl_mag + bl_mag;
1057 float magr_sum = fr_mag + br_mag;
1058 float mag_difl = magl_sum <
MIN_MAG_SUM ?
FFDIFFSIGN(fl_mag, bl_mag) : (fl_mag - bl_mag) / magl_sum;
1059 float mag_difr = magr_sum <
MIN_MAG_SUM ?
FFDIFFSIGN(fr_mag, br_mag) : (fr_mag - br_mag) / magr_sum;
1060 float mag_totall = hypotf(fl_mag, bl_mag);
1061 float mag_totalr = hypotf(fr_mag, br_mag);
1062 float sl_phase =
atan2f(fl_im + bl_im, fl_re + bl_re);
1063 float sr_phase =
atan2f(fr_im + br_im, fr_re + br_re);
1067 if (phase_difl >
M_PI)
1068 phase_difl = 2.f *
M_PI - phase_difl;
1070 if (phase_difr >
M_PI)
1071 phase_difr = 2.f *
M_PI - phase_difr;
1076 s->upmix_5_1(
ctx, c_re, c_im, lfe_re, lfe_im,
1077 mag_totall, mag_totalr,
1089 if (
s->all_x >= 0.f)
1090 for (
int n = 0; n <
SC_NB; n++)
1091 s->f_x[n] =
s->all_x;
1093 if (
s->all_y >= 0.f)
1094 for (
int n = 0; n <
SC_NB; n++)
1095 s->f_y[n] =
s->all_y;
1102 int64_t in_channel_layout, out_channel_layout;
1108 s->out_channel_layout_str);
1114 s->in_channel_layout_str);
1118 if (
s->lowcutf >=
s->highcutf) {
1120 s->lowcutf,
s->highcutf);
1125 s->in_ch_layout.u.mask : 0;
1127 s->out_ch_layout.u.mask : 0;
1132 switch (in_channel_layout) {
1147 switch (out_channel_layout) {
1157 switch (out_channel_layout) {
1167 switch (out_channel_layout) {
1178 s->in_channel_layout_str,
s->out_channel_layout_str);
1182 s->window_func_lut =
av_calloc(
s->win_size,
sizeof(*
s->window_func_lut));
1183 if (!
s->window_func_lut)
1187 if (
s->overlap == 1)
1188 s->overlap = overlap;
1190 for (
int i = 0;
i <
s->win_size;
i++)
1191 s->window_func_lut[
i] =
sqrtf(
s->window_func_lut[
i] /
s->win_size);
1192 s->hop_size =
FFMAX(1,
s->win_size * (1. -
s->overlap));
1202 float *
src = (
float *)
s->input_in->extended_data[ch];
1203 float *
win = (
float *)
s->window->extended_data[ch];
1204 const int offset =
s->win_size -
s->hop_size;
1205 const float level_in =
s->input_levels[ch];
1211 for (
int n = 0; n <
s->win_size; n++)
1212 win[n] =
src[n] *
s->window_func_lut[n] * level_in;
1214 s->tx_fn(
s->rdft[ch], (
float *)
s->input->extended_data[ch],
win,
sizeof(
float));
1225 for (
int ch = start; ch < end; ch++)
1234 const float level_out =
s->output_levels[ch];
1237 dst = (
float *)
s->output_out->extended_data[ch];
1238 ptr = (
float *)
s->overlap_buffer->extended_data[ch];
1239 s->itx_fn(
s->irdft[ch], dst, (
float *)
s->output->extended_data[ch],
sizeof(
AVComplexFloat));
1241 memmove(
s->overlap_buffer->extended_data[ch],
1242 s->overlap_buffer->extended_data[ch] +
s->hop_size *
sizeof(
float),
1243 s->win_size *
sizeof(
float));
1244 memset(
s->overlap_buffer->extended_data[ch] +
s->win_size *
sizeof(
float),
1245 0,
s->hop_size *
sizeof(
float));
1247 for (
int n = 0; n <
s->win_size; n++)
1248 ptr[n] += dst[n] *
s->window_func_lut[n] * level_out;
1250 ptr = (
float *)
s->overlap_buffer->extended_data[ch];
1251 dst = (
float *)
out->extended_data[ch];
1252 memcpy(dst, ptr,
s->hop_size *
sizeof(
float));
1261 const int start = (
out->ch_layout.nb_channels * jobnr) / nb_jobs;
1262 const int end = (
out->ch_layout.nb_channels * (jobnr+1)) / nb_jobs;
1264 for (
int ch = start; ch < end; ch++) {
1351 for (
int ch = 0; ch <
s->nb_in_channels; ch++)
1353 for (
int ch = 0; ch <
s->nb_out_channels; ch++)
1373 char *res,
int res_len,
int flags)
1382 s->hop_size =
FFMAX(1,
s->win_size * (1. -
s->overlap));
1391 #define OFFSET(x) offsetof(AudioSurroundContext, x)
1392 #define FLAGS AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
1393 #define TFLAGS AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
1473 .priv_class = &surround_class,