Mercurial > libavcodec.hg
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; |