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,245 @@
|
||||
/*
|
||||
* Decompiled with CFR 0.152.
|
||||
*/
|
||||
package de.maxhenkel.voicechat.concentus;
|
||||
|
||||
import de.maxhenkel.voicechat.concentus.Arrays;
|
||||
import de.maxhenkel.voicechat.concentus.BoxedValueInt;
|
||||
import de.maxhenkel.voicechat.concentus.DecControlState;
|
||||
import de.maxhenkel.voicechat.concentus.DecodeIndices;
|
||||
import de.maxhenkel.voicechat.concentus.DecodePulses;
|
||||
import de.maxhenkel.voicechat.concentus.EntropyCoder;
|
||||
import de.maxhenkel.voicechat.concentus.Inlines;
|
||||
import de.maxhenkel.voicechat.concentus.Resampler;
|
||||
import de.maxhenkel.voicechat.concentus.SilkChannelDecoder;
|
||||
import de.maxhenkel.voicechat.concentus.SilkDecoder;
|
||||
import de.maxhenkel.voicechat.concentus.SilkError;
|
||||
import de.maxhenkel.voicechat.concentus.SilkTables;
|
||||
import de.maxhenkel.voicechat.concentus.Stereo;
|
||||
|
||||
class DecodeAPI {
|
||||
DecodeAPI() {
|
||||
}
|
||||
|
||||
static int silk_InitDecoder(SilkDecoder decState) {
|
||||
decState.Reset();
|
||||
int ret = SilkError.SILK_NO_ERROR;
|
||||
SilkChannelDecoder[] channel_states = decState.channel_state;
|
||||
for (int n = 0; n < 2; ++n) {
|
||||
ret = channel_states[n].silk_init_decoder();
|
||||
}
|
||||
decState.sStereo.Reset();
|
||||
decState.prev_decode_only_middle = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int silk_Decode(SilkDecoder psDec, DecControlState decControl, int lostFlag, int newPacketFlag, EntropyCoder psRangeDec, short[] samplesOut, int samplesOut_ptr, BoxedValueInt nSamplesOut) {
|
||||
int resample_out_ptr;
|
||||
short[] resample_out;
|
||||
short[] samplesOut_tmp;
|
||||
boolean delay_stack_alloc;
|
||||
int condCoding;
|
||||
int i;
|
||||
boolean stereo_to_mono;
|
||||
int n;
|
||||
int decode_only_middle = 0;
|
||||
int ret = SilkError.SILK_NO_ERROR;
|
||||
BoxedValueInt nSamplesOutDec = new BoxedValueInt(0);
|
||||
int[] samplesOut_tmp_ptrs = new int[2];
|
||||
int[] MS_pred_Q13 = new int[]{0, 0};
|
||||
SilkChannelDecoder[] channel_state = psDec.channel_state;
|
||||
nSamplesOut.Val = 0;
|
||||
Inlines.OpusAssert(decControl.nChannelsInternal == 1 || decControl.nChannelsInternal == 2);
|
||||
if (newPacketFlag != 0) {
|
||||
for (n = 0; n < decControl.nChannelsInternal; ++n) {
|
||||
channel_state[n].nFramesDecoded = 0;
|
||||
}
|
||||
}
|
||||
if (decControl.nChannelsInternal > psDec.nChannelsInternal) {
|
||||
ret += channel_state[1].silk_init_decoder();
|
||||
}
|
||||
boolean bl = stereo_to_mono = decControl.nChannelsInternal == 1 && psDec.nChannelsInternal == 2 && decControl.internalSampleRate == 1000 * channel_state[0].fs_kHz;
|
||||
if (channel_state[0].nFramesDecoded == 0) {
|
||||
for (n = 0; n < decControl.nChannelsInternal; ++n) {
|
||||
if (decControl.payloadSize_ms == 0) {
|
||||
channel_state[n].nFramesPerPacket = 1;
|
||||
channel_state[n].nb_subfr = 2;
|
||||
} else if (decControl.payloadSize_ms == 10) {
|
||||
channel_state[n].nFramesPerPacket = 1;
|
||||
channel_state[n].nb_subfr = 2;
|
||||
} else if (decControl.payloadSize_ms == 20) {
|
||||
channel_state[n].nFramesPerPacket = 1;
|
||||
channel_state[n].nb_subfr = 4;
|
||||
} else if (decControl.payloadSize_ms == 40) {
|
||||
channel_state[n].nFramesPerPacket = 2;
|
||||
channel_state[n].nb_subfr = 4;
|
||||
} else if (decControl.payloadSize_ms == 60) {
|
||||
channel_state[n].nFramesPerPacket = 3;
|
||||
channel_state[n].nb_subfr = 4;
|
||||
} else {
|
||||
Inlines.OpusAssert(false);
|
||||
return SilkError.SILK_DEC_INVALID_FRAME_SIZE;
|
||||
}
|
||||
int fs_kHz_dec = (decControl.internalSampleRate >> 10) + 1;
|
||||
if (fs_kHz_dec != 8 && fs_kHz_dec != 12 && fs_kHz_dec != 16) {
|
||||
Inlines.OpusAssert(false);
|
||||
return SilkError.SILK_DEC_INVALID_SAMPLING_FREQUENCY;
|
||||
}
|
||||
ret += channel_state[n].silk_decoder_set_fs(fs_kHz_dec, decControl.API_sampleRate);
|
||||
}
|
||||
}
|
||||
if (decControl.nChannelsAPI == 2 && decControl.nChannelsInternal == 2 && (psDec.nChannelsAPI == 1 || psDec.nChannelsInternal == 1)) {
|
||||
Arrays.MemSet(psDec.sStereo.pred_prev_Q13, (short)0, 2);
|
||||
Arrays.MemSet(psDec.sStereo.sSide, (short)0, 2);
|
||||
channel_state[1].resampler_state.Assign(channel_state[0].resampler_state);
|
||||
}
|
||||
psDec.nChannelsAPI = decControl.nChannelsAPI;
|
||||
psDec.nChannelsInternal = decControl.nChannelsInternal;
|
||||
if (decControl.API_sampleRate > 48000 || decControl.API_sampleRate < 8000) {
|
||||
ret = SilkError.SILK_DEC_INVALID_SAMPLING_FREQUENCY;
|
||||
return ret;
|
||||
}
|
||||
if (lostFlag != 1 && channel_state[0].nFramesDecoded == 0) {
|
||||
for (n = 0; n < decControl.nChannelsInternal; ++n) {
|
||||
for (i = 0; i < channel_state[n].nFramesPerPacket; ++i) {
|
||||
channel_state[n].VAD_flags[i] = psRangeDec.dec_bit_logp(1L);
|
||||
}
|
||||
channel_state[n].LBRR_flag = psRangeDec.dec_bit_logp(1L);
|
||||
}
|
||||
for (n = 0; n < decControl.nChannelsInternal; ++n) {
|
||||
Arrays.MemSet(channel_state[n].LBRR_flags, 0, 3);
|
||||
if (channel_state[n].LBRR_flag == 0) continue;
|
||||
if (channel_state[n].nFramesPerPacket == 1) {
|
||||
channel_state[n].LBRR_flags[0] = 1;
|
||||
continue;
|
||||
}
|
||||
int LBRR_symbol = psRangeDec.dec_icdf(SilkTables.silk_LBRR_flags_iCDF_ptr[channel_state[n].nFramesPerPacket - 2], 8) + 1;
|
||||
for (i = 0; i < channel_state[n].nFramesPerPacket; ++i) {
|
||||
channel_state[n].LBRR_flags[i] = Inlines.silk_RSHIFT(LBRR_symbol, i) & 1;
|
||||
}
|
||||
}
|
||||
if (lostFlag == 0) {
|
||||
for (i = 0; i < channel_state[0].nFramesPerPacket; ++i) {
|
||||
for (n = 0; n < decControl.nChannelsInternal; ++n) {
|
||||
if (channel_state[n].LBRR_flags[i] == 0) continue;
|
||||
short[] pulses = new short[320];
|
||||
if (decControl.nChannelsInternal == 2 && n == 0) {
|
||||
Stereo.silk_stereo_decode_pred(psRangeDec, MS_pred_Q13);
|
||||
if (channel_state[1].LBRR_flags[i] == 0) {
|
||||
BoxedValueInt decodeOnlyMiddleBoxed = new BoxedValueInt(decode_only_middle);
|
||||
Stereo.silk_stereo_decode_mid_only(psRangeDec, decodeOnlyMiddleBoxed);
|
||||
decode_only_middle = decodeOnlyMiddleBoxed.Val;
|
||||
}
|
||||
}
|
||||
condCoding = i > 0 && channel_state[n].LBRR_flags[i - 1] != 0 ? 2 : 0;
|
||||
DecodeIndices.silk_decode_indices(channel_state[n], psRangeDec, i, 1, condCoding);
|
||||
DecodePulses.silk_decode_pulses(psRangeDec, pulses, channel_state[n].indices.signalType, channel_state[n].indices.quantOffsetType, channel_state[n].frame_length);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (decControl.nChannelsInternal == 2) {
|
||||
if (lostFlag == 0 || lostFlag == 2 && channel_state[0].LBRR_flags[channel_state[0].nFramesDecoded] == 1) {
|
||||
Stereo.silk_stereo_decode_pred(psRangeDec, MS_pred_Q13);
|
||||
if (lostFlag == 0 && channel_state[1].VAD_flags[channel_state[0].nFramesDecoded] == 0 || lostFlag == 2 && channel_state[1].LBRR_flags[channel_state[0].nFramesDecoded] == 0) {
|
||||
BoxedValueInt decodeOnlyMiddleBoxed = new BoxedValueInt(decode_only_middle);
|
||||
Stereo.silk_stereo_decode_mid_only(psRangeDec, decodeOnlyMiddleBoxed);
|
||||
decode_only_middle = decodeOnlyMiddleBoxed.Val;
|
||||
} else {
|
||||
decode_only_middle = 0;
|
||||
}
|
||||
} else {
|
||||
for (n = 0; n < 2; ++n) {
|
||||
MS_pred_Q13[n] = psDec.sStereo.pred_prev_Q13[n];
|
||||
}
|
||||
}
|
||||
}
|
||||
if (decControl.nChannelsInternal == 2 && decode_only_middle == 0 && psDec.prev_decode_only_middle == 1) {
|
||||
Arrays.MemSet(psDec.channel_state[1].outBuf, (short)0, 480);
|
||||
Arrays.MemSet(psDec.channel_state[1].sLPC_Q14_buf, 0, 16);
|
||||
psDec.channel_state[1].lagPrev = 100;
|
||||
psDec.channel_state[1].LastGainIndex = (byte)10;
|
||||
psDec.channel_state[1].prevSignalType = 0;
|
||||
psDec.channel_state[1].first_frame_after_reset = 1;
|
||||
}
|
||||
boolean bl2 = delay_stack_alloc = decControl.internalSampleRate * decControl.nChannelsInternal < decControl.API_sampleRate * decControl.nChannelsAPI;
|
||||
if (delay_stack_alloc) {
|
||||
samplesOut_tmp = samplesOut;
|
||||
samplesOut_tmp_ptrs[0] = samplesOut_ptr;
|
||||
samplesOut_tmp_ptrs[1] = samplesOut_ptr + channel_state[0].frame_length + 2;
|
||||
} else {
|
||||
short[] samplesOut1_tmp_storage1 = new short[decControl.nChannelsInternal * (channel_state[0].frame_length + 2)];
|
||||
samplesOut_tmp = samplesOut1_tmp_storage1;
|
||||
samplesOut_tmp_ptrs[0] = 0;
|
||||
samplesOut_tmp_ptrs[1] = channel_state[0].frame_length + 2;
|
||||
}
|
||||
boolean has_side = lostFlag == 0 ? decode_only_middle == 0 : psDec.prev_decode_only_middle == 0 || decControl.nChannelsInternal == 2 && lostFlag == 2 && channel_state[1].LBRR_flags[channel_state[1].nFramesDecoded] == 1;
|
||||
for (n = 0; n < decControl.nChannelsInternal; ++n) {
|
||||
if (n == 0 || has_side) {
|
||||
int FrameIndex = channel_state[0].nFramesDecoded - n;
|
||||
condCoding = FrameIndex <= 0 ? 0 : (lostFlag == 2 ? (channel_state[n].LBRR_flags[FrameIndex - 1] != 0 ? 2 : 0) : (n > 0 && psDec.prev_decode_only_middle != 0 ? 1 : 2));
|
||||
ret += channel_state[n].silk_decode_frame(psRangeDec, samplesOut_tmp, samplesOut_tmp_ptrs[n] + 2, nSamplesOutDec, lostFlag, condCoding);
|
||||
} else {
|
||||
Arrays.MemSetWithOffset(samplesOut_tmp, (short)0, samplesOut_tmp_ptrs[n] + 2, nSamplesOutDec.Val);
|
||||
}
|
||||
++channel_state[n].nFramesDecoded;
|
||||
}
|
||||
if (decControl.nChannelsAPI == 2 && decControl.nChannelsInternal == 2) {
|
||||
Stereo.silk_stereo_MS_to_LR(psDec.sStereo, samplesOut_tmp, samplesOut_tmp_ptrs[0], samplesOut_tmp, samplesOut_tmp_ptrs[1], MS_pred_Q13, channel_state[0].fs_kHz, nSamplesOutDec.Val);
|
||||
} else {
|
||||
System.arraycopy(psDec.sStereo.sMid, 0, samplesOut_tmp, samplesOut_tmp_ptrs[0], 2);
|
||||
System.arraycopy(samplesOut_tmp, samplesOut_tmp_ptrs[0] + nSamplesOutDec.Val, psDec.sStereo.sMid, 0, 2);
|
||||
}
|
||||
nSamplesOut.Val = Inlines.silk_DIV32(nSamplesOutDec.Val * decControl.API_sampleRate, Inlines.silk_SMULBB(channel_state[0].fs_kHz, 1000));
|
||||
if (decControl.nChannelsAPI == 2) {
|
||||
short[] samplesOut2_tmp = new short[nSamplesOut.Val];
|
||||
resample_out = samplesOut2_tmp;
|
||||
resample_out_ptr = 0;
|
||||
} else {
|
||||
resample_out = samplesOut;
|
||||
resample_out_ptr = samplesOut_ptr;
|
||||
}
|
||||
if (delay_stack_alloc) {
|
||||
short[] samplesOut1_tmp_storage2 = new short[decControl.nChannelsInternal * (channel_state[0].frame_length + 2)];
|
||||
System.arraycopy(samplesOut, samplesOut_ptr, samplesOut1_tmp_storage2, 0, decControl.nChannelsInternal * (channel_state[0].frame_length + 2));
|
||||
samplesOut_tmp = samplesOut1_tmp_storage2;
|
||||
samplesOut_tmp_ptrs[0] = 0;
|
||||
samplesOut_tmp_ptrs[1] = channel_state[0].frame_length + 2;
|
||||
}
|
||||
for (n = 0; n < Inlines.silk_min(decControl.nChannelsAPI, decControl.nChannelsInternal); ++n) {
|
||||
ret += Resampler.silk_resampler(channel_state[n].resampler_state, resample_out, resample_out_ptr, samplesOut_tmp, samplesOut_tmp_ptrs[n] + 1, nSamplesOutDec.Val);
|
||||
if (decControl.nChannelsAPI != 2) continue;
|
||||
int nptr = samplesOut_ptr + n;
|
||||
for (i = 0; i < nSamplesOut.Val; ++i) {
|
||||
samplesOut[nptr + 2 * i] = resample_out[resample_out_ptr + i];
|
||||
}
|
||||
}
|
||||
if (decControl.nChannelsAPI == 2 && decControl.nChannelsInternal == 1) {
|
||||
if (stereo_to_mono) {
|
||||
ret += Resampler.silk_resampler(channel_state[1].resampler_state, resample_out, resample_out_ptr, samplesOut_tmp, samplesOut_tmp_ptrs[0] + 1, nSamplesOutDec.Val);
|
||||
for (i = 0; i < nSamplesOut.Val; ++i) {
|
||||
samplesOut[samplesOut_ptr + 1 + 2 * i] = resample_out[resample_out_ptr + i];
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < nSamplesOut.Val; ++i) {
|
||||
samplesOut[samplesOut_ptr + 1 + 2 * i] = samplesOut[samplesOut_ptr + 2 * i];
|
||||
}
|
||||
}
|
||||
}
|
||||
if (channel_state[0].prevSignalType == 2) {
|
||||
int[] mult_tab = new int[]{6, 4, 3};
|
||||
decControl.prevPitchLag = channel_state[0].lagPrev * mult_tab[channel_state[0].fs_kHz - 8 >> 2];
|
||||
} else {
|
||||
decControl.prevPitchLag = 0;
|
||||
}
|
||||
if (lostFlag == 1) {
|
||||
for (i = 0; i < psDec.nChannelsInternal; ++i) {
|
||||
psDec.channel_state[i].LastGainIndex = (byte)10;
|
||||
}
|
||||
} else {
|
||||
psDec.prev_decode_only_middle = decode_only_middle;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user