[Ffmpeg-cvslog] r8713 - trunk/libavcodec/adpcm.c

banan subversion
Wed Apr 11 15:10:14 CEST 2007


Author: banan
Date: Wed Apr 11 15:10:13 2007
New Revision: 8713

Modified:
   trunk/libavcodec/adpcm.c

Log:
Per reference swf/flv adpcm encoder.


Modified: trunk/libavcodec/adpcm.c
==============================================================================
--- trunk/libavcodec/adpcm.c	(original)
+++ trunk/libavcodec/adpcm.c	Wed Apr 11 15:10:13 2007
@@ -182,6 +182,9 @@ static int adpcm_encode_init(AVCodecCont
         avctx->frame_size = BLKSIZE * avctx->channels;
         avctx->block_align = BLKSIZE;
         break;
+    case CODEC_ID_ADPCM_SWF:
+        avctx->frame_size = 4*BLKSIZE * avctx->channels;
+        break;
     default:
         return -1;
         break;
@@ -513,6 +516,31 @@ static int adpcm_encode_frame(AVCodecCon
                 samples += 8 * avctx->channels;
             }
         break;
+    case CODEC_ID_ADPCM_SWF:
+    {
+        int i;
+        PutBitContext pb;
+        init_put_bits(&pb, dst, buf_size*8);
+
+        //Store AdpcmCodeSize
+        put_bits(&pb, 2, 2);                //Set 4bits flash adpcm format
+
+        //Init the encoder state
+        for(i=0; i<avctx->channels; i++){
+            put_bits(&pb, 16, samples[i] & 0xFFFF);
+            put_bits(&pb, 6, c->status[i].step_index & 0x3F);
+            c->status[i].prev_sample = (signed short)samples[i];
+        }
+
+        for (i=0 ; i<4096 ; i++) {
+            put_bits(&pb, 4, adpcm_ima_compress_sample(&c->status[0], samples[avctx->channels*i]) & 0xF);
+            if (avctx->channels == 2)
+                put_bits(&pb, 4, adpcm_ima_compress_sample(&c->status[1], samples[2*i+1]) & 0xF);
+        }
+
+        dst += (3 + 2048) * avctx->channels;
+        break;
+    }
     case CODEC_ID_ADPCM_MS:
         for(i=0; i<avctx->channels; i++){
             int predictor=0;




More information about the ffmpeg-cvslog mailing list