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 }