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
100 lines
3.6 KiB
Java
100 lines
3.6 KiB
Java
/*
|
|
* Decompiled with CFR 0.152.
|
|
*/
|
|
package de.maxhenkel.voicechat.concentus;
|
|
|
|
import de.maxhenkel.voicechat.concentus.BoxedValueInt;
|
|
import de.maxhenkel.voicechat.concentus.Inlines;
|
|
import de.maxhenkel.voicechat.concentus.Kernels;
|
|
|
|
class CeltLPC {
|
|
CeltLPC() {
|
|
}
|
|
|
|
static void celt_lpc(int[] _lpc, int[] ac, int p) {
|
|
int i;
|
|
int error = ac[0];
|
|
int[] lpc = new int[p];
|
|
if (ac[0] != 0) {
|
|
for (i = 0; i < p; ++i) {
|
|
int j;
|
|
int rr = 0;
|
|
for (j = 0; j < i; ++j) {
|
|
rr += Inlines.MULT32_32_Q31(lpc[j], ac[i - j]);
|
|
}
|
|
int r = 0 - Inlines.frac_div32(Inlines.SHL32(rr += Inlines.SHR32(ac[i + 1], 3), 3), error);
|
|
lpc[i] = Inlines.SHR32(r, 3);
|
|
for (j = 0; j < i + 1 >> 1; ++j) {
|
|
int tmp1 = lpc[j];
|
|
int tmp2 = lpc[i - 1 - j];
|
|
lpc[j] = tmp1 + Inlines.MULT32_32_Q31(r, tmp2);
|
|
lpc[i - 1 - j] = tmp2 + Inlines.MULT32_32_Q31(r, tmp1);
|
|
}
|
|
if ((error -= Inlines.MULT32_32_Q31(Inlines.MULT32_32_Q31(r, r), error)) < Inlines.SHR32(ac[0], 10)) break;
|
|
}
|
|
}
|
|
for (i = 0; i < p; ++i) {
|
|
_lpc[i] = Inlines.ROUND16(lpc[i], 16);
|
|
}
|
|
}
|
|
|
|
static void celt_iir(int[] _x, int _x_ptr, int[] den, int[] _y, int _y_ptr, int N, int ord, int[] mem) {
|
|
int i;
|
|
int[] rden = new int[ord];
|
|
int[] y = new int[N + ord];
|
|
Inlines.OpusAssert((ord & 3) == 0);
|
|
BoxedValueInt _sum0 = new BoxedValueInt(0);
|
|
BoxedValueInt _sum1 = new BoxedValueInt(0);
|
|
BoxedValueInt _sum2 = new BoxedValueInt(0);
|
|
BoxedValueInt _sum3 = new BoxedValueInt(0);
|
|
for (i = 0; i < ord; ++i) {
|
|
rden[i] = den[ord - i - 1];
|
|
}
|
|
for (i = 0; i < ord; ++i) {
|
|
y[i] = 0 - mem[ord - i - 1];
|
|
}
|
|
while (i < N + ord) {
|
|
y[i] = 0;
|
|
++i;
|
|
}
|
|
for (i = 0; i < N - 3; i += 4) {
|
|
_sum0.Val = _x[_x_ptr + i];
|
|
_sum1.Val = _x[_x_ptr + i + 1];
|
|
_sum2.Val = _x[_x_ptr + i + 2];
|
|
_sum3.Val = _x[_x_ptr + i + 3];
|
|
Kernels.xcorr_kernel(rden, y, i, _sum0, _sum1, _sum2, _sum3, ord);
|
|
int sum0 = _sum0.Val;
|
|
int sum1 = _sum1.Val;
|
|
int sum2 = _sum2.Val;
|
|
int sum3 = _sum3.Val;
|
|
y[i + ord] = 0 - Inlines.ROUND16(sum0, 12);
|
|
_y[_y_ptr + i] = sum0;
|
|
sum1 = Inlines.MAC16_16(sum1, y[i + ord], den[0]);
|
|
y[i + ord + 1] = 0 - Inlines.ROUND16(sum1, 12);
|
|
_y[_y_ptr + i + 1] = sum1;
|
|
sum2 = Inlines.MAC16_16(sum2, y[i + ord + 1], den[0]);
|
|
sum2 = Inlines.MAC16_16(sum2, y[i + ord], den[1]);
|
|
y[i + ord + 2] = 0 - Inlines.ROUND16(sum2, 12);
|
|
_y[_y_ptr + i + 2] = sum2;
|
|
sum3 = Inlines.MAC16_16(sum3, y[i + ord + 2], den[0]);
|
|
sum3 = Inlines.MAC16_16(sum3, y[i + ord + 1], den[1]);
|
|
sum3 = Inlines.MAC16_16(sum3, y[i + ord], den[2]);
|
|
y[i + ord + 3] = 0 - Inlines.ROUND16(sum3, 12);
|
|
_y[_y_ptr + i + 3] = sum3;
|
|
}
|
|
while (i < N) {
|
|
int sum = _x[_x_ptr + i];
|
|
for (int j = 0; j < ord; ++j) {
|
|
sum -= Inlines.MULT16_16(rden[j], y[i + j]);
|
|
}
|
|
y[i + ord] = Inlines.ROUND16(sum, 12);
|
|
_y[_y_ptr + i] = sum;
|
|
++i;
|
|
}
|
|
for (i = 0; i < ord; ++i) {
|
|
mem[i] = _y[_y_ptr + N - i - 1];
|
|
}
|
|
}
|
|
}
|
|
|