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;