Mercurial > libavcodec.hg
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); |