comparison libmpcodecs/ad_imaadpcm.c @ 27121:237e683b7480

Half size for adpcm_index
author reimar
date Sun, 29 Jun 2008 09:14:26 +0000
parents ea18c012330a
children f8e189f9e119
comparison
equal deleted inserted replaced
27120:ea18c012330a 27121:237e683b7480
48 2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358, 48 2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358,
49 5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899, 49 5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899,
50 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767 50 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767
51 }; 51 };
52 52
53 static const int8_t adpcm_index[16] = 53 static const int8_t adpcm_index[8] =
54 { 54 {
55 -1, -1, -1, -1, 2, 4, 6, 8, 55 -1, -1, -1, -1, 2, 4, 6, 8,
56 -1, -1, -1, -1, 2, 4, 6, 8
57 }; 56 };
58 57
59 // useful macros 58 // useful macros
60 // clamp a number between 0 and 88 59 // clamp a number between 0 and 88
61 #define CLAMP_0_TO_88(x) x = av_clip(x, 0, 88); 60 #define CLAMP_0_TO_88(x) x = av_clip(x, 0, 88);
142 step[1] = adpcm_step[index[1]]; 141 step[1] = adpcm_step[index[1]];
143 142
144 for (i = 0; i < output_size; i++) 143 for (i = 0; i < output_size; i++)
145 { 144 {
146 delta = output[i]; 145 delta = output[i];
146 sign = delta & 8;
147 delta = delta & 7;
147 148
148 index[channel_number] += adpcm_index[delta]; 149 index[channel_number] += adpcm_index[delta];
149 CLAMP_0_TO_88(index[channel_number]); 150 CLAMP_0_TO_88(index[channel_number]);
150 151
151 sign = delta & 8;
152 delta = delta & 7;
153 delta = 2 * delta + 1; 152 delta = 2 * delta + 1;
154 if (sign) delta = -delta; 153 if (sign) delta = -delta;
155 154
156 predictor[channel_number] += (delta * step[channel_number]) >> 3; 155 predictor[channel_number] += (delta * step[channel_number]) >> 3;
157 156