diff options
Diffstat (limited to 'apps/codecs/Tremor/floor1.c')
-rw-r--r-- | apps/codecs/Tremor/floor1.c | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/apps/codecs/Tremor/floor1.c b/apps/codecs/Tremor/floor1.c index e01b08cd11..14515c27e6 100644 --- a/apps/codecs/Tremor/floor1.c +++ b/apps/codecs/Tremor/floor1.c | |||
@@ -197,17 +197,19 @@ static vorbis_look_floor *floor1_look(vorbis_dsp_state *vd,vorbis_info_mode *mi, | |||
197 | static int render_point(int x0,int x1,int y0,int y1,int x){ | 197 | static int render_point(int x0,int x1,int y0,int y1,int x){ |
198 | y0&=0x7fff; /* mask off flag */ | 198 | y0&=0x7fff; /* mask off flag */ |
199 | y1&=0x7fff; | 199 | y1&=0x7fff; |
200 | 200 | #if defined(CPU_COLDFIRE) && !defined(SIMULATOR) | |
201 | { | 201 | asm volatile ("sub.l %[x0],%[x];" |
202 | int dy=y1-y0; | 202 | "sub.l %[y0],%[y1];" |
203 | int adx=x1-x0; | 203 | "sub.l %[x0],%[x1];" |
204 | int ady=abs(dy); | 204 | "muls.l %[y1],%[x];" |
205 | int err=ady*(x-x0); | 205 | "divs.l %[x1],%[x];" |
206 | 206 | "add.l %[y0],%[x];" | |
207 | int off=err/adx; | 207 | : [x] "+d" (x), [x1] "+d" (x1), [y1] "+d" (y1) |
208 | if(dy<0)return(y0-off); | 208 | : [x0] "r" (x0), [y0] "r" (y0) ); |
209 | return(y0+off); | 209 | return x; |
210 | } | 210 | #else |
211 | return y0+((y1-y0)*(x-x0))/(x1-x0); | ||
212 | #endif | ||
211 | } | 213 | } |
212 | 214 | ||
213 | #ifdef _LOW_ACCURACY_ | 215 | #ifdef _LOW_ACCURACY_ |
@@ -217,7 +219,7 @@ static int render_point(int x0,int x1,int y0,int y1,int x){ | |||
217 | #endif | 219 | #endif |
218 | 220 | ||
219 | /* keep the floor lookup table in fast IRAM */ | 221 | /* keep the floor lookup table in fast IRAM */ |
220 | static ogg_int32_t FLOOR_fromdB_LOOKUP[256] IDATA_ATTR = { | 222 | static const ogg_int32_t FLOOR_fromdB_LOOKUP[256] ICONST_ATTR = { |
221 | XdB(0x000000e5), XdB(0x000000f4), XdB(0x00000103), XdB(0x00000114), | 223 | XdB(0x000000e5), XdB(0x000000f4), XdB(0x00000103), XdB(0x00000114), |
222 | XdB(0x00000126), XdB(0x00000139), XdB(0x0000014e), XdB(0x00000163), | 224 | XdB(0x00000126), XdB(0x00000139), XdB(0x0000014e), XdB(0x00000163), |
223 | XdB(0x0000017a), XdB(0x00000193), XdB(0x000001ad), XdB(0x000001c9), | 225 | XdB(0x0000017a), XdB(0x00000193), XdB(0x000001ad), XdB(0x000001c9), |
@@ -283,7 +285,7 @@ static ogg_int32_t FLOOR_fromdB_LOOKUP[256] IDATA_ATTR = { | |||
283 | XdB(0x52606733), XdB(0x57bad899), XdB(0x5d6e593a), XdB(0x6380b298), | 285 | XdB(0x52606733), XdB(0x57bad899), XdB(0x5d6e593a), XdB(0x6380b298), |
284 | XdB(0x69f80e9a), XdB(0x70dafda8), XdB(0x78307d76), XdB(0x7fffffff), | 286 | XdB(0x69f80e9a), XdB(0x70dafda8), XdB(0x78307d76), XdB(0x7fffffff), |
285 | }; | 287 | }; |
286 | 288 | ||
287 | static void render_line(int x0,register int x1,int y0,int y1,ogg_int32_t *d){ | 289 | static void render_line(int x0,register int x1,int y0,int y1,ogg_int32_t *d){ |
288 | int dy=y1-y0; | 290 | int dy=y1-y0; |
289 | register int x=x0; | 291 | register int x=x0; |
@@ -310,6 +312,7 @@ static void render_line(int x0,register int x1,int y0,int y1,ogg_int32_t *d){ | |||
310 | } | 312 | } |
311 | } | 313 | } |
312 | 314 | ||
315 | static void *floor1_inverse1(vorbis_block *vb,vorbis_look_floor *in) ICODE_ATTR; | ||
313 | static void *floor1_inverse1(vorbis_block *vb,vorbis_look_floor *in){ | 316 | static void *floor1_inverse1(vorbis_block *vb,vorbis_look_floor *in){ |
314 | vorbis_look_floor1 *look=(vorbis_look_floor1 *)in; | 317 | vorbis_look_floor1 *look=(vorbis_look_floor1 *)in; |
315 | vorbis_info_floor1 *info=look->vi; | 318 | vorbis_info_floor1 *info=look->vi; |
@@ -387,7 +390,6 @@ static void *floor1_inverse1(vorbis_block *vb,vorbis_look_floor *in){ | |||
387 | }else{ | 390 | }else{ |
388 | fit_value[i]=predicted|0x8000; | 391 | fit_value[i]=predicted|0x8000; |
389 | } | 392 | } |
390 | |||
391 | } | 393 | } |
392 | 394 | ||
393 | return(fit_value); | 395 | return(fit_value); |
@@ -397,6 +399,8 @@ static void *floor1_inverse1(vorbis_block *vb,vorbis_look_floor *in){ | |||
397 | } | 399 | } |
398 | 400 | ||
399 | static int floor1_inverse2(vorbis_block *vb,vorbis_look_floor *in,void *memo, | 401 | static int floor1_inverse2(vorbis_block *vb,vorbis_look_floor *in,void *memo, |
402 | ogg_int32_t *out) ICODE_ATTR; | ||
403 | static int floor1_inverse2(vorbis_block *vb,vorbis_look_floor *in,void *memo, | ||
400 | ogg_int32_t *out){ | 404 | ogg_int32_t *out){ |
401 | vorbis_look_floor1 *look=(vorbis_look_floor1 *)in; | 405 | vorbis_look_floor1 *look=(vorbis_look_floor1 *)in; |
402 | vorbis_info_floor1 *info=look->vi; | 406 | vorbis_info_floor1 *info=look->vi; |
@@ -433,7 +437,7 @@ static int floor1_inverse2(vorbis_block *vb,vorbis_look_floor *in,void *memo, | |||
433 | } | 437 | } |
434 | 438 | ||
435 | /* export hooks */ | 439 | /* export hooks */ |
436 | vorbis_func_floor floor1_exportbundle = { | 440 | const vorbis_func_floor floor1_exportbundle ICONST_ATTR = { |
437 | &floor1_unpack,&floor1_look,&floor1_free_info, | 441 | &floor1_unpack,&floor1_look,&floor1_free_info, |
438 | &floor1_free_look,&floor1_inverse1,&floor1_inverse2 | 442 | &floor1_free_look,&floor1_inverse1,&floor1_inverse2 |
439 | }; | 443 | }; |