first commit
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
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
This commit is contained in:
commit
bbccd4a815
454 files changed
+45050
No files matched your search
@@ -0,0 +1,132 @@
|
||||
/*
|
||||
* Decompiled with CFR 0.152.
|
||||
*/
|
||||
package de.maxhenkel.voicechat.concentus;
|
||||
|
||||
import de.maxhenkel.voicechat.concentus.Arrays;
|
||||
import de.maxhenkel.voicechat.concentus.CodeSigns;
|
||||
import de.maxhenkel.voicechat.concentus.EntropyCoder;
|
||||
import de.maxhenkel.voicechat.concentus.Inlines;
|
||||
import de.maxhenkel.voicechat.concentus.ShellCoder;
|
||||
import de.maxhenkel.voicechat.concentus.SilkTables;
|
||||
|
||||
class EncodePulses {
|
||||
EncodePulses() {
|
||||
}
|
||||
|
||||
static int combine_and_check(int[] pulses_comb, int pulses_comb_ptr, int[] pulses_in, int pulses_in_ptr, int max_pulses, int len) {
|
||||
for (int k = 0; k < len; ++k) {
|
||||
int k2p = 2 * k + pulses_in_ptr;
|
||||
int sum = pulses_in[k2p] + pulses_in[k2p + 1];
|
||||
if (sum > max_pulses) {
|
||||
return 1;
|
||||
}
|
||||
pulses_comb[pulses_comb_ptr + k] = sum;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int combine_and_check(int[] pulses_comb, int[] pulses_in, int max_pulses, int len) {
|
||||
for (int k = 0; k < len; ++k) {
|
||||
int sum = pulses_in[2 * k] + pulses_in[2 * k + 1];
|
||||
if (sum > max_pulses) {
|
||||
return 1;
|
||||
}
|
||||
pulses_comb[k] = sum;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void silk_encode_pulses(EntropyCoder psRangeEnc, int signalType, int quantOffsetType, byte[] pulses, int frame_length) {
|
||||
int k;
|
||||
int i;
|
||||
int RateLevelIndex = 0;
|
||||
int[] pulses_comb = new int[8];
|
||||
Arrays.MemSet(pulses_comb, 0, 8);
|
||||
Inlines.OpusAssert(true);
|
||||
int iter = Inlines.silk_RSHIFT(frame_length, 4);
|
||||
if (iter * 16 < frame_length) {
|
||||
Inlines.OpusAssert(frame_length == 120);
|
||||
++iter;
|
||||
Arrays.MemSetWithOffset(pulses, (byte)0, frame_length, 16);
|
||||
}
|
||||
int[] abs_pulses = new int[iter * 16];
|
||||
Inlines.OpusAssert(true);
|
||||
for (i = 0; i < iter * 16; i += 4) {
|
||||
abs_pulses[i + 0] = Inlines.silk_abs(pulses[i + 0]);
|
||||
abs_pulses[i + 1] = Inlines.silk_abs(pulses[i + 1]);
|
||||
abs_pulses[i + 2] = Inlines.silk_abs(pulses[i + 2]);
|
||||
abs_pulses[i + 3] = Inlines.silk_abs(pulses[i + 3]);
|
||||
}
|
||||
int[] sum_pulses = new int[iter];
|
||||
int[] nRshifts = new int[iter];
|
||||
int abs_pulses_ptr = 0;
|
||||
for (i = 0; i < iter; ++i) {
|
||||
nRshifts[i] = 0;
|
||||
block2: while (true) {
|
||||
int scale_down = EncodePulses.combine_and_check(pulses_comb, 0, abs_pulses, abs_pulses_ptr, SilkTables.silk_max_pulses_table[0], 8);
|
||||
scale_down += EncodePulses.combine_and_check(pulses_comb, pulses_comb, SilkTables.silk_max_pulses_table[1], 4);
|
||||
scale_down += EncodePulses.combine_and_check(pulses_comb, pulses_comb, SilkTables.silk_max_pulses_table[2], 2);
|
||||
if ((scale_down += EncodePulses.combine_and_check(sum_pulses, i, pulses_comb, 0, SilkTables.silk_max_pulses_table[3], 1)) == 0) break;
|
||||
int n = i;
|
||||
nRshifts[n] = nRshifts[n] + 1;
|
||||
k = abs_pulses_ptr;
|
||||
while (true) {
|
||||
if (k >= abs_pulses_ptr + 16) continue block2;
|
||||
abs_pulses[k] = Inlines.silk_RSHIFT(abs_pulses[k], 1);
|
||||
++k;
|
||||
}
|
||||
break;
|
||||
}
|
||||
abs_pulses_ptr += 16;
|
||||
}
|
||||
int minSumBits_Q5 = Integer.MAX_VALUE;
|
||||
for (k = 0; k < 9; ++k) {
|
||||
short[] nBits_ptr = SilkTables.silk_pulses_per_block_BITS_Q5[k];
|
||||
int sumBits_Q5 = SilkTables.silk_rate_levels_BITS_Q5[signalType >> 1][k];
|
||||
for (i = 0; i < iter; ++i) {
|
||||
if (nRshifts[i] > 0) {
|
||||
sumBits_Q5 += nBits_ptr[17];
|
||||
continue;
|
||||
}
|
||||
sumBits_Q5 += nBits_ptr[sum_pulses[i]];
|
||||
}
|
||||
if (sumBits_Q5 >= minSumBits_Q5) continue;
|
||||
minSumBits_Q5 = sumBits_Q5;
|
||||
RateLevelIndex = k;
|
||||
}
|
||||
psRangeEnc.enc_icdf(RateLevelIndex, SilkTables.silk_rate_levels_iCDF[signalType >> 1], 8);
|
||||
for (i = 0; i < iter; ++i) {
|
||||
if (nRshifts[i] == 0) {
|
||||
psRangeEnc.enc_icdf(sum_pulses[i], SilkTables.silk_pulses_per_block_iCDF[RateLevelIndex], 8);
|
||||
continue;
|
||||
}
|
||||
psRangeEnc.enc_icdf(17, SilkTables.silk_pulses_per_block_iCDF[RateLevelIndex], 8);
|
||||
for (k = 0; k < nRshifts[i] - 1; ++k) {
|
||||
psRangeEnc.enc_icdf(17, SilkTables.silk_pulses_per_block_iCDF[9], 8);
|
||||
}
|
||||
psRangeEnc.enc_icdf(sum_pulses[i], SilkTables.silk_pulses_per_block_iCDF[9], 8);
|
||||
}
|
||||
for (i = 0; i < iter; ++i) {
|
||||
if (sum_pulses[i] <= 0) continue;
|
||||
ShellCoder.silk_shell_encoder(psRangeEnc, abs_pulses, i * 16);
|
||||
}
|
||||
for (i = 0; i < iter; ++i) {
|
||||
if (nRshifts[i] <= 0) continue;
|
||||
int pulses_ptr = i * 16;
|
||||
int nLS = nRshifts[i] - 1;
|
||||
for (k = 0; k < 16; ++k) {
|
||||
int bit;
|
||||
byte abs_q = (byte)Inlines.silk_abs(pulses[pulses_ptr + k]);
|
||||
for (int j = nLS; j > 0; --j) {
|
||||
bit = Inlines.silk_RSHIFT(abs_q, j) & 1;
|
||||
psRangeEnc.enc_icdf(bit, SilkTables.silk_lsb_iCDF, 8);
|
||||
}
|
||||
bit = abs_q & 1;
|
||||
psRangeEnc.enc_icdf(bit, SilkTables.silk_lsb_iCDF, 8);
|
||||
}
|
||||
}
|
||||
CodeSigns.silk_encode_signs(psRangeEnc, pulses, frame_length, signalType, quantOffsetType, sum_pulses);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user