comparison adpcm.c @ 5877:aea495619138 libavcodec

fix predictor initialization for adpcm-ima encoder not to lose first sample in block in adpcm-ima decoder Patch by Timofei V. Bondarenko: tim ¡ò ipi, ac, ru Original thread: [FFmpeg-devel] [PATCH] adpcm-ima-wav header and codec Date: 10/15/2007 05:55 PM
author benoit
date Tue, 06 Nov 2007 13:08:04 +0000
parents b56df7a7204c
children ddb692c6b01d
comparison
equal deleted inserted replaced
5876:731ee5ad6bde 5877:aea495619138
449 bytestream_put_le16(&dst, c->status[0].prev_sample); 449 bytestream_put_le16(&dst, c->status[0].prev_sample);
450 *dst++ = (unsigned char)c->status[0].step_index; 450 *dst++ = (unsigned char)c->status[0].step_index;
451 *dst++ = 0; /* unknown */ 451 *dst++ = 0; /* unknown */
452 samples++; 452 samples++;
453 if (avctx->channels == 2) { 453 if (avctx->channels == 2) {
454 c->status[1].prev_sample = (signed short)samples[1]; 454 c->status[1].prev_sample = (signed short)samples[0];
455 /* c->status[1].step_index = 0; */ 455 /* c->status[1].step_index = 0; */
456 bytestream_put_le16(&dst, c->status[1].prev_sample); 456 bytestream_put_le16(&dst, c->status[1].prev_sample);
457 *dst++ = (unsigned char)c->status[1].step_index; 457 *dst++ = (unsigned char)c->status[1].step_index;
458 *dst++ = 0; 458 *dst++ = 0;
459 samples++; 459 samples++;
934 934
935 // samples_per_block= (block_align-4*chanels)*8 / (bits_per_sample * chanels) + 1; 935 // samples_per_block= (block_align-4*chanels)*8 / (bits_per_sample * chanels) + 1;
936 936
937 for(i=0; i<avctx->channels; i++){ 937 for(i=0; i<avctx->channels; i++){
938 cs = &(c->status[i]); 938 cs = &(c->status[i]);
939 cs->predictor = (int16_t)(src[0] + (src[1]<<8)); 939 cs->predictor = *samples++ = (int16_t)(src[0] + (src[1]<<8));
940 src+=2; 940 src+=2;
941
942 // XXX: is this correct ??: *samples++ = cs->predictor;
943 941
944 cs->step_index = *src++; 942 cs->step_index = *src++;
945 if (cs->step_index > 88){ 943 if (cs->step_index > 88){
946 av_log(avctx, AV_LOG_ERROR, "ERROR: step_index = %i\n", cs->step_index); 944 av_log(avctx, AV_LOG_ERROR, "ERROR: step_index = %i\n", cs->step_index);
947 cs->step_index = 88; 945 cs->step_index = 88;