Browse code

adx: simplify encoding by using put_sbits()

Justin Ruggles authored on 2011/11/21 06:49:13
Showing 1 changed files
... ...
@@ -22,6 +22,7 @@
22 22
 #include "libavutil/intreadwrite.h"
23 23
 #include "avcodec.h"
24 24
 #include "adx.h"
25
+#include "put_bits.h"
25 26
 
26 27
 /**
27 28
  * @file
... ...
@@ -37,6 +38,7 @@
37 37
 static void adx_encode(ADXContext *c, unsigned char *adx, const short *wav,
38 38
                        ADXChannelState *prev)
39 39
 {
40
+    PutBitContext pb;
40 41
     int scale;
41 42
     int i;
42 43
     int s0,s1,s2,d;
... ...
@@ -72,9 +74,10 @@ static void adx_encode(ADXContext *c, unsigned char *adx, const short *wav,
72 72
 
73 73
     AV_WB16(adx, scale);
74 74
 
75
-    for(i=0;i<16;i++) {
76
-        adx[i+2] = ((data[i*2]/scale)<<4) | ((data[i*2+1]/scale)&0xf);
77
-    }
75
+    init_put_bits(&pb, adx + 2, 16);
76
+    for (i = 0; i < 32; i++)
77
+        put_sbits(&pb, 4, av_clip(data[i]/scale, -8, 7));
78
+    flush_put_bits(&pb);
78 79
 }
79 80
 
80 81
 static int adx_encode_header(AVCodecContext *avctx,unsigned char *buf,size_t bufsize)