Mercurial > libavcodec.hg
comparison ra144.c @ 6807:c19ef48adf18 libavcodec
Do not copy tables to a context var, use them directly
| author | vitor |
|---|---|
| date | Thu, 15 May 2008 18:36:12 +0000 |
| parents | e4be053e7d9b |
| children | c5ecf570f1b1 |
comparison
equal
deleted
inserted
replaced
| 6806:e4be053e7d9b | 6807:c19ef48adf18 |
|---|---|
| 46 | 46 |
| 47 unsigned int buffer[5]; | 47 unsigned int buffer[5]; |
| 48 unsigned short int buffer_2[148]; | 48 unsigned short int buffer_2[148]; |
| 49 | 49 |
| 50 unsigned short *sptr; | 50 unsigned short *sptr; |
| 51 | |
| 52 signed short wavtable1[2304]; | |
| 53 unsigned short wavtable2[2304]; | |
| 54 } Real144_internal; | 51 } Real144_internal; |
| 55 | 52 |
| 56 static int ra144_decode_init(AVCodecContext * avctx) | 53 static int ra144_decode_init(AVCodecContext * avctx) |
| 57 { | 54 { |
| 58 Real144_internal *glob = avctx->priv_data; | 55 Real144_internal *glob = avctx->priv_data; |
| 59 | 56 |
| 60 glob->swapbuf1 = glob->swapbuffers[0]; | 57 glob->swapbuf1 = glob->swapbuffers[0]; |
| 61 glob->swapbuf2 = glob->swapbuffers[1]; | 58 glob->swapbuf2 = glob->swapbuffers[1]; |
| 62 glob->swapbuf1alt = glob->swapbuffers[2]; | 59 glob->swapbuf1alt = glob->swapbuffers[2]; |
| 63 glob->swapbuf2alt = glob->swapbuffers[3]; | 60 glob->swapbuf2alt = glob->swapbuffers[3]; |
| 64 | |
| 65 memcpy(glob->wavtable1, wavtable1, sizeof(wavtable1)); | |
| 66 memcpy(glob->wavtable2, wavtable2, sizeof(wavtable2)); | |
| 67 | 61 |
| 68 return 0; | 62 return 0; |
| 69 } | 63 } |
| 70 | 64 |
| 71 static void final(Real144_internal *glob, short *i1, short *i2, void *out, int *statbuf, int len); | 65 static void final(Real144_internal *glob, short *i1, short *i2, void *out, int *statbuf, int len); |
| 181 | 175 |
| 182 /* multiply/add wavetable */ | 176 /* multiply/add wavetable */ |
| 183 static void add_wav(Real144_internal *glob, int n, int f, int m1, int m2, | 177 static void add_wav(Real144_internal *glob, int n, int f, int m1, int m2, |
| 184 int m3, short *s1, short *s2, short *s3, short *dest) | 178 int m3, short *s1, short *s2, short *s3, short *dest) |
| 185 { | 179 { |
| 186 int a, b, c; | 180 int a, b, c, i; |
| 187 short *ptr, *ptr2; | 181 const short *ptr, *ptr2; |
| 188 | 182 |
| 189 ptr = glob->wavtable1 + n * 9; | 183 ptr = wavtable1 + n * 9; |
| 190 ptr2 = glob->wavtable2 + n * 9; | 184 ptr2 = wavtable2 + n * 9; |
| 191 | 185 |
| 192 if (f != 0) | 186 if (f != 0) |
| 193 a = ((*ptr) * m1) >> ((*ptr2) + 1); | 187 a = ((*ptr) * m1) >> ((*ptr2) + 1); |
| 194 else | 188 else |
| 195 a = 0; | 189 a = 0; |
| 198 ptr2++; | 192 ptr2++; |
| 199 b = ((*ptr) * m2) >> ((*ptr2) + 1); | 193 b = ((*ptr) * m2) >> ((*ptr2) + 1); |
| 200 ptr++; | 194 ptr++; |
| 201 ptr2++; | 195 ptr2++; |
| 202 c = ((*ptr) * m3) >> ((*ptr2) + 1); | 196 c = ((*ptr) * m3) >> ((*ptr2) + 1); |
| 203 ptr2 = (ptr = dest) + BLOCKSIZE; | |
| 204 | 197 |
| 205 if (f != 0) | 198 if (f != 0) |
| 206 while (ptr < ptr2) | 199 for (i=0; i < BLOCKSIZE; i++) |
| 207 *(ptr++) = ((*(s1++)) * a + (*(s2++)) * b + (*(s3++)) * c) >> 12; | 200 dest[i] = ((*(s1++)) * a + (*(s2++)) * b + (*(s3++)) * c) >> 12; |
| 208 else | 201 else |
| 209 while (ptr < ptr2) | 202 for (i=0; i < BLOCKSIZE; i++) |
| 210 *(ptr++) = ((*(s2++)) * b + (*(s3++)) * c) >> 12; | 203 dest[i] = ((*(s2++)) * b + (*(s3++)) * c) >> 12; |
| 211 } | 204 } |
| 212 | 205 |
| 213 | 206 |
| 214 static void final(Real144_internal *glob, short *i1, short *i2, void *out, | 207 static void final(Real144_internal *glob, short *i1, short *i2, void *out, |
| 215 int *statbuf, int len) | 208 int *statbuf, int len) |
