139 float c_re,
float c_im,
140 float mag_totall,
float mag_totalr,
141 float fl_phase,
float fr_phase,
142 float bl_phase,
float br_phase,
143 float sl_phase,
float sr_phase,
148 float c_re,
float c_im,
149 float lfe_re,
float lfe_im,
150 float mag_totall,
float mag_totalr,
151 float fl_phase,
float fr_phase,
152 float bl_phase,
float br_phase,
153 float sl_phase,
float sr_phase,
212 s->nb_in_channels =
inlink->channels;
214 if (!
s->input_levels)
216 for (
ch = 0;
ch <
s->nb_in_channels;
ch++)
217 s->input_levels[
ch] =
s->level_in;
220 s->input_levels[
ch] *=
s->fc_in;
223 s->input_levels[
ch] *=
s->fl_in;
226 s->input_levels[
ch] *=
s->fr_in;
229 s->input_levels[
ch] *=
s->sl_in;
232 s->input_levels[
ch] *=
s->sr_in;
235 s->input_levels[
ch] *=
s->bl_in;
238 s->input_levels[
ch] *=
s->br_in;
241 s->input_levels[
ch] *=
s->bc_in;
244 s->input_levels[
ch] *=
s->lfe_in;
254 s->lowcut = 1.f *
s->lowcutf / (
inlink->sample_rate * 0.5) * (
s->buf_size / 2);
255 s->highcut = 1.f *
s->highcutf / (
inlink->sample_rate * 0.5) * (
s->buf_size / 2);
277 if (!
s->output_levels)
279 for (
ch = 0;
ch <
s->nb_out_channels;
ch++)
280 s->output_levels[
ch] =
s->level_out;
283 s->output_levels[
ch] *=
s->fc_out;
286 s->output_levels[
ch] *=
s->fl_out;
289 s->output_levels[
ch] *=
s->fr_out;
292 s->output_levels[
ch] *=
s->sl_out;
295 s->output_levels[
ch] *=
s->sr_out;
298 s->output_levels[
ch] *=
s->bl_out;
301 s->output_levels[
ch] *=
s->br_out;
304 s->output_levels[
ch] *=
s->bc_out;
307 s->output_levels[
ch] *=
s->lfe_out;
311 if (!
s->overlap_buffer || !
s->output)
319 float reference,
r,
a;
324 reference = angle *
M_PI / 180.f;
328 if (fabsf(
a) <= M_PI_4)
333 *x = av_clipf(
sinf(
a) *
r, -1, 1);
334 *y = av_clipf(
cosf(
a) *
r, -1, 1);
345 static inline void get_lfe(
int output_lfe,
int n,
float lowcut,
float highcut,
346 float *lfe_mag,
float *mag_total,
int lfe_mode)
348 if (output_lfe &&
n < highcut) {
349 *lfe_mag =
n < lowcut ? 1.f : .5f*(1.f+
cosf(
M_PI*(lowcut-
n)/(lowcut-highcut)));
350 *lfe_mag *= *mag_total;
352 *mag_total -= *lfe_mag;
369 dst = (
float *)
s->output->extended_data[0];
371 mag =
powf(1.
f - fabsf(x),
s->fc_x) *
powf((y + 1.
f) * .5f,
s->fc_y) * mag_total;
373 dst[2 *
n ] = mag *
cosf(c_phase);
374 dst[2 *
n + 1] = mag *
sinf(c_phase);
386 float l_mag, r_mag, *dstl, *dstr;
388 dstl = (
float *)
s->output->extended_data[0];
389 dstr = (
float *)
s->output->extended_data[1];
391 l_mag =
powf(.5
f * ( x + 1.
f),
s->fl_x) *
powf((y + 1.
f) * .5
f,
s->fl_y) * mag_total;
392 r_mag =
powf(.5
f * (-x + 1.
f),
s->fr_x) *
powf((y + 1.
f) * .5
f,
s->fr_y) * mag_total;
394 dstl[2 *
n ] = l_mag *
cosf(l_phase);
395 dstl[2 *
n + 1] = l_mag *
sinf(l_phase);
397 dstr[2 *
n ] = r_mag *
cosf(r_phase);
398 dstr[2 *
n + 1] = r_mag *
sinf(r_phase);
410 float lfe_mag, l_mag, r_mag, *dstl, *dstr, *dstlfe;
412 dstl = (
float *)
s->output->extended_data[0];
413 dstr = (
float *)
s->output->extended_data[1];
414 dstlfe = (
float *)
s->output->extended_data[2];
416 get_lfe(
s->output_lfe,
n,
s->lowcut,
s->highcut, &lfe_mag, &mag_total,
s->lfe_mode);
418 l_mag =
powf(.5
f * ( x + 1.
f),
s->fl_x) *
powf((y + 1.
f) * .5
f,
s->fl_y) * mag_total;
419 r_mag =
powf(.5
f * (-x + 1.
f),
s->fr_x) *
powf((y + 1.
f) * .5
f,
s->fr_y) * mag_total;
421 dstl[2 *
n ] = l_mag *
cosf(l_phase);
422 dstl[2 *
n + 1] = l_mag *
sinf(l_phase);
424 dstr[2 *
n ] = r_mag *
cosf(r_phase);
425 dstr[2 *
n + 1] = r_mag *
sinf(r_phase);
427 dstlfe[2 *
n ] = lfe_mag *
cosf(c_phase);
428 dstlfe[2 *
n + 1] = lfe_mag *
sinf(c_phase);
440 float l_mag, r_mag, c_mag, *dstc, *dstl, *dstr;
442 dstl = (
float *)
s->output->extended_data[0];
443 dstr = (
float *)
s->output->extended_data[1];
444 dstc = (
float *)
s->output->extended_data[2];
446 c_mag =
powf(1.
f - fabsf(x),
s->fc_x) *
powf((y + 1.
f) * .5f,
s->fc_y) * mag_total;
447 l_mag =
powf(.5
f * ( x + 1.
f),
s->fl_x) *
powf((y + 1.
f) * .5
f,
s->fl_y) * mag_total;
448 r_mag =
powf(.5
f * (-x + 1.
f),
s->fr_x) *
powf((y + 1.
f) * .5
f,
s->fr_y) * mag_total;
450 dstl[2 *
n ] = l_mag *
cosf(l_phase);
451 dstl[2 *
n + 1] = l_mag *
sinf(l_phase);
453 dstr[2 *
n ] = r_mag *
cosf(r_phase);
454 dstr[2 *
n + 1] = r_mag *
sinf(r_phase);
456 dstc[2 *
n ] = c_mag *
cosf(c_phase);
457 dstc[2 *
n + 1] = c_mag *
sinf(c_phase);
469 float lfe_mag, l_mag, r_mag, c_mag, *dstc, *dstl, *dstr, *dstlfe;
471 dstl = (
float *)
s->output->extended_data[0];
472 dstr = (
float *)
s->output->extended_data[1];
473 dstc = (
float *)
s->output->extended_data[2];
474 dstlfe = (
float *)
s->output->extended_data[3];
476 get_lfe(
s->output_lfe,
n,
s->lowcut,
s->highcut, &lfe_mag, &mag_total,
s->lfe_mode);
478 c_mag =
powf(1.
f - fabsf(x),
s->fc_x) *
powf((y + 1.
f) * .5
f,
s->fc_y) * mag_total;
479 l_mag =
powf(.5
f * ( x + 1.
f),
s->fl_x) *
powf((y + 1.
f) * .5
f,
s->fl_y) * mag_total;
480 r_mag =
powf(.5
f * (-x + 1.
f),
s->fr_x) *
powf((y + 1.
f) * .5
f,
s->fr_y) * mag_total;
482 dstl[2 *
n ] = l_mag *
cosf(l_phase);
483 dstl[2 *
n + 1] = l_mag *
sinf(l_phase);
485 dstr[2 *
n ] = r_mag *
cosf(r_phase);
486 dstr[2 *
n + 1] = r_mag *
sinf(r_phase);
488 dstc[2 *
n ] = c_mag *
cosf(c_phase);
489 dstc[2 *
n + 1] = c_mag *
sinf(c_phase);
491 dstlfe[2 *
n ] = lfe_mag *
cosf(c_phase);
492 dstlfe[2 *
n + 1] = lfe_mag *
sinf(c_phase);
505 float lfe_mag, l_mag, r_mag, *dstc, *dstl, *dstr, *dstlfe;
507 dstl = (
float *)
s->output->extended_data[0];
508 dstr = (
float *)
s->output->extended_data[1];
509 dstc = (
float *)
s->output->extended_data[2];
510 dstlfe = (
float *)
s->output->extended_data[3];
512 get_lfe(
s->output_lfe,
n,
s->lowcut,
s->highcut, &lfe_mag, &c_mag,
s->lfe_mode);
514 l_mag =
powf(.5
f * ( x + 1.
f),
s->fl_x) *
powf((y + 1.
f) * .5
f,
s->fl_y) * mag_total;
515 r_mag =
powf(.5
f * (-x + 1.
f),
s->fr_x) *
powf((y + 1.
f) * .5
f,
s->fr_y) * mag_total;
517 dstl[2 *
n ] = l_mag *
cosf(l_phase);
518 dstl[2 *
n + 1] = l_mag *
sinf(l_phase);
520 dstr[2 *
n ] = r_mag *
cosf(r_phase);
521 dstr[2 *
n + 1] = r_mag *
sinf(r_phase);
523 dstc[2 *
n ] = c_mag *
cosf(c_phase);
524 dstc[2 *
n + 1] = c_mag *
sinf(c_phase);
526 dstlfe[2 *
n ] = lfe_mag *
cosf(c_phase);
527 dstlfe[2 *
n + 1] = lfe_mag *
sinf(c_phase);
539 float b_mag, l_mag, r_mag, c_mag, *dstc, *dstl, *dstr, *dstb;
541 dstl = (
float *)
s->output->extended_data[0];
542 dstr = (
float *)
s->output->extended_data[1];
543 dstc = (
float *)
s->output->extended_data[2];
544 dstb = (
float *)
s->output->extended_data[3];
546 c_mag =
powf(1.
f - fabsf(x),
s->fc_x) *
powf((y + 1.
f) * .5
f,
s->fc_y) * mag_total;
547 b_mag =
powf(1.
f - fabsf(x),
s->bc_x) *
powf((1.
f - y) * .5
f,
s->bc_y) * mag_total;
548 l_mag =
powf(.5
f * ( x + 1.
f),
s->fl_x) *
powf((y + 1.
f) * .5
f,
s->fl_y) * mag_total;
549 r_mag =
powf(.5
f * (-x + 1.
f),
s->fr_x) *
powf((y + 1.
f) * .5
f,
s->fr_y) * mag_total;
551 dstl[2 *
n ] = l_mag *
cosf(l_phase);
552 dstl[2 *
n + 1] = l_mag *
sinf(l_phase);
554 dstr[2 *
n ] = r_mag *
cosf(r_phase);
555 dstr[2 *
n + 1] = r_mag *
sinf(r_phase);
557 dstc[2 *
n ] = c_mag *
cosf(c_phase);
558 dstc[2 *
n + 1] = c_mag *
sinf(c_phase);
560 dstb[2 *
n ] = b_mag *
cosf(c_phase);
561 dstb[2 *
n + 1] = b_mag *
sinf(c_phase);
573 float lfe_mag, b_mag, l_mag, r_mag, c_mag, *dstc, *dstl, *dstr, *dstb, *dstlfe;
575 dstl = (
float *)
s->output->extended_data[0];
576 dstr = (
float *)
s->output->extended_data[1];
577 dstc = (
float *)
s->output->extended_data[2];
578 dstlfe = (
float *)
s->output->extended_data[3];
579 dstb = (
float *)
s->output->extended_data[4];
581 get_lfe(
s->output_lfe,
n,
s->lowcut,
s->highcut, &lfe_mag, &mag_total,
s->lfe_mode);
583 dstlfe[2 *
n ] = lfe_mag *
cosf(c_phase);
584 dstlfe[2 *
n + 1] = lfe_mag *
sinf(c_phase);
586 c_mag =
powf(1.
f - fabsf(x),
s->fc_x) *
powf((y + 1.
f) * .5
f,
s->fc_y) * mag_total;
587 b_mag =
powf(1.
f - fabsf(x),
s->bc_x) *
powf((1.
f - y) * .5
f,
s->bc_y) * mag_total;
588 l_mag =
powf(.5
f * ( x + 1.
f),
s->fl_x) *
powf((y + 1.
f) * .5
f,
s->fl_y) * mag_total;
589 r_mag =
powf(.5
f * (-x + 1.
f),
s->fr_x) *
powf((y + 1.
f) * .5
f,
s->fr_y) * mag_total;
591 dstl[2 *
n ] = l_mag *
cosf(l_phase);
592 dstl[2 *
n + 1] = l_mag *
sinf(l_phase);
594 dstr[2 *
n ] = r_mag *
cosf(r_phase);
595 dstr[2 *
n + 1] = r_mag *
sinf(r_phase);
597 dstc[2 *
n ] = c_mag *
cosf(c_phase);
598 dstc[2 *
n + 1] = c_mag *
sinf(c_phase);
600 dstb[2 *
n ] = b_mag *
cosf(c_phase);
601 dstb[2 *
n + 1] = b_mag *
sinf(c_phase);
613 float l_mag, r_mag, ls_mag, rs_mag, c_mag, *dstc, *dstl, *dstr, *dstls, *dstrs;
615 dstl = (
float *)
s->output->extended_data[0];
616 dstr = (
float *)
s->output->extended_data[1];
617 dstc = (
float *)
s->output->extended_data[2];
618 dstls = (
float *)
s->output->extended_data[3];
619 dstrs = (
float *)
s->output->extended_data[4];
621 c_mag =
powf(1.
f - fabsf(x),
s->fc_x) *
powf((y + 1.
f) * .5f,
s->fc_y) * mag_total;
622 l_mag =
powf(.5
f * ( x + 1.
f),
s->fl_x) *
powf((y + 1.
f) * .5
f,
s->fl_y) * mag_total;
623 r_mag =
powf(.5
f * (-x + 1.
f),
s->fr_x) *
powf((y + 1.
f) * .5
f,
s->fr_y) * mag_total;
624 ls_mag =
powf(.5
f * ( x + 1.
f),
s->bl_x) *
powf(1.
f - ((y + 1.
f) * .5
f),
s->bl_y) * mag_total;
625 rs_mag =
powf(.5
f * (-x + 1.
f),
s->br_x) *
powf(1.
f - ((y + 1.
f) * .5
f),
s->br_y) * mag_total;
627 dstl[2 *
n ] = l_mag *
cosf(l_phase);
628 dstl[2 *
n + 1] = l_mag *
sinf(l_phase);
630 dstr[2 *
n ] = r_mag *
cosf(r_phase);
631 dstr[2 *
n + 1] = r_mag *
sinf(r_phase);
633 dstc[2 *
n ] = c_mag *
cosf(c_phase);
634 dstc[2 *
n + 1] = c_mag *
sinf(c_phase);
636 dstls[2 *
n ] = ls_mag *
cosf(l_phase);
637 dstls[2 *
n + 1] = ls_mag *
sinf(l_phase);
639 dstrs[2 *
n ] = rs_mag *
cosf(r_phase);
640 dstrs[2 *
n + 1] = rs_mag *
sinf(r_phase);
652 float lfe_mag, l_mag, r_mag, ls_mag, rs_mag, c_mag, *dstc, *dstl, *dstr, *dstls, *dstrs, *dstlfe;
654 dstl = (
float *)
s->output->extended_data[0];
655 dstr = (
float *)
s->output->extended_data[1];
656 dstc = (
float *)
s->output->extended_data[2];
657 dstlfe = (
float *)
s->output->extended_data[3];
658 dstls = (
float *)
s->output->extended_data[4];
659 dstrs = (
float *)
s->output->extended_data[5];
661 get_lfe(
s->output_lfe,
n,
s->lowcut,
s->highcut, &lfe_mag, &mag_total,
s->lfe_mode);
663 c_mag =
powf(1.
f - fabsf(x),
s->fc_x) *
powf((y + 1.
f) * .5
f,
s->fc_y) * mag_total;
664 l_mag =
powf(.5
f * ( x + 1.
f),
s->fl_x) *
powf((y + 1.
f) * .5
f,
s->fl_y) * mag_total;
665 r_mag =
powf(.5
f * (-x + 1.
f),
s->fr_x) *
powf((y + 1.
f) * .5
f,
s->fr_y) * mag_total;
666 ls_mag =
powf(.5
f * ( x + 1.
f),
s->bl_x) *
powf(1.
f - ((y + 1.
f) * .5
f),
s->bl_y) * mag_total;
667 rs_mag =
powf(.5
f * (-x + 1.
f),
s->br_x) *
powf(1.
f - ((y + 1.
f) * .5
f),
s->br_y) * mag_total;
669 dstl[2 *
n ] = l_mag *
cosf(l_phase);
670 dstl[2 *
n + 1] = l_mag *
sinf(l_phase);
672 dstr[2 *
n ] = r_mag *
cosf(r_phase);
673 dstr[2 *
n + 1] = r_mag *
sinf(r_phase);
675 dstc[2 *
n ] = c_mag *
cosf(c_phase);
676 dstc[2 *
n + 1] = c_mag *
sinf(c_phase);
678 dstlfe[2 *
n ] = lfe_mag *
cosf(c_phase);
679 dstlfe[2 *
n + 1] = lfe_mag *
sinf(c_phase);
681 dstls[2 *
n ] = ls_mag *
cosf(l_phase);
682 dstls[2 *
n + 1] = ls_mag *
sinf(l_phase);
684 dstrs[2 *
n ] = rs_mag *
cosf(r_phase);
685 dstrs[2 *
n + 1] = rs_mag *
sinf(r_phase);
697 float l_mag, r_mag, ls_mag, rs_mag, c_mag, b_mag, *dstc, *dstb, *dstl, *dstr, *dstls, *dstrs;
699 dstl = (
float *)
s->output->extended_data[0];
700 dstr = (
float *)
s->output->extended_data[1];
701 dstc = (
float *)
s->output->extended_data[2];
702 dstb = (
float *)
s->output->extended_data[3];
703 dstls = (
float *)
s->output->extended_data[4];
704 dstrs = (
float *)
s->output->extended_data[5];
706 c_mag =
powf(1.
f - fabsf(x),
s->fc_x) *
powf((y + 1.
f) * .5
f,
s->fc_y) * mag_total;
707 b_mag =
powf(1.
f - fabsf(x),
s->bc_x) *
powf((1.
f - y) * .5
f,
s->bc_y) * mag_total;
708 l_mag =
powf(.5
f * ( x + 1.
f),
s->fl_x) *
powf((y + 1.
f) * .5
f,
s->fl_y) * mag_total;
709 r_mag =
powf(.5
f * (-x + 1.
f),
s->fr_x) *
powf((y + 1.
f) * .5
f,
s->fr_y) * mag_total;
710 ls_mag =
powf(.5
f * ( x + 1.
f),
s->bl_x) *
powf(1.
f - ((y + 1.
f) * .5
f),
s->bl_y) * mag_total;
711 rs_mag =
powf(.5
f * (-x + 1.
f),
s->br_x) *
powf(1.
f - ((y + 1.
f) * .5
f),
s->br_y) * mag_total;
713 dstl[2 *
n ] = l_mag *
cosf(l_phase);
714 dstl[2 *
n + 1] = l_mag *
sinf(l_phase);
716 dstr[2 *
n ] = r_mag *
cosf(r_phase);
717 dstr[2 *
n + 1] = r_mag *
sinf(r_phase);
719 dstc[2 *
n ] = c_mag *
cosf(c_phase);
720 dstc[2 *
n + 1] = c_mag *
sinf(c_phase);
722 dstls[2 *
n ] = ls_mag *
cosf(l_phase);
723 dstls[2 *
n + 1] = ls_mag *
sinf(l_phase);
725 dstrs[2 *
n ] = rs_mag *
cosf(r_phase);
726 dstrs[2 *
n + 1] = rs_mag *
sinf(r_phase);
728 dstb[2 *
n ] = b_mag *
cosf(c_phase);
729 dstb[2 *
n + 1] = b_mag *
sinf(c_phase);
741 float lfe_mag, l_mag, r_mag, ls_mag, rs_mag, c_mag, b_mag, *dstc, *dstb, *dstl, *dstr, *dstls, *dstrs, *dstlfe;
743 dstl = (
float *)
s->output->extended_data[0];
744 dstr = (
float *)
s->output->extended_data[1];
745 dstc = (
float *)
s->output->extended_data[2];
746 dstlfe = (
float *)
s->output->extended_data[3];
747 dstb = (
float *)
s->output->extended_data[4];
748 dstls = (
float *)
s->output->extended_data[5];
749 dstrs = (
float *)
s->output->extended_data[6];
751 get_lfe(
s->output_lfe,
n,
s->lowcut,
s->highcut, &lfe_mag, &mag_total,
s->lfe_mode);
753 c_mag =
powf(1.
f - fabsf(x),
s->fc_x) *
powf((y + 1.
f) * .5
f,
s->fc_y) * mag_total;
754 b_mag =
powf(1.
f - fabsf(x),
s->bc_x) *
powf((1.
f - y) * .5
f,
s->bc_y) * mag_total;
755 l_mag =
powf(.5
f * ( x + 1.
f),
s->fl_x) *
powf((y + 1.
f) * .5
f,
s->fl_y) * mag_total;
756 r_mag =
powf(.5
f * (-x + 1.
f),
s->fr_x) *
powf((y + 1.
f) * .5
f,
s->fr_y) * mag_total;
757 ls_mag =
powf(.5
f * ( x + 1.
f),
s->bl_x) *
powf(1.
f - ((y + 1.
f) * .5
f),
s->bl_y) * mag_total;
758 rs_mag =
powf(.5
f * (-x + 1.
f),
s->br_x) *
powf(1.
f - ((y + 1.
f) * .5
f),
s->br_y) * mag_total;
760 dstl[2 *
n ] = l_mag *
cosf(l_phase);
761 dstl[2 *
n + 1] = l_mag *
sinf(l_phase);
763 dstr[2 *
n ] = r_mag *
cosf(r_phase);
764 dstr[2 *
n + 1] = r_mag *
sinf(r_phase);
766 dstc[2 *
n ] = c_mag *
cosf(c_phase);
767 dstc[2 *
n + 1] = c_mag *
sinf(c_phase);
769 dstlfe[2 *
n ] = lfe_mag *
cosf(c_phase);
770 dstlfe[2 *
n + 1] = lfe_mag *
sinf(c_phase);
772 dstls[2 *
n ] = ls_mag *
cosf(l_phase);
773 dstls[2 *
n + 1] = ls_mag *
sinf(l_phase);
775 dstrs[2 *
n ] = rs_mag *
cosf(r_phase);
776 dstrs[2 *
n + 1] = rs_mag *
sinf(r_phase);
778 dstb[2 *
n ] = b_mag *
cosf(c_phase);
779 dstb[2 *
n + 1] = b_mag *
sinf(c_phase);
792 float lfe_mag, l_mag, r_mag, *dstc, *dstl, *dstr, *dstlfe;
793 float ls_mag, rs_mag, *dstls, *dstrs;
795 dstl = (
float *)
s->output->extended_data[0];
796 dstr = (
float *)
s->output->extended_data[1];
797 dstc = (
float *)
s->output->extended_data[2];
798 dstlfe = (
float *)
s->output->extended_data[3];
799 dstls = (
float *)
s->output->extended_data[4];
800 dstrs = (
float *)
s->output->extended_data[5];
802 get_lfe(
s->output_lfe,
n,
s->lowcut,
s->highcut, &lfe_mag, &c_mag,
s->lfe_mode);
804 l_mag =
powf(.5
f * ( x + 1.
f),
s->fl_x) *
powf((y + 1.
f) * .5
f,
s->fl_y) * mag_total;
805 r_mag =
powf(.5
f * (-x + 1.
f),
s->fr_x) *
powf((y + 1.
f) * .5
f,
s->fr_y) * mag_total;
806 ls_mag =
powf(.5
f * ( x + 1.
f),
s->bl_x) *
powf(1.
f - ((y + 1.
f) * .5
f),
s->bl_y) * mag_total;
807 rs_mag =
powf(.5
f * (-x + 1.
f),
s->br_x) *
powf(1.
f - ((y + 1.
f) * .5
f),
s->br_y) * mag_total;
809 dstl[2 *
n ] = l_mag *
cosf(l_phase);
810 dstl[2 *
n + 1] = l_mag *
sinf(l_phase);
812 dstr[2 *
n ] = r_mag *
cosf(r_phase);
813 dstr[2 *
n + 1] = r_mag *
sinf(r_phase);
815 dstc[2 *
n ] = c_mag *
cosf(c_phase);
816 dstc[2 *
n + 1] = c_mag *
sinf(c_phase);
818 dstlfe[2 *
n ] = lfe_mag *
cosf(c_phase);
819 dstlfe[2 *
n + 1] = lfe_mag *
sinf(c_phase);
821 dstls[2 *
n ] = ls_mag *
cosf(l_phase);
822 dstls[2 *
n + 1] = ls_mag *
sinf(l_phase);
824 dstrs[2 *
n ] = rs_mag *
cosf(r_phase);
825 dstrs[2 *
n + 1] = rs_mag *
sinf(r_phase);
839 float c_mag, l_mag, r_mag, *dstc, *dstl, *dstr, *dstlfe;
840 float ls_mag, rs_mag, *dstls, *dstrs;
842 dstl = (
float *)
s->output->extended_data[0];
843 dstr = (
float *)
s->output->extended_data[1];
844 dstc = (
float *)
s->output->extended_data[2];
845 dstlfe = (
float *)
s->output->extended_data[3];
846 dstls = (
float *)
s->output->extended_data[4];
847 dstrs = (
float *)
s->output->extended_data[5];
849 c_mag =
powf(1.
f - fabsf(x),
s->fc_x) *
powf((y + 1.
f) * .5
f,
s->fc_y) * mag_total;
850 l_mag =
powf(.5
f * ( x + 1.
f),
s->fl_x) *
powf((y + 1.
f) * .5
f,
s->fl_y) * mag_total;
851 r_mag =
powf(.5
f * (-x + 1.
f),
s->fr_x) *
powf((y + 1.
f) * .5
f,
s->fr_y) * mag_total;
852 ls_mag =
powf(.5
f * ( x + 1.
f),
s->bl_x) *
powf(1.
f - ((y + 1.
f) * .5
f),
s->bl_y) * mag_total;
853 rs_mag =
powf(.5
f * (-x + 1.
f),
s->br_x) *
powf(1.
f - ((y + 1.
f) * .5
f),
s->br_y) * mag_total;
855 dstl[2 *
n ] = l_mag *
cosf(l_phase);
856 dstl[2 *
n + 1] = l_mag *
sinf(l_phase);
858 dstr[2 *
n ] = r_mag *
cosf(r_phase);
859 dstr[2 *
n + 1] = r_mag *
sinf(r_phase);
861 dstc[2 *
n ] = c_mag *
cosf(c_phase);
862 dstc[2 *
n + 1] = c_mag *
sinf(c_phase);
864 dstlfe[2 *
n ] = lfe_re;
865 dstlfe[2 *
n + 1] = lfe_im;
867 dstls[2 *
n ] = ls_mag *
cosf(l_phase);
868 dstls[2 *
n + 1] = ls_mag *
sinf(l_phase);
870 dstrs[2 *
n ] = rs_mag *
cosf(r_phase);
871 dstrs[2 *
n + 1] = rs_mag *
sinf(r_phase);
882 float l_mag, r_mag, ls_mag, rs_mag, c_mag, lb_mag, rb_mag;
883 float *dstc, *dstl, *dstr, *dstls, *dstrs, *dstlb, *dstrb;
886 dstl = (
float *)
s->output->extended_data[0];
887 dstr = (
float *)
s->output->extended_data[1];
888 dstc = (
float *)
s->output->extended_data[2];
889 dstlb = (
float *)
s->output->extended_data[3];
890 dstrb = (
float *)
s->output->extended_data[4];
891 dstls = (
float *)
s->output->extended_data[5];
892 dstrs = (
float *)
s->output->extended_data[6];
894 c_mag =
powf(1.
f - fabsf(x),
s->fc_x) *
powf((y + 1.
f) * .5f,
s->fc_y) * mag_total;
895 l_mag =
powf(.5
f * ( x + 1.
f),
s->fl_x) *
powf((y + 1.
f) * .5
f,
s->fl_y) * mag_total;
896 r_mag =
powf(.5
f * (-x + 1.
f),
s->fr_x) *
powf((y + 1.
f) * .5
f,
s->fr_y) * mag_total;
897 lb_mag =
powf(.5
f * ( x + 1.
f),
s->bl_x) *
powf(1.
f - ((y + 1.
f) * .5
f),
s->bl_y) * mag_total;
898 rb_mag =
powf(.5
f * (-x + 1.
f),
s->br_x) *
powf(1.
f - ((y + 1.
f) * .5
f),
s->br_y) * mag_total;
899 ls_mag =
powf(.5
f * ( x + 1.
f),
s->sl_x) *
powf(1.
f - fabsf(y),
s->sl_y) * mag_total;
900 rs_mag =
powf(.5
f * (-x + 1.
f),
s->sr_x) *
powf(1.
f - fabsf(y),
s->sr_y) * mag_total;
902 dstl[2 *
n ] = l_mag *
cosf(l_phase);
903 dstl[2 *
n + 1] = l_mag *
sinf(l_phase);
905 dstr[2 *
n ] = r_mag *
cosf(r_phase);
906 dstr[2 *
n + 1] = r_mag *
sinf(r_phase);
908 dstc[2 *
n ] = c_mag *
cosf(c_phase);
909 dstc[2 *
n + 1] = c_mag *
sinf(c_phase);
911 dstlb[2 *
n ] = lb_mag *
cosf(l_phase);
912 dstlb[2 *
n + 1] = lb_mag *
sinf(l_phase);
914 dstrb[2 *
n ] = rb_mag *
cosf(r_phase);
915 dstrb[2 *
n + 1] = rb_mag *
sinf(r_phase);
917 dstls[2 *
n ] = ls_mag *
cosf(l_phase);
918 dstls[2 *
n + 1] = ls_mag *
sinf(l_phase);
920 dstrs[2 *
n ] = rs_mag *
cosf(r_phase);
921 dstrs[2 *
n + 1] = rs_mag *
sinf(r_phase);
932 float lfe_mag, l_mag, r_mag, ls_mag, rs_mag, c_mag, lb_mag, rb_mag;
933 float *dstc, *dstl, *dstr, *dstls, *dstrs, *dstlb, *dstrb, *dstlfe;
936 dstl = (
float *)
s->output->extended_data[0];
937 dstr = (
float *)
s->output->extended_data[1];
938 dstc = (
float *)
s->output->extended_data[2];
939 dstlfe = (
float *)
s->output->extended_data[3];
940 dstlb = (
float *)
s->output->extended_data[4];
941 dstrb = (
float *)
s->output->extended_data[5];
942 dstls = (
float *)
s->output->extended_data[6];
943 dstrs = (
float *)
s->output->extended_data[7];
945 get_lfe(
s->output_lfe,
n,
s->lowcut,
s->highcut, &lfe_mag, &mag_total,
s->lfe_mode);
947 c_mag =
powf(1.
f - fabsf(x),
s->fc_x) *
powf((y + 1.
f) * .5
f,
s->fc_y) * mag_total;
948 l_mag =
powf(.5
f * ( x + 1.
f),
s->fl_x) *
powf((y + 1.
f) * .5
f,
s->fl_y) * mag_total;
949 r_mag =
powf(.5
f * (-x + 1.
f),
s->fr_x) *
powf((y + 1.
f) * .5
f,
s->fr_y) * mag_total;
950 lb_mag =
powf(.5
f * ( x + 1.
f),
s->bl_x) *
powf(1.
f - ((y + 1.
f) * .5
f),
s->bl_y) * mag_total;
951 rb_mag =
powf(.5
f * (-x + 1.
f),
s->br_x) *
powf(1.
f - ((y + 1.
f) * .5
f),
s->br_y) * mag_total;
952 ls_mag =
powf(.5
f * ( x + 1.
f),
s->sl_x) *
powf(1.
f - fabsf(y),
s->sl_y) * mag_total;
953 rs_mag =
powf(.5
f * (-x + 1.
f),
s->sr_x) *
powf(1.
f - fabsf(y),
s->sr_y) * mag_total;
955 dstl[2 *
n ] = l_mag *
cosf(l_phase);
956 dstl[2 *
n + 1] = l_mag *
sinf(l_phase);
958 dstr[2 *
n ] = r_mag *
cosf(r_phase);
959 dstr[2 *
n + 1] = r_mag *
sinf(r_phase);
961 dstc[2 *
n ] = c_mag *
cosf(c_phase);
962 dstc[2 *
n + 1] = c_mag *
sinf(c_phase);
964 dstlfe[2 *
n ] = lfe_mag *
cosf(c_phase);
965 dstlfe[2 *
n + 1] = lfe_mag *
sinf(c_phase);
967 dstlb[2 *
n ] = lb_mag *
cosf(l_phase);
968 dstlb[2 *
n + 1] = lb_mag *
sinf(l_phase);
970 dstrb[2 *
n ] = rb_mag *
cosf(r_phase);
971 dstrb[2 *
n + 1] = rb_mag *
sinf(r_phase);
973 dstls[2 *
n ] = ls_mag *
cosf(l_phase);
974 dstls[2 *
n + 1] = ls_mag *
sinf(l_phase);
976 dstrs[2 *
n ] = rs_mag *
cosf(r_phase);
977 dstrs[2 *
n + 1] = rs_mag *
sinf(r_phase);
981 float c_re,
float c_im,
982 float mag_totall,
float mag_totalr,
983 float fl_phase,
float fr_phase,
984 float bl_phase,
float br_phase,
985 float sl_phase,
float sr_phase,
990 float fl_mag, fr_mag, ls_mag, rs_mag, lb_mag, rb_mag;
991 float *dstc, *dstl, *dstr, *dstls, *dstrs, *dstlb, *dstrb, *dstlfe;
992 float lfe_mag, c_phase, mag_total = (mag_totall + mag_totalr) * 0.5;
995 dstl = (
float *)
s->output->extended_data[0];
996 dstr = (
float *)
s->output->extended_data[1];
997 dstc = (
float *)
s->output->extended_data[2];
998 dstlfe = (
float *)
s->output->extended_data[3];
999 dstlb = (
float *)
s->output->extended_data[4];
1000 dstrb = (
float *)
s->output->extended_data[5];
1001 dstls = (
float *)
s->output->extended_data[6];
1002 dstrs = (
float *)
s->output->extended_data[7];
1004 c_phase =
atan2f(c_im, c_re);
1006 get_lfe(
s->output_lfe,
n,
s->lowcut,
s->highcut, &lfe_mag, &mag_total,
s->lfe_mode);
1008 fl_mag =
powf(.5
f * (xl + 1.
f),
s->fl_x) *
powf((yl + 1.
f) * .5
f,
s->fl_y) * mag_totall;
1009 fr_mag =
powf(.5
f * (xr + 1.
f),
s->fr_x) *
powf((yr + 1.
f) * .5
f,
s->fr_y) * mag_totalr;
1010 lb_mag =
powf(.5
f * (-xl + 1.
f),
s->bl_x) *
powf((yl + 1.
f) * .5
f,
s->bl_y) * mag_totall;
1011 rb_mag =
powf(.5
f * (-xr + 1.
f),
s->br_x) *
powf((yr + 1.
f) * .5
f,
s->br_y) * mag_totalr;
1012 ls_mag =
powf(1.
f - fabsf(xl),
s->sl_x) *
powf((yl + 1.
f) * .5
f,
s->sl_y) * mag_totall;
1013 rs_mag =
powf(1.
f - fabsf(xr),
s->sr_x) *
powf((yr + 1.
f) * .5
f,
s->sr_y) * mag_totalr;
1015 dstl[2 *
n ] = fl_mag *
cosf(fl_phase);
1016 dstl[2 *
n + 1] = fl_mag *
sinf(fl_phase);
1018 dstr[2 *
n ] = fr_mag *
cosf(fr_phase);
1019 dstr[2 *
n + 1] = fr_mag *
sinf(fr_phase);
1021 dstc[2 *
n ] = c_re;
1022 dstc[2 *
n + 1] = c_im;
1024 dstlfe[2 *
n ] = lfe_mag *
cosf(c_phase);
1025 dstlfe[2 *
n + 1] = lfe_mag *
sinf(c_phase);
1027 dstlb[2 *
n ] = lb_mag *
cosf(bl_phase);
1028 dstlb[2 *
n + 1] = lb_mag *
sinf(bl_phase);
1030 dstrb[2 *
n ] = rb_mag *
cosf(br_phase);
1031 dstrb[2 *
n + 1] = rb_mag *
sinf(br_phase);
1033 dstls[2 *
n ] = ls_mag *
cosf(sl_phase);
1034 dstls[2 *
n + 1] = ls_mag *
sinf(sl_phase);
1036 dstrs[2 *
n ] = rs_mag *
cosf(sr_phase);
1037 dstrs[2 *
n + 1] = rs_mag *
sinf(sr_phase);
1041 float c_re,
float c_im,
1042 float lfe_re,
float lfe_im,
1043 float mag_totall,
float mag_totalr,
1044 float fl_phase,
float fr_phase,
1045 float bl_phase,
float br_phase,
1046 float sl_phase,
float sr_phase,
1051 float fl_mag, fr_mag, ls_mag, rs_mag, lb_mag, rb_mag;
1052 float *dstc, *dstl, *dstr, *dstls, *dstrs, *dstlb, *dstrb, *dstlfe;
1055 dstl = (
float *)
s->output->extended_data[0];
1056 dstr = (
float *)
s->output->extended_data[1];
1057 dstc = (
float *)
s->output->extended_data[2];
1058 dstlfe = (
float *)
s->output->extended_data[3];
1059 dstlb = (
float *)
s->output->extended_data[4];
1060 dstrb = (
float *)
s->output->extended_data[5];
1061 dstls = (
float *)
s->output->extended_data[6];
1062 dstrs = (
float *)
s->output->extended_data[7];
1064 fl_mag =
powf(.5
f * (xl + 1.
f),
s->fl_x) *
powf((yl + 1.
f) * .5
f,
s->fl_y) * mag_totall;
1065 fr_mag =
powf(.5
f * (xr + 1.
f),
s->fr_x) *
powf((yr + 1.
f) * .5
f,
s->fr_y) * mag_totalr;
1066 lb_mag =
powf(.5
f * (-xl + 1.
f),
s->bl_x) *
powf((yl + 1.
f) * .5
f,
s->bl_y) * mag_totall;
1067 rb_mag =
powf(.5
f * (-xr + 1.
f),
s->br_x) *
powf((yr + 1.
f) * .5
f,
s->br_y) * mag_totalr;
1068 ls_mag =
powf(1.
f - fabsf(xl),
s->sl_x) *
powf((yl + 1.
f) * .5
f,
s->sl_y) * mag_totall;
1069 rs_mag =
powf(1.
f - fabsf(xr),
s->sr_x) *
powf((yr + 1.
f) * .5
f,
s->sr_y) * mag_totalr;
1071 dstl[2 *
n ] = fl_mag *
cosf(fl_phase);
1072 dstl[2 *
n + 1] = fl_mag *
sinf(fl_phase);
1074 dstr[2 *
n ] = fr_mag *
cosf(fr_phase);
1075 dstr[2 *
n + 1] = fr_mag *
sinf(fr_phase);
1077 dstc[2 *
n ] = c_re;
1078 dstc[2 *
n + 1] = c_im;
1080 dstlfe[2 *
n ] = lfe_re;
1081 dstlfe[2 *
n + 1] = lfe_im;
1083 dstlb[2 *
n ] = lb_mag *
cosf(bl_phase);
1084 dstlb[2 *
n + 1] = lb_mag *
sinf(bl_phase);
1086 dstrb[2 *
n ] = rb_mag *
cosf(br_phase);
1087 dstrb[2 *
n + 1] = rb_mag *
sinf(br_phase);
1089 dstls[2 *
n ] = ls_mag *
cosf(sl_phase);
1090 dstls[2 *
n + 1] = ls_mag *
sinf(sl_phase);
1092 dstrs[2 *
n ] = rs_mag *
cosf(sr_phase);
1093 dstrs[2 *
n + 1] = rs_mag *
sinf(sr_phase);
1102 srcl = (
float *)
s->input->extended_data[0];
1103 srcr = (
float *)
s->input->extended_data[1];
1105 for (
n = 0;
n <
s->buf_size;
n++) {
1106 float l_re = srcl[2 *
n], r_re = srcr[2 *
n];
1107 float l_im = srcl[2 *
n + 1], r_im = srcr[2 *
n + 1];
1108 float c_phase =
atan2f(l_im + r_im, l_re + r_re);
1109 float l_mag = hypotf(l_re, l_im);
1110 float r_mag = hypotf(r_re, r_im);
1111 float l_phase =
atan2f(l_im, l_re);
1112 float r_phase =
atan2f(r_im, r_re);
1113 float phase_dif = fabsf(l_phase - r_phase);
1114 float mag_sum = l_mag + r_mag;
1115 float mag_dif = mag_sum < 0.000001 ?
FFDIFFSIGN(l_mag, r_mag) : (l_mag - r_mag) / mag_sum;
1116 float mag_total = hypotf(l_mag, r_mag);
1119 if (phase_dif >
M_PI)
1120 phase_dif = 2 *
M_PI - phase_dif;
1125 s->upmix_stereo(
ctx, l_phase, r_phase, c_phase, mag_total, x, y,
n);
1132 float *srcl, *srcr, *srcc;
1135 srcl = (
float *)
s->input->extended_data[0];
1136 srcr = (
float *)
s->input->extended_data[1];
1137 srcc = (
float *)
s->input->extended_data[2];
1139 for (
n = 0;
n <
s->buf_size;
n++) {
1140 float l_re = srcl[2 *
n], r_re = srcr[2 *
n];
1141 float l_im = srcl[2 *
n + 1], r_im = srcr[2 *
n + 1];
1142 float c_re = srcc[2 *
n], c_im = srcc[2 *
n + 1];
1143 float c_mag = hypotf(c_re, c_im);
1144 float c_phase =
atan2f(c_im, c_re);
1145 float l_mag = hypotf(l_re, l_im);
1146 float r_mag = hypotf(r_re, r_im);
1147 float l_phase =
atan2f(l_im, l_re);
1148 float r_phase =
atan2f(r_im, r_re);
1149 float phase_dif = fabsf(l_phase - r_phase);
1150 float mag_sum = l_mag + r_mag;
1151 float mag_dif = mag_sum < 0.000001 ?
FFDIFFSIGN(l_mag, r_mag) : (l_mag - r_mag) / mag_sum;
1152 float mag_total = hypotf(l_mag, r_mag);
1155 if (phase_dif >
M_PI)
1156 phase_dif = 2 *
M_PI - phase_dif;
1161 s->upmix_3_0(
ctx, l_phase, r_phase, c_phase, c_mag, mag_total, x, y,
n);
1168 float *srcl, *srcr, *srclfe;
1171 srcl = (
float *)
s->input->extended_data[0];
1172 srcr = (
float *)
s->input->extended_data[1];
1173 srclfe = (
float *)
s->input->extended_data[2];
1175 for (
n = 0;
n <
s->buf_size;
n++) {
1176 float l_re = srcl[2 *
n], r_re = srcr[2 *
n];
1177 float l_im = srcl[2 *
n + 1], r_im = srcr[2 *
n + 1];
1178 float lfe_re = srclfe[2 *
n], lfe_im = srclfe[2 *
n + 1];
1179 float c_phase =
atan2f(l_im + r_im, l_re + r_re);
1180 float l_mag = hypotf(l_re, l_im);
1181 float r_mag = hypotf(r_re, r_im);
1182 float l_phase =
atan2f(l_im, l_re);
1183 float r_phase =
atan2f(r_im, r_re);
1184 float phase_dif = fabsf(l_phase - r_phase);
1185 float mag_sum = l_mag + r_mag;
1186 float mag_dif = mag_sum < 0.000001 ?
FFDIFFSIGN(l_mag, r_mag) : (l_mag - r_mag) / mag_sum;
1187 float mag_total = hypotf(l_mag, r_mag);
1190 if (phase_dif >
M_PI)
1191 phase_dif = 2 *
M_PI - phase_dif;
1196 s->upmix_2_1(
ctx, l_phase, r_phase, c_phase, mag_total, lfe_re, lfe_im, x, y,
n);
1203 float *srcl, *srcr, *srcc, *srcsl, *srcsr;
1206 srcl = (
float *)
s->input->extended_data[0];
1207 srcr = (
float *)
s->input->extended_data[1];
1208 srcc = (
float *)
s->input->extended_data[2];
1209 srcsl = (
float *)
s->input->extended_data[3];
1210 srcsr = (
float *)
s->input->extended_data[4];
1212 for (
n = 0;
n <
s->buf_size;
n++) {
1213 float fl_re = srcl[2 *
n], fr_re = srcr[2 *
n];
1214 float fl_im = srcl[2 *
n + 1], fr_im = srcr[2 *
n + 1];
1215 float c_re = srcc[2 *
n], c_im = srcc[2 *
n + 1];
1216 float sl_re = srcsl[2 *
n], sl_im = srcsl[2 *
n + 1];
1217 float sr_re = srcsr[2 *
n], sr_im = srcsr[2 *
n + 1];
1218 float fl_mag = hypotf(fl_re, fl_im);
1219 float fr_mag = hypotf(fr_re, fr_im);
1220 float fl_phase =
atan2f(fl_im, fl_re);
1221 float fr_phase =
atan2f(fr_im, fr_re);
1222 float sl_mag = hypotf(sl_re, sl_im);
1223 float sr_mag = hypotf(sr_re, sr_im);
1224 float sl_phase =
atan2f(sl_im, sl_re);
1225 float sr_phase =
atan2f(sr_im, sr_re);
1226 float phase_difl = fabsf(fl_phase - sl_phase);
1227 float phase_difr = fabsf(fr_phase - sr_phase);
1228 float magl_sum = fl_mag + sl_mag;
1229 float magr_sum = fr_mag + sr_mag;
1230 float mag_difl = magl_sum < 0.000001 ?
FFDIFFSIGN(fl_mag, sl_mag) : (fl_mag - sl_mag) / magl_sum;
1231 float mag_difr = magr_sum < 0.000001 ?
FFDIFFSIGN(fr_mag, sr_mag) : (fr_mag - sr_mag) / magr_sum;
1232 float mag_totall = hypotf(fl_mag, sl_mag);
1233 float mag_totalr = hypotf(fr_mag, sr_mag);
1234 float bl_phase =
atan2f(fl_im + sl_im, fl_re + sl_re);
1235 float br_phase =
atan2f(fr_im + sr_im, fr_re + sr_re);
1239 if (phase_difl >
M_PI)
1240 phase_difl = 2 *
M_PI - phase_difl;
1242 if (phase_difr >
M_PI)
1243 phase_difr = 2 *
M_PI - phase_difr;
1248 s->upmix_5_0(
ctx, c_re, c_im,
1249 mag_totall, mag_totalr,
1260 float *srcl, *srcr, *srcc, *srclfe, *srcsl, *srcsr;
1263 srcl = (
float *)
s->input->extended_data[0];
1264 srcr = (
float *)
s->input->extended_data[1];
1265 srcc = (
float *)
s->input->extended_data[2];
1266 srclfe = (
float *)
s->input->extended_data[3];
1267 srcsl = (
float *)
s->input->extended_data[4];
1268 srcsr = (
float *)
s->input->extended_data[5];
1270 for (
n = 0;
n <
s->buf_size;
n++) {
1271 float fl_re = srcl[2 *
n], fr_re = srcr[2 *
n];
1272 float fl_im = srcl[2 *
n + 1], fr_im = srcr[2 *
n + 1];
1273 float c_re = srcc[2 *
n], c_im = srcc[2 *
n + 1];
1274 float lfe_re = srclfe[2 *
n], lfe_im = srclfe[2 *
n + 1];
1275 float sl_re = srcsl[2 *
n], sl_im = srcsl[2 *
n + 1];
1276 float sr_re = srcsr[2 *
n], sr_im = srcsr[2 *
n + 1];
1277 float fl_mag = hypotf(fl_re, fl_im);
1278 float fr_mag = hypotf(fr_re, fr_im);
1279 float fl_phase =
atan2f(fl_im, fl_re);
1280 float fr_phase =
atan2f(fr_im, fr_re);
1281 float sl_mag = hypotf(sl_re, sl_im);
1282 float sr_mag = hypotf(sr_re, sr_im);
1283 float sl_phase =
atan2f(sl_im, sl_re);
1284 float sr_phase =
atan2f(sr_im, sr_re);
1285 float phase_difl = fabsf(fl_phase - sl_phase);
1286 float phase_difr = fabsf(fr_phase - sr_phase);
1287 float magl_sum = fl_mag + sl_mag;
1288 float magr_sum = fr_mag + sr_mag;
1289 float mag_difl = magl_sum < 0.000001 ?
FFDIFFSIGN(fl_mag, sl_mag) : (fl_mag - sl_mag) / magl_sum;
1290 float mag_difr = magr_sum < 0.000001 ?
FFDIFFSIGN(fr_mag, sr_mag) : (fr_mag - sr_mag) / magr_sum;
1291 float mag_totall = hypotf(fl_mag, sl_mag);
1292 float mag_totalr = hypotf(fr_mag, sr_mag);
1293 float bl_phase =
atan2f(fl_im + sl_im, fl_re + sl_re);
1294 float br_phase =
atan2f(fr_im + sr_im, fr_re + sr_re);
1298 if (phase_difl >
M_PI)
1299 phase_difl = 2 *
M_PI - phase_difl;
1301 if (phase_difr >
M_PI)
1302 phase_difr = 2 *
M_PI - phase_difr;
1307 s->upmix_5_1(
ctx, c_re, c_im, lfe_re, lfe_im,
1308 mag_totall, mag_totalr,
1319 float *srcl, *srcr, *srcc, *srclfe, *srcbl, *srcbr;
1322 srcl = (
float *)
s->input->extended_data[0];
1323 srcr = (
float *)
s->input->extended_data[1];
1324 srcc = (
float *)
s->input->extended_data[2];
1325 srclfe = (
float *)
s->input->extended_data[3];
1326 srcbl = (
float *)
s->input->extended_data[4];
1327 srcbr = (
float *)
s->input->extended_data[5];
1329 for (
n = 0;
n <
s->buf_size;
n++) {
1330 float fl_re = srcl[2 *
n], fr_re = srcr[2 *
n];
1331 float fl_im = srcl[2 *
n + 1], fr_im = srcr[2 *
n + 1];
1332 float c_re = srcc[2 *
n], c_im = srcc[2 *
n + 1];
1333 float lfe_re = srclfe[2 *
n], lfe_im = srclfe[2 *
n + 1];
1334 float bl_re = srcbl[2 *
n], bl_im = srcbl[2 *
n + 1];
1335 float br_re = srcbr[2 *
n], br_im = srcbr[2 *
n + 1];
1336 float fl_mag = hypotf(fl_re, fl_im);
1337 float fr_mag = hypotf(fr_re, fr_im);
1338 float fl_phase =
atan2f(fl_im, fl_re);
1339 float fr_phase =
atan2f(fr_im, fr_re);
1340 float bl_mag = hypotf(bl_re, bl_im);
1341 float br_mag = hypotf(br_re, br_im);
1342 float bl_phase =
atan2f(bl_im, bl_re);
1343 float br_phase =
atan2f(br_im, br_re);
1344 float phase_difl = fabsf(fl_phase - bl_phase);
1345 float phase_difr = fabsf(fr_phase - br_phase);
1346 float magl_sum = fl_mag + bl_mag;
1347 float magr_sum = fr_mag + br_mag;
1348 float mag_difl = magl_sum < 0.000001 ?
FFDIFFSIGN(fl_mag, bl_mag) : (fl_mag - bl_mag) / magl_sum;
1349 float mag_difr = magr_sum < 0.000001 ?
FFDIFFSIGN(fr_mag, br_mag) : (fr_mag - br_mag) / magr_sum;
1350 float mag_totall = hypotf(fl_mag, bl_mag);
1351 float mag_totalr = hypotf(fr_mag, br_mag);
1352 float sl_phase =
atan2f(fl_im + bl_im, fl_re + bl_re);
1353 float sr_phase =
atan2f(fr_im + br_im, fr_re + br_re);
1357 if (phase_difl >
M_PI)
1358 phase_difl = 2 *
M_PI - phase_difl;
1360 if (phase_difr >
M_PI)
1361 phase_difr = 2 *
M_PI - phase_difr;
1366 s->upmix_5_1(
ctx, c_re, c_im, lfe_re, lfe_im,
1367 mag_totall, mag_totalr,
1383 s->out_channel_layout_str);
1389 s->in_channel_layout_str);
1393 if (
s->lowcutf >=
s->highcutf) {
1395 s->lowcutf,
s->highcutf);
1399 switch (
s->in_channel_layout) {
1402 switch (
s->out_channel_layout) {
1448 switch (
s->out_channel_layout) {
1458 switch (
s->out_channel_layout) {
1471 switch (
s->out_channel_layout) {
1481 switch (
s->out_channel_layout) {
1491 switch (
s->out_channel_layout) {
1502 s->in_channel_layout_str,
s->out_channel_layout_str);
1506 s->buf_size = 1 <<
av_log2(
s->win_size);
1509 s->window_func_lut =
av_calloc(
s->buf_size,
sizeof(*
s->window_func_lut));
1510 if (!
s->window_func_lut)
1514 if (
s->overlap == 1)
1515 s->overlap = overlap;
1517 for (
i = 0;
i <
s->buf_size;
i++)
1518 s->window_func_lut[
i] = sqrtf(
s->window_func_lut[
i] /
s->buf_size);
1519 s->hop_size =
s->buf_size * (1. -
s->overlap);
1520 if (
s->hop_size <= 0)
1523 if (
s->all_x >= 0.f)
1524 s->fc_x =
s->fl_x =
s->fr_x =
s->bc_x =
s->sl_x =
s->sr_x =
s->bl_x =
s->br_x =
s->all_x;
1525 if (
s->all_y >= 0.f)
1526 s->fc_y =
s->fl_y =
s->fr_y =
s->bc_y =
s->sl_y =
s->sr_y =
s->bl_y =
s->br_y =
s->all_y;
1534 const float level_in =
s->input_levels[
ch];
1538 memset(
s->input->extended_data[
ch] +
s->buf_size *
sizeof(
float), 0,
s->buf_size *
sizeof(
float));
1540 dst = (
float *)
s->input->extended_data[
ch];
1541 for (
n = 0;
n <
s->buf_size;
n++) {
1542 dst[
n] *=
s->window_func_lut[
n] * level_in;
1553 const float level_out =
s->output_levels[
ch];
1560 dst = (
float *)
s->output->extended_data[
ch];
1561 ptr = (
float *)
s->overlap_buffer->extended_data[
ch];
1563 memmove(
s->overlap_buffer->extended_data[
ch],
1564 s->overlap_buffer->extended_data[
ch] +
s->hop_size *
sizeof(
float),
1565 s->buf_size *
sizeof(
float));
1566 memset(
s->overlap_buffer->extended_data[
ch] +
s->buf_size *
sizeof(
float),
1567 0,
s->hop_size *
sizeof(
float));
1569 for (
n = 0;
n <
s->buf_size;
n++) {
1570 ptr[
n] += dst[
n] *
s->window_func_lut[
n] * level_out;
1573 ptr = (
float *)
s->overlap_buffer->extended_data[
ch];
1574 dst = (
float *)
out->extended_data[
ch];
1575 memcpy(dst, ptr,
s->hop_size *
sizeof(
float));
1676 for (
ch = 0;
ch <
s->nb_in_channels;
ch++) {
1679 for (
ch = 0;
ch <
s->nb_out_channels;
ch++) {
1690 #define OFFSET(x) offsetof(AudioSurroundContext, x)
1691 #define FLAGS AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
1793 .priv_class = &surround_class,