diff options
Diffstat (limited to 'lib/rbcodec/codecs/libopus')
-rw-r--r-- | lib/rbcodec/codecs/libopus/celt/celt.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/lib/rbcodec/codecs/libopus/celt/celt.c b/lib/rbcodec/codecs/libopus/celt/celt.c index 4a09cc9905..52a66d1b68 100644 --- a/lib/rbcodec/codecs/libopus/celt/celt.c +++ b/lib/rbcodec/codecs/libopus/celt/celt.c | |||
@@ -448,12 +448,16 @@ static void compute_inv_mdcts(const CELTMode *mode, int shortBlocks, celt_sig *X | |||
448 | clt_mdct_backward(&mode->mdct, &X[b+c*N2*B], x+N2*b, mode->window, overlap, shortBlocks ? mode->maxLM : mode->maxLM-LM, B); | 448 | clt_mdct_backward(&mode->mdct, &X[b+c*N2*B], x+N2*b, mode->window, overlap, shortBlocks ? mode->maxLM : mode->maxLM-LM, B); |
449 | } | 449 | } |
450 | 450 | ||
451 | for (j=0;j<overlap;j++) | 451 | /* overlap can be divided by 4 */ |
452 | out_mem[c][j] = x[j] + overlap_mem[c][j]; | 452 | for (j=0;j<overlap;j+=4) |
453 | for (;j<N;j++) | 453 | { |
454 | out_mem[c][j] = x[j]; | 454 | out_mem[c][j ] = x[j ] + overlap_mem[c][j ]; |
455 | for (j=0;j<overlap;j++) | 455 | out_mem[c][j+1] = x[j+1] + overlap_mem[c][j+1]; |
456 | overlap_mem[c][j] = x[N+j]; | 456 | out_mem[c][j+2] = x[j+2] + overlap_mem[c][j+2]; |
457 | out_mem[c][j+3] = x[j+3] + overlap_mem[c][j+3]; | ||
458 | } | ||
459 | OPUS_COPY(out_mem[c]+overlap, x+overlap, N-overlap); | ||
460 | OPUS_COPY(overlap_mem[c] , x+N , overlap); | ||
457 | } while (++c<C); | 461 | } while (++c<C); |
458 | RESTORE_STACK; | 462 | RESTORE_STACK; |
459 | } | 463 | } |