comparison ra288.c @ 7192:9517beb3b491 libavcodec

Simplify
author vitor
date Fri, 04 Jul 2008 15:32:04 +0000
parents 98c5f3839e9b
children 3ab9c2bc0413
comparison
equal deleted inserted replaced
7191:98c5f3839e9b 7192:9517beb3b491
36 float sb[41]; 36 float sb[41];
37 float lhist[10]; 37 float lhist[10];
38 } Real288_internal; 38 } Real288_internal;
39 39
40 /* Decode and produce output */ 40 /* Decode and produce output */
41 static void decode(Real288_internal *glob, int amp_coef, int cb_coef) 41 static void decode(Real288_internal *glob, float gain, int cb_coef)
42 { 42 {
43 unsigned int x, y; 43 unsigned int x, y;
44 float f; 44 float f;
45 double sum, sumsum; 45 double sum, sumsum;
46 float *p1, *p2; 46 float *p1, *p2;
54 for (sum=0, y=36; y--; sum -= (*(++p1))*(*(p2++))); 54 for (sum=0, y=36; y--; sum -= (*(++p1))*(*(p2++)));
55 55
56 glob->sb[x] = sum; 56 glob->sb[x] = sum;
57 } 57 }
58 58
59 f = amptable[amp_coef];
60
61 /* convert log and do rms */ 59 /* convert log and do rms */
62 for (sum=32, x=10; x--; sum -= glob->pr2[x] * glob->lhist[x]); 60 for (sum=32, x=10; x--; sum -= glob->pr2[x] * glob->lhist[x]);
63 61
64 if (sum < 0) 62 if (sum < 0)
65 sum = 0; 63 sum = 0;
66 else if (sum > 60) 64 else if (sum > 60)
67 sum = 60; 65 sum = 60;
68 66
69 sumsum = exp(sum * 0.1151292546497) * f; /* pow(10.0,sum/20)*f */ 67 sumsum = exp(sum * 0.1151292546497) * gain; /* pow(10.0,sum/20)*f */
70 68
71 for (sum=0, x=5; x--;) { 69 for (sum=0, x=5; x--;) {
72 buffer[x] = codetable[cb_coef][x] * sumsum; 70 buffer[x] = codetable[cb_coef][x] * sumsum;
73 sum += buffer[x] * buffer[x]; 71 sum += buffer[x] * buffer[x];
74 } 72 }
221 } 219 }
222 220
223 init_get_bits(&gb, buf, avctx->block_align * 8); 221 init_get_bits(&gb, buf, avctx->block_align * 8);
224 222
225 for (x=0; x < 32; x++) { 223 for (x=0; x < 32; x++) {
226 int amp_coef = get_bits(&gb, 3); 224 float gain = amptable[get_bits(&gb, 3)];
227 int cb_coef = get_bits(&gb, 6 + (x&1)); 225 int cb_coef = get_bits(&gb, 6 + (x&1));
228 glob->phasep = (glob->phase = x & 7) * 5; 226 glob->phasep = (glob->phase = x & 7) * 5;
229 decode(glob, amp_coef, cb_coef); 227 decode(glob, gain, cb_coef);
230 228
231 for (y=0; y<5; *(out++) = 8 * glob->output[glob->phasep+(y++)]); 229 for (y=0; y<5; *(out++) = 8 * glob->output[glob->phasep+(y++)]);
232 230
233 if (glob->phase == 3) 231 if (glob->phase == 3)
234 update(glob); 232 update(glob);