Mercurial > libavcodec.hg
comparison flac.c @ 1813:ec0e71b1fc3a libavcodec
remove residual array, it isnt really needed
author | michael |
---|---|
date | Wed, 18 Feb 2004 02:00:55 +0000 |
parents | 6d762acfff5d |
children | 4804dddf2d0e |
comparison
equal
deleted
inserted
replaced
1812:6d762acfff5d | 1813:ec0e71b1fc3a |
---|---|
50 int samplerate, channels; | 50 int samplerate, channels; |
51 int blocksize/*, last_blocksize*/; | 51 int blocksize/*, last_blocksize*/; |
52 int bps, curr_bps; | 52 int bps, curr_bps; |
53 enum channel_order order; | 53 enum channel_order order; |
54 | 54 |
55 int32_t *residual[MAX_CHANNELS]; | |
56 int32_t *decoded[MAX_CHANNELS]; | 55 int32_t *decoded[MAX_CHANNELS]; |
57 uint8_t *bitstream; | 56 uint8_t *bitstream; |
58 int bitstream_size; | 57 int bitstream_size; |
59 int bitstream_index; | 58 int bitstream_index; |
60 int allocated_bitstream_size; | 59 int allocated_bitstream_size; |
118 } | 117 } |
119 | 118 |
120 for (i = 0; i < s->channels; i++) | 119 for (i = 0; i < s->channels; i++) |
121 { | 120 { |
122 s->decoded[i] = av_realloc(s->decoded[i], sizeof(int32_t)*s->max_blocksize); | 121 s->decoded[i] = av_realloc(s->decoded[i], sizeof(int32_t)*s->max_blocksize); |
123 s->residual[i] = av_realloc(s->residual[i], sizeof(int32_t)*s->max_blocksize); | |
124 } | 122 } |
125 | 123 |
126 s->bitstream= av_fast_realloc(s->bitstream, &s->allocated_bitstream_size, s->max_framesize); | 124 s->bitstream= av_fast_realloc(s->bitstream, &s->allocated_bitstream_size, s->max_framesize); |
127 // s->bitstream= av_realloc(s->bitstream, s->max_framesize); | 125 // s->bitstream= av_realloc(s->bitstream, s->max_framesize); |
128 } | 126 } |
174 if (tmp == 15) | 172 if (tmp == 15) |
175 { | 173 { |
176 av_log(s->avctx, AV_LOG_DEBUG, "fixed len partition\n"); | 174 av_log(s->avctx, AV_LOG_DEBUG, "fixed len partition\n"); |
177 tmp = get_bits(&s->gb, 5); | 175 tmp = get_bits(&s->gb, 5); |
178 for (; i < samples; i++, sample++) | 176 for (; i < samples; i++, sample++) |
179 s->residual[channel][sample] = get_sbits(&s->gb, tmp); | 177 s->decoded[channel][sample] = get_sbits(&s->gb, tmp); |
180 } | 178 } |
181 else | 179 else |
182 { | 180 { |
183 // av_log(s->avctx, AV_LOG_DEBUG, "rice coded partition k=%d\n", tmp); | 181 // av_log(s->avctx, AV_LOG_DEBUG, "rice coded partition k=%d\n", tmp); |
184 for (; i < samples; i++, sample++){ | 182 for (; i < samples; i++, sample++){ |
185 s->residual[channel][sample] = get_sr_golomb_flac(&s->gb, tmp, INT_MAX, 0); | 183 s->decoded[channel][sample] = get_sr_golomb_flac(&s->gb, tmp, INT_MAX, 0); |
186 if(get_bits_count(&s->gb) > s->gb.size_in_bits){ | 184 if(get_bits_count(&s->gb) > s->gb.size_in_bits){ |
187 av_log(s->avctx, AV_LOG_ERROR, "fucking FLAC\n"); | 185 av_log(s->avctx, AV_LOG_ERROR, "fucking FLAC\n"); |
188 return -1; | 186 return -1; |
189 } | 187 } |
190 } | 188 } |
216 return -1; | 214 return -1; |
217 | 215 |
218 switch(pred_order) | 216 switch(pred_order) |
219 { | 217 { |
220 case 0: | 218 case 0: |
221 for (i = pred_order; i < s->blocksize; i++) | |
222 s->decoded[channel][i] = s->residual[channel][i]; | |
223 break; | 219 break; |
224 case 1: | 220 case 1: |
225 for (i = pred_order; i < s->blocksize; i++) | 221 for (i = pred_order; i < s->blocksize; i++) |
226 s->decoded[channel][i] = s->residual[channel][i] + | 222 s->decoded[channel][i] += s->decoded[channel][i-1]; |
227 s->decoded[channel][i-1]; | |
228 break; | 223 break; |
229 case 2: | 224 case 2: |
230 for (i = pred_order; i < s->blocksize; i++) | 225 for (i = pred_order; i < s->blocksize; i++) |
231 s->decoded[channel][i] = s->residual[channel][i] + | 226 s->decoded[channel][i] += 2*s->decoded[channel][i-1] |
232 (s->decoded[channel][i-1] << 1) - | 227 - s->decoded[channel][i-2]; |
233 s->decoded[channel][i-2]; | |
234 break; | 228 break; |
235 case 3: | 229 case 3: |
236 for (i = pred_order; i < s->blocksize; i++) | 230 for (i = pred_order; i < s->blocksize; i++) |
237 s->decoded[channel][i] = s->residual[channel][i] + | 231 s->decoded[channel][i] += 3*s->decoded[channel][i-1] |
238 3*(s->decoded[channel][i-1] - s->decoded[channel][i-2]) | 232 - 3*s->decoded[channel][i-2] |
239 + s->decoded[channel][i-3]; | 233 + s->decoded[channel][i-3]; |
240 break; | 234 break; |
241 case 4: | 235 case 4: |
242 for (i = pred_order; i < s->blocksize; i++) | 236 for (i = pred_order; i < s->blocksize; i++) |
243 s->decoded[channel][i] = s->residual[channel][i] + | 237 s->decoded[channel][i] += 4*s->decoded[channel][i-1] |
244 ((s->decoded[channel][i-1] + | 238 - 6*s->decoded[channel][i-2] |
245 s->decoded[channel][i-3]) << 2) - | 239 + 4*s->decoded[channel][i-3] |
246 ((s->decoded[channel][i-2] << 2) + | 240 - s->decoded[channel][i-4]; |
247 (s->decoded[channel][i-2] << 1)) - | |
248 s->decoded[channel][i-4]; | |
249 break; | 241 break; |
250 default: | 242 default: |
251 av_log(s->avctx, AV_LOG_ERROR, "illegal pred order %d\n", pred_order); | 243 av_log(s->avctx, AV_LOG_ERROR, "illegal pred order %d\n", pred_order); |
252 return -1; | 244 return -1; |
253 } | 245 } |
294 for (i = pred_order; i < s->blocksize; i++) | 286 for (i = pred_order; i < s->blocksize; i++) |
295 { | 287 { |
296 sum = 0; | 288 sum = 0; |
297 for (j = 0; j < pred_order; j++) | 289 for (j = 0; j < pred_order; j++) |
298 sum += coeffs[j] * s->decoded[channel][i-j-1]; | 290 sum += coeffs[j] * s->decoded[channel][i-j-1]; |
299 s->decoded[channel][i] = s->residual[channel][i] + (sum >> qlevel); | 291 s->decoded[channel][i] += sum >> qlevel; |
300 } | 292 } |
301 | 293 |
302 return 0; | 294 return 0; |
303 } | 295 } |
304 | 296 |
500 for (i = 0; i < s->channels; i++) | 492 for (i = 0; i < s->channels; i++) |
501 { | 493 { |
502 /* if (s->blocksize != s->last_blocksize) | 494 /* if (s->blocksize != s->last_blocksize) |
503 { | 495 { |
504 s->decoded[i] = av_realloc(s->decoded[i], sizeof(uint32_t)*s->blocksize); | 496 s->decoded[i] = av_realloc(s->decoded[i], sizeof(uint32_t)*s->blocksize); |
505 s->residual[i] = av_realloc(s->residual[i], sizeof(uint8_t)*s->blocksize); | |
506 }*/ | 497 }*/ |
507 // av_log(s->avctx, AV_LOG_DEBUG, "decoded: %x residual: %x\n", s->decoded[i], s->residual[i]); | 498 // av_log(s->avctx, AV_LOG_DEBUG, "decoded: %x residual: %x\n", s->decoded[i], s->residual[i]); |
508 if (decode_subframe(s, i) < 0) | 499 if (decode_subframe(s, i) < 0) |
509 return -1; | 500 return -1; |
510 } | 501 } |
714 int i; | 705 int i; |
715 | 706 |
716 for (i = 0; i < s->channels; i++) | 707 for (i = 0; i < s->channels; i++) |
717 { | 708 { |
718 av_freep(&s->decoded[i]); | 709 av_freep(&s->decoded[i]); |
719 av_freep(&s->residual[i]); | |
720 } | 710 } |
721 av_freep(&s->bitstream); | 711 av_freep(&s->bitstream); |
722 | 712 |
723 return 0; | 713 return 0; |
724 } | 714 } |