diff options
Diffstat (limited to 'apps/codecs/libtremor/floor0.c')
-rw-r--r-- | apps/codecs/libtremor/floor0.c | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/apps/codecs/libtremor/floor0.c b/apps/codecs/libtremor/floor0.c index cceb113a6b..9c890e6bad 100644 --- a/apps/codecs/libtremor/floor0.c +++ b/apps/codecs/libtremor/floor0.c | |||
@@ -74,7 +74,7 @@ static inline ogg_int32_t vorbis_coslook_i(long a){ | |||
74 | int i=a>>COS_LOOKUP_I_SHIFT; | 74 | int i=a>>COS_LOOKUP_I_SHIFT; |
75 | int d=a&COS_LOOKUP_I_MASK; | 75 | int d=a&COS_LOOKUP_I_MASK; |
76 | return COS_LOOKUP_I[i]- ((d*(COS_LOOKUP_I[i]-COS_LOOKUP_I[i+1]))>> | 76 | return COS_LOOKUP_I[i]- ((d*(COS_LOOKUP_I[i]-COS_LOOKUP_I[i+1]))>> |
77 | COS_LOOKUP_I_SHIFT); | 77 | COS_LOOKUP_I_SHIFT); |
78 | } | 78 | } |
79 | 79 | ||
80 | /* interpolated lookup based cos function */ | 80 | /* interpolated lookup based cos function */ |
@@ -181,7 +181,7 @@ static void vorbis_lsp_to_curve(ogg_int32_t *curve,int *map,int n,int ln, | |||
181 | qi=((qi*qi)>>16); | 181 | qi=((qi*qi)>>16); |
182 | 182 | ||
183 | if(m&1){ | 183 | if(m&1){ |
184 | qexp= qexp*2-28*((m+1)>>1)+m; | 184 | qexp= qexp*2-28*((m+1)>>1)+m; |
185 | pi*=(1<<14)-((wi*wi)>>14); | 185 | pi*=(1<<14)-((wi*wi)>>14); |
186 | qi+=pi>>14; | 186 | qi+=pi>>14; |
187 | }else{ | 187 | }else{ |
@@ -205,15 +205,15 @@ static void vorbis_lsp_to_curve(ogg_int32_t *curve,int *map,int n,int ln, | |||
205 | 205 | ||
206 | for(j=3;j<m;j+=2){ | 206 | for(j=3;j<m;j+=2){ |
207 | if(!(shift=MLOOP_1[(pi|qi)>>25])) | 207 | if(!(shift=MLOOP_1[(pi|qi)>>25])) |
208 | if(!(shift=MLOOP_2[(pi|qi)>>19])) | 208 | if(!(shift=MLOOP_2[(pi|qi)>>19])) |
209 | shift=MLOOP_3[(pi|qi)>>16]; | 209 | shift=MLOOP_3[(pi|qi)>>16]; |
210 | qi=(qi>>shift)*labs(ilsp[j-1]-wi); | 210 | qi=(qi>>shift)*labs(ilsp[j-1]-wi); |
211 | pi=(pi>>shift)*labs(ilsp[j]-wi); | 211 | pi=(pi>>shift)*labs(ilsp[j]-wi); |
212 | qexp+=shift; | 212 | qexp+=shift; |
213 | } | 213 | } |
214 | if(!(shift=MLOOP_1[(pi|qi)>>25])) | 214 | if(!(shift=MLOOP_1[(pi|qi)>>25])) |
215 | if(!(shift=MLOOP_2[(pi|qi)>>19])) | 215 | if(!(shift=MLOOP_2[(pi|qi)>>19])) |
216 | shift=MLOOP_3[(pi|qi)>>16]; | 216 | shift=MLOOP_3[(pi|qi)>>16]; |
217 | 217 | ||
218 | /* pi,qi normalized collectively, both tracked using qexp */ | 218 | /* pi,qi normalized collectively, both tracked using qexp */ |
219 | 219 | ||
@@ -225,8 +225,8 @@ static void vorbis_lsp_to_curve(ogg_int32_t *curve,int *map,int n,int ln, | |||
225 | qexp+=shift; | 225 | qexp+=shift; |
226 | 226 | ||
227 | if(!(shift=MLOOP_1[(pi|qi)>>25])) | 227 | if(!(shift=MLOOP_1[(pi|qi)>>25])) |
228 | if(!(shift=MLOOP_2[(pi|qi)>>19])) | 228 | if(!(shift=MLOOP_2[(pi|qi)>>19])) |
229 | shift=MLOOP_3[(pi|qi)>>16]; | 229 | shift=MLOOP_3[(pi|qi)>>16]; |
230 | 230 | ||
231 | pi>>=shift; | 231 | pi>>=shift; |
232 | qi>>=shift; | 232 | qi>>=shift; |
@@ -243,7 +243,7 @@ static void vorbis_lsp_to_curve(ogg_int32_t *curve,int *map,int n,int ln, | |||
243 | /* even order filter; still symmetric */ | 243 | /* even order filter; still symmetric */ |
244 | 244 | ||
245 | /* p*=p(1-w), q*=q(1+w), let normalization drift because it isn't | 245 | /* p*=p(1-w), q*=q(1+w), let normalization drift because it isn't |
246 | worth tracking step by step */ | 246 | worth tracking step by step */ |
247 | 247 | ||
248 | pi>>=shift; | 248 | pi>>=shift; |
249 | qi>>=shift; | 249 | qi>>=shift; |
@@ -268,15 +268,15 @@ static void vorbis_lsp_to_curve(ogg_int32_t *curve,int *map,int n,int ln, | |||
268 | qi>>=1; qexp++; | 268 | qi>>=1; qexp++; |
269 | }else | 269 | }else |
270 | while(qi && !(qi&0x8000)){ /* checks for 0.0xxxxxxxxxxxxxxx or less*/ | 270 | while(qi && !(qi&0x8000)){ /* checks for 0.0xxxxxxxxxxxxxxx or less*/ |
271 | qi<<=1; qexp--; | 271 | qi<<=1; qexp--; |
272 | } | 272 | } |
273 | 273 | ||
274 | #endif | 274 | #endif |
275 | 275 | ||
276 | amp=vorbis_fromdBlook_i(ampi* /* n.4 */ | 276 | amp=vorbis_fromdBlook_i(ampi* /* n.4 */ |
277 | vorbis_invsqlook_i(qi,qexp)- | 277 | vorbis_invsqlook_i(qi,qexp)- |
278 | /* m.8, m+n<=8 */ | 278 | /* m.8, m+n<=8 */ |
279 | ampoffseti); /* 8.12[0] */ | 279 | ampoffseti); /* 8.12[0] */ |
280 | 280 | ||
281 | #ifdef _LOW_ACCURACY_ | 281 | #ifdef _LOW_ACCURACY_ |
282 | amp>>=9; | 282 | amp>>=9; |
@@ -366,7 +366,7 @@ static vorbis_look_floor *floor0_look (vorbis_dsp_state *vd,vorbis_info_mode *mi | |||
366 | for(j=0;j<look->n;j++){ | 366 | for(j=0;j<look->n;j++){ |
367 | 367 | ||
368 | int val=(look->ln* | 368 | int val=(look->ln* |
369 | ((toBARK(info->rate/2*j/look->n)<<11)/toBARK(info->rate/2)))>>11; | 369 | ((toBARK(info->rate/2*j/look->n)<<11)/toBARK(info->rate/2)))>>11; |
370 | 370 | ||
371 | if(val>=look->ln)val=look->ln-1; /* guard against the approximation */ | 371 | if(val>=look->ln)val=look->ln-1; /* guard against the approximation */ |
372 | look->linearmap[j]=val; | 372 | look->linearmap[j]=val; |
@@ -398,10 +398,10 @@ static void *floor0_inverse1(vorbis_block *vb,vorbis_look_floor *i){ | |||
398 | ogg_int32_t *lsp=(ogg_int32_t *)_vorbis_block_alloc(vb,sizeof(*lsp)*(look->m+1)); | 398 | ogg_int32_t *lsp=(ogg_int32_t *)_vorbis_block_alloc(vb,sizeof(*lsp)*(look->m+1)); |
399 | 399 | ||
400 | for(j=0;j<look->m;j+=b->dim) | 400 | for(j=0;j<look->m;j+=b->dim) |
401 | if(vorbis_book_decodev_set(b,lsp+j,&vb->opb,b->dim,-24)==-1)goto eop; | 401 | if(vorbis_book_decodev_set(b,lsp+j,&vb->opb,b->dim,-24)==-1)goto eop; |
402 | for(j=0;j<look->m;){ | 402 | for(j=0;j<look->m;){ |
403 | for(k=0;k<b->dim;k++,j++)lsp[j]+=last; | 403 | for(k=0;k<b->dim;k++,j++)lsp[j]+=last; |
404 | last=lsp[j-1]; | 404 | last=lsp[j-1]; |
405 | } | 405 | } |
406 | 406 | ||
407 | lsp[look->m]=amp; | 407 | lsp[look->m]=amp; |
@@ -413,7 +413,7 @@ static void *floor0_inverse1(vorbis_block *vb,vorbis_look_floor *i){ | |||
413 | } | 413 | } |
414 | 414 | ||
415 | static int floor0_inverse2(vorbis_block *vb,vorbis_look_floor *i, | 415 | static int floor0_inverse2(vorbis_block *vb,vorbis_look_floor *i, |
416 | void *memo,ogg_int32_t *out){ | 416 | void *memo,ogg_int32_t *out){ |
417 | vorbis_look_floor0 *look=(vorbis_look_floor0 *)i; | 417 | vorbis_look_floor0 *look=(vorbis_look_floor0 *)i; |
418 | vorbis_info_floor0 *info=look->vi; | 418 | vorbis_info_floor0 *info=look->vi; |
419 | (void)vb; | 419 | (void)vb; |
@@ -424,7 +424,7 @@ static int floor0_inverse2(vorbis_block *vb,vorbis_look_floor *i, | |||
424 | 424 | ||
425 | /* take the coefficients back to a spectral envelope curve */ | 425 | /* take the coefficients back to a spectral envelope curve */ |
426 | vorbis_lsp_to_curve(out,look->linearmap,look->n,look->ln, | 426 | vorbis_lsp_to_curve(out,look->linearmap,look->n,look->ln, |
427 | lsp,look->m,amp,info->ampdB,look->lsp_look); | 427 | lsp,look->m,amp,info->ampdB,look->lsp_look); |
428 | return(1); | 428 | return(1); |
429 | } | 429 | } |
430 | memset(out,0,sizeof(*out)*look->n); | 430 | memset(out,0,sizeof(*out)*look->n); |