adx: simplify encoding by using put_sbits()
authorJustin Ruggles <justin.ruggles@gmail.com>
Sun, 20 Nov 2011 21:49:13 +0000 (16:49 -0500)
committerJustin Ruggles <justin.ruggles@gmail.com>
Sat, 26 Nov 2011 21:25:07 +0000 (16:25 -0500)
libavcodec/adxenc.c

index b85a70d..ae4b9f7 100644 (file)
@@ -22,6 +22,7 @@
 #include "libavutil/intreadwrite.h"
 #include "avcodec.h"
 #include "adx.h"
 #include "libavutil/intreadwrite.h"
 #include "avcodec.h"
 #include "adx.h"
+#include "put_bits.h"
 
 /**
  * @file
 
 /**
  * @file
@@ -37,6 +38,7 @@
 static void adx_encode(ADXContext *c, unsigned char *adx, const short *wav,
                        ADXChannelState *prev)
 {
 static void adx_encode(ADXContext *c, unsigned char *adx, const short *wav,
                        ADXChannelState *prev)
 {
+    PutBitContext pb;
     int scale;
     int i;
     int s0,s1,s2,d;
     int scale;
     int i;
     int s0,s1,s2,d;
@@ -72,9 +74,10 @@ static void adx_encode(ADXContext *c, unsigned char *adx, const short *wav,
 
     AV_WB16(adx, scale);
 
 
     AV_WB16(adx, scale);
 
-    for(i=0;i<16;i++) {
-        adx[i+2] = ((data[i*2]/scale)<<4) | ((data[i*2+1]/scale)&0xf);
-    }
+    init_put_bits(&pb, adx + 2, 16);
+    for (i = 0; i < 32; i++)
+        put_sbits(&pb, 4, av_clip(data[i]/scale, -8, 7));
+    flush_put_bits(&pb);
 }
 
 static int adx_encode_header(AVCodecContext *avctx,unsigned char *buf,size_t bufsize)
 }
 
 static int adx_encode_header(AVCodecContext *avctx,unsigned char *buf,size_t bufsize)