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;