Mercurial > libavcodec.hg
comparison adpcm.c @ 5370:bbb982818ce7 libavcodec
Calculate the correct blocksize for flash adpcm. Patch by Baptiste
Coudurier.
author | banan |
---|---|
date | Wed, 18 Jul 2007 18:35:03 +0000 |
parents | 0244bba24b43 |
children | 74680ec68fd1 |
comparison
equal
deleted
inserted
replaced
5369:04a241c308e8 | 5370:bbb982818ce7 |
---|---|
181 case CODEC_ID_ADPCM_YAMAHA: | 181 case CODEC_ID_ADPCM_YAMAHA: |
182 avctx->frame_size = BLKSIZE * avctx->channels; | 182 avctx->frame_size = BLKSIZE * avctx->channels; |
183 avctx->block_align = BLKSIZE; | 183 avctx->block_align = BLKSIZE; |
184 break; | 184 break; |
185 case CODEC_ID_ADPCM_SWF: | 185 case CODEC_ID_ADPCM_SWF: |
186 avctx->frame_size = 4*BLKSIZE * avctx->channels; | 186 if (avctx->sample_rate != 11025 && |
187 avctx->sample_rate != 22050 && | |
188 avctx->sample_rate != 44100) { | |
189 av_log(avctx, AV_LOG_ERROR, "Sample rate must be 11025, 22050 or 44100\n"); | |
190 return -1; | |
191 } | |
192 avctx->frame_size = 512 * (avctx->sample_rate / 11025); | |
187 break; | 193 break; |
188 default: | 194 default: |
189 return -1; | 195 return -1; |
190 break; | 196 break; |
191 } | 197 } |
528 put_bits(&pb, 16, samples[i] & 0xFFFF); | 534 put_bits(&pb, 16, samples[i] & 0xFFFF); |
529 put_bits(&pb, 6, c->status[i].step_index & 0x3F); | 535 put_bits(&pb, 6, c->status[i].step_index & 0x3F); |
530 c->status[i].prev_sample = (signed short)samples[i]; | 536 c->status[i].prev_sample = (signed short)samples[i]; |
531 } | 537 } |
532 | 538 |
533 for (i=0 ; i<4096 ; i++) { | 539 for (i=0; i<avctx->frame_size; i++) { |
534 put_bits(&pb, 4, adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels*i]) & 0xF); | 540 put_bits(&pb, 4, adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels*i]) & 0xF); |
535 if (avctx->channels == 2) | 541 if (avctx->channels == 2) |
536 put_bits(&pb, 4, adpcm_ima_compress_sample(&c->status[1], samples[2*i+1]) & 0xF); | 542 put_bits(&pb, 4, adpcm_ima_compress_sample(&c->status[1], samples[2*i+1]) & 0xF); |
537 } | 543 } |
538 | 544 flush_put_bits(&pb); |
539 dst += (3 + 2048) * avctx->channels; | 545 dst += put_bits_count(&pb)>>3; |
540 break; | 546 break; |
541 } | 547 } |
542 case CODEC_ID_ADPCM_MS: | 548 case CODEC_ID_ADPCM_MS: |
543 for(i=0; i<avctx->channels; i++){ | 549 for(i=0; i<avctx->channels; i++){ |
544 int predictor=0; | 550 int predictor=0; |