Build AsminVoicechat / prepare-release (push) Successful in 14s
Build AsminVoicechat / build-and-test (17) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (18) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (19) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (20) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (21) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (22) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (23) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (24) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (25) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (26) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (27-ea) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (16) (push) Canceled after 38s
297 lines
14 KiB
Java
297 lines
14 KiB
Java
/*
|
|
* Decompiled with CFR 0.152.
|
|
*/
|
|
package de.maxhenkel.voicechat.concentus;
|
|
|
|
import de.maxhenkel.voicechat.concentus.FFTState;
|
|
import de.maxhenkel.voicechat.concentus.Inlines;
|
|
|
|
class KissFFT {
|
|
static final int MAXFACTORS = 8;
|
|
|
|
KissFFT() {
|
|
}
|
|
|
|
static int S_MUL(int a, int b) {
|
|
return Inlines.MULT16_32_Q15(b, a);
|
|
}
|
|
|
|
static int S_MUL(int a, short b) {
|
|
return Inlines.MULT16_32_Q15(b, a);
|
|
}
|
|
|
|
static int HALF_OF(int x) {
|
|
return x >> 1;
|
|
}
|
|
|
|
static void kf_bfly2(int[] Fout, int fout_ptr, int m, int N) {
|
|
short tw = 23170;
|
|
Inlines.OpusAssert(m == 4);
|
|
for (int i = 0; i < N; ++i) {
|
|
int Fout2 = fout_ptr + 8;
|
|
int t_r = Fout[Fout2 + 0];
|
|
int t_i = Fout[Fout2 + 1];
|
|
Fout[Fout2 + 0] = Fout[fout_ptr + 0] - t_r;
|
|
Fout[Fout2 + 1] = Fout[fout_ptr + 1] - t_i;
|
|
int n = fout_ptr + 0;
|
|
Fout[n] = Fout[n] + t_r;
|
|
int n2 = fout_ptr + 1;
|
|
Fout[n2] = Fout[n2] + t_i;
|
|
t_r = KissFFT.S_MUL(Fout[Fout2 + 2] + Fout[Fout2 + 3], tw);
|
|
t_i = KissFFT.S_MUL(Fout[Fout2 + 3] - Fout[Fout2 + 2], tw);
|
|
Fout[Fout2 + 2] = Fout[fout_ptr + 2] - t_r;
|
|
Fout[Fout2 + 3] = Fout[fout_ptr + 3] - t_i;
|
|
int n3 = fout_ptr + 2;
|
|
Fout[n3] = Fout[n3] + t_r;
|
|
int n4 = fout_ptr + 3;
|
|
Fout[n4] = Fout[n4] + t_i;
|
|
t_r = Fout[Fout2 + 5];
|
|
t_i = 0 - Fout[Fout2 + 4];
|
|
Fout[Fout2 + 4] = Fout[fout_ptr + 4] - t_r;
|
|
Fout[Fout2 + 5] = Fout[fout_ptr + 5] - t_i;
|
|
int n5 = fout_ptr + 4;
|
|
Fout[n5] = Fout[n5] + t_r;
|
|
int n6 = fout_ptr + 5;
|
|
Fout[n6] = Fout[n6] + t_i;
|
|
t_r = KissFFT.S_MUL(Fout[Fout2 + 7] - Fout[Fout2 + 6], tw);
|
|
t_i = KissFFT.S_MUL(0 - Fout[Fout2 + 7] - Fout[Fout2 + 6], tw);
|
|
Fout[Fout2 + 6] = Fout[fout_ptr + 6] - t_r;
|
|
Fout[Fout2 + 7] = Fout[fout_ptr + 7] - t_i;
|
|
int n7 = fout_ptr + 6;
|
|
Fout[n7] = Fout[n7] + t_r;
|
|
int n8 = fout_ptr + 7;
|
|
Fout[n8] = Fout[n8] + t_i;
|
|
fout_ptr += 16;
|
|
}
|
|
}
|
|
|
|
static void kf_bfly4(int[] Fout, int fout_ptr, int fstride, FFTState st, int m, int N, int mm) {
|
|
if (m == 1) {
|
|
for (int i = 0; i < N; ++i) {
|
|
int scratch0 = Fout[fout_ptr + 0] - Fout[fout_ptr + 4];
|
|
int scratch1 = Fout[fout_ptr + 1] - Fout[fout_ptr + 5];
|
|
int n = fout_ptr + 0;
|
|
Fout[n] = Fout[n] + Fout[fout_ptr + 4];
|
|
int n2 = fout_ptr + 1;
|
|
Fout[n2] = Fout[n2] + Fout[fout_ptr + 5];
|
|
int scratch2 = Fout[fout_ptr + 2] + Fout[fout_ptr + 6];
|
|
int scratch3 = Fout[fout_ptr + 3] + Fout[fout_ptr + 7];
|
|
Fout[fout_ptr + 4] = Fout[fout_ptr + 0] - scratch2;
|
|
Fout[fout_ptr + 5] = Fout[fout_ptr + 1] - scratch3;
|
|
int n3 = fout_ptr + 0;
|
|
Fout[n3] = Fout[n3] + scratch2;
|
|
int n4 = fout_ptr + 1;
|
|
Fout[n4] = Fout[n4] + scratch3;
|
|
scratch2 = Fout[fout_ptr + 2] - Fout[fout_ptr + 6];
|
|
scratch3 = Fout[fout_ptr + 3] - Fout[fout_ptr + 7];
|
|
Fout[fout_ptr + 2] = scratch0 + scratch3;
|
|
Fout[fout_ptr + 3] = scratch1 - scratch2;
|
|
Fout[fout_ptr + 6] = scratch0 - scratch3;
|
|
Fout[fout_ptr + 7] = scratch1 + scratch2;
|
|
fout_ptr += 8;
|
|
}
|
|
} else {
|
|
int Fout_beg = fout_ptr;
|
|
for (int i = 0; i < N; ++i) {
|
|
fout_ptr = Fout_beg + 2 * i * mm;
|
|
int m1 = fout_ptr + 2 * m;
|
|
int m2 = fout_ptr + 4 * m;
|
|
int m3 = fout_ptr + 6 * m;
|
|
int tw1 = 0;
|
|
int tw2 = 0;
|
|
int tw3 = 0;
|
|
for (int j = 0; j < m; ++j) {
|
|
int scratch0 = KissFFT.S_MUL(Fout[m1], st.twiddles[tw1]) - KissFFT.S_MUL(Fout[m1 + 1], st.twiddles[tw1 + 1]);
|
|
int scratch1 = KissFFT.S_MUL(Fout[m1], st.twiddles[tw1 + 1]) + KissFFT.S_MUL(Fout[m1 + 1], st.twiddles[tw1]);
|
|
int scratch2 = KissFFT.S_MUL(Fout[m2], st.twiddles[tw2]) - KissFFT.S_MUL(Fout[m2 + 1], st.twiddles[tw2 + 1]);
|
|
int scratch3 = KissFFT.S_MUL(Fout[m2], st.twiddles[tw2 + 1]) + KissFFT.S_MUL(Fout[m2 + 1], st.twiddles[tw2]);
|
|
int scratch4 = KissFFT.S_MUL(Fout[m3], st.twiddles[tw3]) - KissFFT.S_MUL(Fout[m3 + 1], st.twiddles[tw3 + 1]);
|
|
int scratch5 = KissFFT.S_MUL(Fout[m3], st.twiddles[tw3 + 1]) + KissFFT.S_MUL(Fout[m3 + 1], st.twiddles[tw3]);
|
|
int scratch10 = Fout[fout_ptr] - scratch2;
|
|
int scratch11 = Fout[fout_ptr + 1] - scratch3;
|
|
int n = fout_ptr;
|
|
Fout[n] = Fout[n] + scratch2;
|
|
int n5 = fout_ptr + 1;
|
|
Fout[n5] = Fout[n5] + scratch3;
|
|
int scratch6 = scratch0 + scratch4;
|
|
int scratch7 = scratch1 + scratch5;
|
|
int scratch8 = scratch0 - scratch4;
|
|
int scratch9 = scratch1 - scratch5;
|
|
Fout[m2] = Fout[fout_ptr] - scratch6;
|
|
Fout[m2 + 1] = Fout[fout_ptr + 1] - scratch7;
|
|
tw1 += fstride * 2;
|
|
tw2 += fstride * 4;
|
|
tw3 += fstride * 6;
|
|
int n6 = fout_ptr;
|
|
Fout[n6] = Fout[n6] + scratch6;
|
|
int n7 = fout_ptr + 1;
|
|
Fout[n7] = Fout[n7] + scratch7;
|
|
Fout[m1] = scratch10 + scratch9;
|
|
Fout[m1 + 1] = scratch11 - scratch8;
|
|
Fout[m3] = scratch10 - scratch9;
|
|
Fout[m3 + 1] = scratch11 + scratch8;
|
|
fout_ptr += 2;
|
|
m1 += 2;
|
|
m2 += 2;
|
|
m3 += 2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
static void kf_bfly3(int[] Fout, int fout_ptr, int fstride, FFTState st, int m, int N, int mm) {
|
|
int m1 = 2 * m;
|
|
int m2 = 4 * m;
|
|
int Fout_beg = fout_ptr;
|
|
for (int i = 0; i < N; ++i) {
|
|
fout_ptr = Fout_beg + 2 * i * mm;
|
|
int tw2 = 0;
|
|
int tw1 = 0;
|
|
int k = m;
|
|
do {
|
|
int scratch2 = KissFFT.S_MUL(Fout[fout_ptr + m1], st.twiddles[tw1]) - KissFFT.S_MUL(Fout[fout_ptr + m1 + 1], st.twiddles[tw1 + 1]);
|
|
int scratch3 = KissFFT.S_MUL(Fout[fout_ptr + m1], st.twiddles[tw1 + 1]) + KissFFT.S_MUL(Fout[fout_ptr + m1 + 1], st.twiddles[tw1]);
|
|
int scratch4 = KissFFT.S_MUL(Fout[fout_ptr + m2], st.twiddles[tw2]) - KissFFT.S_MUL(Fout[fout_ptr + m2 + 1], st.twiddles[tw2 + 1]);
|
|
int scratch5 = KissFFT.S_MUL(Fout[fout_ptr + m2], st.twiddles[tw2 + 1]) + KissFFT.S_MUL(Fout[fout_ptr + m2 + 1], st.twiddles[tw2]);
|
|
int scratch6 = scratch2 + scratch4;
|
|
int scratch7 = scratch3 + scratch5;
|
|
int scratch0 = scratch2 - scratch4;
|
|
int scratch1 = scratch3 - scratch5;
|
|
tw1 += fstride * 2;
|
|
tw2 += fstride * 4;
|
|
Fout[fout_ptr + m1] = Fout[fout_ptr + 0] - KissFFT.HALF_OF(scratch6);
|
|
Fout[fout_ptr + m1 + 1] = Fout[fout_ptr + 1] - KissFFT.HALF_OF(scratch7);
|
|
scratch0 = KissFFT.S_MUL(scratch0, -28378);
|
|
scratch1 = KissFFT.S_MUL(scratch1, -28378);
|
|
int n = fout_ptr + 0;
|
|
Fout[n] = Fout[n] + scratch6;
|
|
int n2 = fout_ptr + 1;
|
|
Fout[n2] = Fout[n2] + scratch7;
|
|
Fout[fout_ptr + m2] = Fout[fout_ptr + m1] + scratch1;
|
|
Fout[fout_ptr + m2 + 1] = Fout[fout_ptr + m1 + 1] - scratch0;
|
|
int n3 = fout_ptr + m1;
|
|
Fout[n3] = Fout[n3] - scratch1;
|
|
int n4 = fout_ptr + m1 + 1;
|
|
Fout[n4] = Fout[n4] + scratch0;
|
|
fout_ptr += 2;
|
|
} while (--k != 0);
|
|
}
|
|
}
|
|
|
|
static void kf_bfly5(int[] Fout, int fout_ptr, int fstride, FFTState st, int m, int N, int mm) {
|
|
int Fout_beg = fout_ptr;
|
|
short ya_r = 10126;
|
|
short ya_i = -31164;
|
|
short yb_r = -26510;
|
|
short yb_i = -19261;
|
|
for (int i = 0; i < N; ++i) {
|
|
int tw4 = 0;
|
|
int tw3 = 0;
|
|
int tw2 = 0;
|
|
int tw1 = 0;
|
|
int Fout0 = fout_ptr = Fout_beg + 2 * i * mm;
|
|
int Fout1 = fout_ptr + 2 * m;
|
|
int Fout2 = fout_ptr + 4 * m;
|
|
int Fout3 = fout_ptr + 6 * m;
|
|
int Fout4 = fout_ptr + 8 * m;
|
|
for (int u = 0; u < m; ++u) {
|
|
int scratch0 = Fout[Fout0 + 0];
|
|
int scratch1 = Fout[Fout0 + 1];
|
|
int scratch2 = KissFFT.S_MUL(Fout[Fout1 + 0], st.twiddles[tw1]) - KissFFT.S_MUL(Fout[Fout1 + 1], st.twiddles[tw1 + 1]);
|
|
int scratch3 = KissFFT.S_MUL(Fout[Fout1 + 0], st.twiddles[tw1 + 1]) + KissFFT.S_MUL(Fout[Fout1 + 1], st.twiddles[tw1]);
|
|
int scratch4 = KissFFT.S_MUL(Fout[Fout2 + 0], st.twiddles[tw2]) - KissFFT.S_MUL(Fout[Fout2 + 1], st.twiddles[tw2 + 1]);
|
|
int scratch5 = KissFFT.S_MUL(Fout[Fout2 + 0], st.twiddles[tw2 + 1]) + KissFFT.S_MUL(Fout[Fout2 + 1], st.twiddles[tw2]);
|
|
int scratch6 = KissFFT.S_MUL(Fout[Fout3 + 0], st.twiddles[tw3]) - KissFFT.S_MUL(Fout[Fout3 + 1], st.twiddles[tw3 + 1]);
|
|
int scratch7 = KissFFT.S_MUL(Fout[Fout3 + 0], st.twiddles[tw3 + 1]) + KissFFT.S_MUL(Fout[Fout3 + 1], st.twiddles[tw3]);
|
|
int scratch8 = KissFFT.S_MUL(Fout[Fout4 + 0], st.twiddles[tw4]) - KissFFT.S_MUL(Fout[Fout4 + 1], st.twiddles[tw4 + 1]);
|
|
int scratch9 = KissFFT.S_MUL(Fout[Fout4 + 0], st.twiddles[tw4 + 1]) + KissFFT.S_MUL(Fout[Fout4 + 1], st.twiddles[tw4]);
|
|
tw1 += 2 * fstride;
|
|
tw2 += 4 * fstride;
|
|
tw3 += 6 * fstride;
|
|
tw4 += 8 * fstride;
|
|
int scratch14 = scratch2 + scratch8;
|
|
int scratch15 = scratch3 + scratch9;
|
|
int scratch20 = scratch2 - scratch8;
|
|
int scratch21 = scratch3 - scratch9;
|
|
int scratch16 = scratch4 + scratch6;
|
|
int scratch17 = scratch5 + scratch7;
|
|
int scratch18 = scratch4 - scratch6;
|
|
int scratch19 = scratch5 - scratch7;
|
|
int n = Fout0 + 0;
|
|
Fout[n] = Fout[n] + (scratch14 + scratch16);
|
|
int n2 = Fout0 + 1;
|
|
Fout[n2] = Fout[n2] + (scratch15 + scratch17);
|
|
int scratch10 = scratch0 + KissFFT.S_MUL(scratch14, ya_r) + KissFFT.S_MUL(scratch16, yb_r);
|
|
int scratch11 = scratch1 + KissFFT.S_MUL(scratch15, ya_r) + KissFFT.S_MUL(scratch17, yb_r);
|
|
int scratch12 = KissFFT.S_MUL(scratch21, ya_i) + KissFFT.S_MUL(scratch19, yb_i);
|
|
int scratch13 = 0 - KissFFT.S_MUL(scratch20, ya_i) - KissFFT.S_MUL(scratch18, yb_i);
|
|
Fout[Fout1 + 0] = scratch10 - scratch12;
|
|
Fout[Fout1 + 1] = scratch11 - scratch13;
|
|
Fout[Fout4 + 0] = scratch10 + scratch12;
|
|
Fout[Fout4 + 1] = scratch11 + scratch13;
|
|
int scratch22 = scratch0 + KissFFT.S_MUL(scratch14, yb_r) + KissFFT.S_MUL(scratch16, ya_r);
|
|
int scratch23 = scratch1 + KissFFT.S_MUL(scratch15, yb_r) + KissFFT.S_MUL(scratch17, ya_r);
|
|
int scratch24 = 0 - KissFFT.S_MUL(scratch21, yb_i) + KissFFT.S_MUL(scratch19, ya_i);
|
|
int scratch25 = KissFFT.S_MUL(scratch20, yb_i) - KissFFT.S_MUL(scratch18, ya_i);
|
|
Fout[Fout2 + 0] = scratch22 + scratch24;
|
|
Fout[Fout2 + 1] = scratch23 + scratch25;
|
|
Fout[Fout3 + 0] = scratch22 - scratch24;
|
|
Fout[Fout3 + 1] = scratch23 - scratch25;
|
|
Fout0 += 2;
|
|
Fout1 += 2;
|
|
Fout2 += 2;
|
|
Fout3 += 2;
|
|
Fout4 += 2;
|
|
}
|
|
}
|
|
}
|
|
|
|
static void opus_fft_impl(FFTState st, int[] fout, int fout_ptr) {
|
|
short m;
|
|
int[] fstride = new int[8];
|
|
int shift = st.shift > 0 ? st.shift : 0;
|
|
fstride[0] = 1;
|
|
int L = 0;
|
|
do {
|
|
short p = st.factors[2 * L];
|
|
m = st.factors[2 * L + 1];
|
|
fstride[L + 1] = fstride[L] * p;
|
|
++L;
|
|
} while (m != 1);
|
|
m = st.factors[2 * L - 1];
|
|
for (int i = L - 1; i >= 0; --i) {
|
|
short m2 = i != 0 ? st.factors[2 * i - 1] : (short)1;
|
|
switch (st.factors[2 * i]) {
|
|
case 2: {
|
|
KissFFT.kf_bfly2(fout, fout_ptr, m, fstride[i]);
|
|
break;
|
|
}
|
|
case 4: {
|
|
KissFFT.kf_bfly4(fout, fout_ptr, fstride[i] << shift, st, m, fstride[i], m2);
|
|
break;
|
|
}
|
|
case 3: {
|
|
KissFFT.kf_bfly3(fout, fout_ptr, fstride[i] << shift, st, m, fstride[i], m2);
|
|
break;
|
|
}
|
|
case 5: {
|
|
KissFFT.kf_bfly5(fout, fout_ptr, fstride[i] << shift, st, m, fstride[i], m2);
|
|
}
|
|
}
|
|
m = m2;
|
|
}
|
|
}
|
|
|
|
static void opus_fft(FFTState st, int[] fin, int[] fout) {
|
|
int scale_shift = st.scale_shift - 1;
|
|
short scale = st.scale;
|
|
Inlines.OpusAssert(fin != fout, "In-place FFT not supported");
|
|
for (int i = 0; i < st.nfft; ++i) {
|
|
fout[2 * st.bitrev[i]] = Inlines.SHR32(Inlines.MULT16_32_Q16(scale, fin[2 * i]), scale_shift);
|
|
fout[2 * st.bitrev[i] + 1] = Inlines.SHR32(Inlines.MULT16_32_Q16(scale, fin[2 * i + 1]), scale_shift);
|
|
}
|
|
KissFFT.opus_fft_impl(st, fout, 0);
|
|
}
|
|
}
|
|
|