internal static void unquant_energy_finalise(CeltMode m, int start, int end, int[] oldEBands, int[] fine_quant, int[] fine_priority, int bits_left, EntropyCoder dec, int C) { int i, prio, c; /* Use up the remaining bits */ for (prio = 0; prio < 2; prio++) { for (i = start; i < end && bits_left >= C; i++) { if (fine_quant[i] >= CeltConstants.MAX_FINE_BITS || fine_priority[i] != prio) { continue; } c = 0; do { int q2; int offset; q2 = (int)dec.dec_bits(1); offset = Inlines.SHR16((Inlines.SHL16((q2), CeltConstants.DB_SHIFT) - ((short)(0.5 + (.5f) * (((int)1) << (CeltConstants.DB_SHIFT)))) /*Inlines.QCONST16(.5f, CeltConstants.DB_SHIFT)*/), fine_quant[i] + 1); oldEBands[i + c * m.nbEBands] += offset; bits_left--; } while (++c < C); } } }
internal static void unquant_fine_energy(CeltMode m, int start, int end, int[] oldEBands, int[] fine_quant, EntropyCoder dec, int C) { int i, c; /* Decode finer resolution */ for (i = start; i < end; i++) { if (fine_quant[i] <= 0) { continue; } c = 0; do { int q2; int offset; q2 = (int)dec.dec_bits((uint)fine_quant[i]); offset = Inlines.SUB16((Inlines.SHR32( Inlines.SHL32(q2, CeltConstants.DB_SHIFT) + ((short)(0.5 + (.5f) * (((int)1) << (CeltConstants.DB_SHIFT)))) /*Inlines.QCONST16(.5f, CeltConstants.DB_SHIFT)*/, fine_quant[i])), ((short)(0.5 + (.5f) * (((int)1) << (CeltConstants.DB_SHIFT)))) /*Inlines.QCONST16(.5f, CeltConstants.DB_SHIFT)*/); // opus bug: unnecessary extend32 oldEBands[i + c * m.nbEBands] += offset; } while (++c < C); } }