Mercurial > libavcodec.hg
comparison adpcm.c @ 4840:a743c46500d4 libavcodec
Per reference swf/flv adpcm encoder.
author | banan |
---|---|
date | Wed, 11 Apr 2007 13:10:13 +0000 |
parents | ae2f8c9bc25d |
children | bff60ecc02f9 |
comparison
equal
deleted
inserted
replaced
4839:1a5c08c07cfb | 4840:a743c46500d4 |
---|---|
179 avctx->block_align = BLKSIZE; | 179 avctx->block_align = BLKSIZE; |
180 break; | 180 break; |
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; | |
185 case CODEC_ID_ADPCM_SWF: | |
186 avctx->frame_size = 4*BLKSIZE * avctx->channels; | |
184 break; | 187 break; |
185 default: | 188 default: |
186 return -1; | 189 return -1; |
187 break; | 190 break; |
188 } | 191 } |
511 dst++; | 514 dst++; |
512 } | 515 } |
513 samples += 8 * avctx->channels; | 516 samples += 8 * avctx->channels; |
514 } | 517 } |
515 break; | 518 break; |
519 case CODEC_ID_ADPCM_SWF: | |
520 { | |
521 int i; | |
522 PutBitContext pb; | |
523 init_put_bits(&pb, dst, buf_size*8); | |
524 | |
525 //Store AdpcmCodeSize | |
526 put_bits(&pb, 2, 2); //Set 4bits flash adpcm format | |
527 | |
528 //Init the encoder state | |
529 for(i=0; i<avctx->channels; i++){ | |
530 put_bits(&pb, 16, samples[i] & 0xFFFF); | |
531 put_bits(&pb, 6, c->status[i].step_index & 0x3F); | |
532 c->status[i].prev_sample = (signed short)samples[i]; | |
533 } | |
534 | |
535 for (i=0 ; i<4096 ; i++) { | |
536 put_bits(&pb, 4, adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels*i]) & 0xF); | |
537 if (avctx->channels == 2) | |
538 put_bits(&pb, 4, adpcm_ima_compress_sample(&c->status[1], samples[2*i+1]) & 0xF); | |
539 } | |
540 | |
541 dst += (3 + 2048) * avctx->channels; | |
542 break; | |
543 } | |
516 case CODEC_ID_ADPCM_MS: | 544 case CODEC_ID_ADPCM_MS: |
517 for(i=0; i<avctx->channels; i++){ | 545 for(i=0; i<avctx->channels; i++){ |
518 int predictor=0; | 546 int predictor=0; |
519 | 547 |
520 *dst++ = predictor; | 548 *dst++ = predictor; |