summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/codecs/libcook/cook_fixpoint.h17
1 files changed, 14 insertions, 3 deletions
diff --git a/apps/codecs/libcook/cook_fixpoint.h b/apps/codecs/libcook/cook_fixpoint.h
index c2ab9299c6..7e3db8563b 100644
--- a/apps/codecs/libcook/cook_fixpoint.h
+++ b/apps/codecs/libcook/cook_fixpoint.h
@@ -268,9 +268,20 @@ static inline void imlt_math(COOKContext *q, FIXP *in)
268static inline void overlap_math(COOKContext *q, int gain, FIXP buffer[]) 268static inline void overlap_math(COOKContext *q, int gain, FIXP buffer[])
269{ 269{
270 int i; 270 int i;
271 for(i=0 ; i<q->samples_per_channel ; i++) { 271 if(LIKELY(gain == 0)){
272 q->mono_mdct_output[i] = 272 for(i=0 ; i<q->samples_per_channel ; i++) {
273 fixp_pow2(q->mono_mdct_output[i], gain) + buffer[i]; 273 q->mono_mdct_output[i] += buffer[i];
274 }
275
276 } else if (gain > 0){
277 for(i=0 ; i<q->samples_per_channel ; i++) {
278 q->mono_mdct_output[i] = (q->mono_mdct_output[i]<< gain) + buffer[i]; }
279
280 } else {
281 for(i=0 ; i<q->samples_per_channel ; i++) {
282 q->mono_mdct_output[i] =
283 (q->mono_mdct_output[i] >> -gain) + ((q->mono_mdct_output[i] >> (-gain-1)) & 1)+ buffer[i];
284 }
274 } 285 }
275} 286}
276 287