Files
AsminVoicechat/source/decompiled/de/maxhenkel/voicechat/concentus/LPCInversePredGain.java
T
asminme bbccd4a815
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
first commit
2026-10-24 15:18:03 +02:00

75 lines
2.9 KiB
Java

/*
* Decompiled with CFR 0.152.
*/
package de.maxhenkel.voicechat.concentus;
import de.maxhenkel.voicechat.concentus.Arrays;
import de.maxhenkel.voicechat.concentus.Inlines;
class LPCInversePredGain {
private static final int QA = 24;
private static final int A_LIMIT = 0xFFEF9E;
LPCInversePredGain() {
}
static int LPC_inverse_pred_gain_QA(int[][] A_QA, int order) {
int rc_mult1_Q30;
int rc_Q31;
int[] Anew_QA = A_QA[order & 1];
int invGain_Q30 = 0x40000000;
for (int k = order - 1; k > 0; --k) {
if (Anew_QA[k] > 0xFFEF9E || Anew_QA[k] < -16773022) {
return 0;
}
rc_Q31 = 0 - Inlines.silk_LSHIFT(Anew_QA[k], 7);
rc_mult1_Q30 = 0x40000000 - Inlines.silk_SMMUL(rc_Q31, rc_Q31);
Inlines.OpusAssert(rc_mult1_Q30 > 32768);
Inlines.OpusAssert(rc_mult1_Q30 <= 0x40000000);
int mult2Q = 32 - Inlines.silk_CLZ32(Inlines.silk_abs(rc_mult1_Q30));
int rc_mult2 = Inlines.silk_INVERSE32_varQ(rc_mult1_Q30, mult2Q + 30);
invGain_Q30 = Inlines.silk_LSHIFT(Inlines.silk_SMMUL(invGain_Q30, rc_mult1_Q30), 2);
Inlines.OpusAssert(invGain_Q30 >= 0);
Inlines.OpusAssert(invGain_Q30 <= 0x40000000);
int[] Aold_QA = Anew_QA;
Anew_QA = A_QA[k & 1];
for (int n = 0; n < k; ++n) {
int tmp_QA = Aold_QA[n] - Inlines.MUL32_FRAC_Q(Aold_QA[k - n - 1], rc_Q31, 31);
Anew_QA[n] = Inlines.MUL32_FRAC_Q(tmp_QA, rc_mult2, mult2Q);
}
}
if (Anew_QA[0] > 0xFFEF9E || Anew_QA[0] < -16773022) {
return 0;
}
rc_Q31 = 0 - Inlines.silk_LSHIFT(Anew_QA[0], 7);
rc_mult1_Q30 = 0x40000000 - Inlines.silk_SMMUL(rc_Q31, rc_Q31);
Inlines.OpusAssert((invGain_Q30 = Inlines.silk_LSHIFT(Inlines.silk_SMMUL(invGain_Q30, rc_mult1_Q30), 2)) >= 0);
Inlines.OpusAssert(invGain_Q30 <= 0x40000000);
return invGain_Q30;
}
static int silk_LPC_inverse_pred_gain(short[] A_Q12, int order) {
int[][] Atmp_QA = Arrays.InitTwoDimensionalArrayInt(2, 16);
int DC_resp = 0;
int[] Anew_QA = Atmp_QA[order & 1];
for (int k = 0; k < order; ++k) {
DC_resp += A_Q12[k];
Anew_QA[k] = Inlines.silk_LSHIFT32(A_Q12[k], 12);
}
if (DC_resp >= 4096) {
return 0;
}
return LPCInversePredGain.LPC_inverse_pred_gain_QA(Atmp_QA, order);
}
static int silk_LPC_inverse_pred_gain_Q24(int[] A_Q24, int order) {
int[][] Atmp_QA = Arrays.InitTwoDimensionalArrayInt(2, 16);
int[] Anew_QA = Atmp_QA[order & 1];
for (int k = 0; k < order; ++k) {
Anew_QA[k] = Inlines.silk_RSHIFT32(A_Q24[k], 0);
}
return LPCInversePredGain.LPC_inverse_pred_gain_QA(Atmp_QA, order);
}
}