diff --git a/libcelt/celt.c b/libcelt/celt.c index 306613ec..f6962142 100644 --- a/libcelt/celt.c +++ b/libcelt/celt.c @@ -547,15 +547,18 @@ int celt_encode_float(CELTEncoder * restrict st, const celt_sig_t * pcm, celt_si compute_mdcts(st->mode, shortBlocks, in, freq); if (shortBlocks && !transient_shift) { - celt_word32_t sum[4]; - int m=0; - do { - sum[m] = 1; - celt_word32_t tmp=0; - for (i=m;imode->nbShortMdcts) - tmp += ABS32(freq[i]); - sum[m++] = tmp; - } while (mmode->nbShortMdcts); + celt_word32_t sum[4]={1,1,1,1}; + int m; + for (c=0;cmode->nbShortMdcts) + tmp += ABS32(freq[i]); + sum[m++] += tmp; + } while (mmode->nbShortMdcts); + } m=0; #ifdef FIXED_POINT do { @@ -570,8 +573,13 @@ int celt_encode_float(CELTEncoder * restrict st, const celt_sig_t * pcm, celt_si } m++; } while (mmode->nbShortMdcts-1); - for (i=1;imode->nbShortMdcts;m++) + for (i=m*C+c;imode->nbShortMdcts) + freq[i] = SHR32(freq[i],mdct_weight_shift); + } #else do { if (sum[m+1] > 8*sum[m]) @@ -587,9 +595,10 @@ int celt_encode_float(CELTEncoder * restrict st, const celt_sig_t * pcm, celt_si } while (mmode->nbShortMdcts-1); if (mdct_weight_shift) { - for (m=mdct_weight_pos+1;mmode->nbShortMdcts;m++) - for (i=m;imode->nbShortMdcts) - freq[i] = (1./(1<mode->nbShortMdcts;m++) + for (i=m*C+c;imode->nbShortMdcts) + freq[i] = (1./(1<mode->nbShortMdcts;m++) - for (i=m;imode->nbShortMdcts) + for (c=0;cmode->nbShortMdcts;m++) + for (i=m*C+c;imode->nbShortMdcts) #ifdef FIXED_POINT - freq[i] = SHL32(freq[i], mdct_weight_shift); + freq[i] = SHL32(freq[i], mdct_weight_shift); #else - freq[i] = (1<mode, shortBlocks, freq, transient_time, transient_shift, st->out_mem); @@ -1251,12 +1261,13 @@ int celt_decode_float(CELTDecoder * restrict st, const unsigned char *data, int if (mdct_weight_shift) { int m; - for (m=mdct_weight_pos+1;mmode->nbShortMdcts;m++) - for (i=m;imode->nbShortMdcts) + for (c=0;cmode->nbShortMdcts;m++) + for (i=m*C+c;imode->nbShortMdcts) #ifdef FIXED_POINT - freq[i] = SHL32(freq[i], mdct_weight_shift); + freq[i] = SHL32(freq[i], mdct_weight_shift); #else - freq[i] = (1<