diff bitstream.c @ 5229:604a09d6cf2e libavcodec

move ff_copy_bits to bitstream.c
author aurel
date Fri, 06 Jul 2007 14:13:25 +0000
parents 470601203f44
children 2a340aea762d
line wrap: on
line diff
--- a/bitstream.c	Fri Jul 06 14:11:29 2007 +0000
+++ b/bitstream.c	Fri Jul 06 14:13:25 2007 +0000
@@ -60,6 +60,30 @@
         put_bits(pbc, 8, 0);
 }
 
+void ff_copy_bits(PutBitContext *pb, uint8_t *src, int length)
+{
+    const uint16_t *srcw= (uint16_t*)src;
+    int words= length>>4;
+    int bits= length&15;
+    int i;
+
+    if(length==0) return;
+
+    if(words < 16){
+        for(i=0; i<words; i++) put_bits(pb, 16, be2me_16(srcw[i]));
+    }else if(put_bits_count(pb)&7){
+        for(i=0; i<words; i++) put_bits(pb, 16, be2me_16(srcw[i]));
+    }else{
+        for(i=0; put_bits_count(pb)&31; i++)
+            put_bits(pb, 8, src[i]);
+        flush_put_bits(pb);
+        memcpy(pbBufPtr(pb), src+i, 2*words-i);
+        skip_put_bytes(pb, 2*words-i);
+    }
+
+    put_bits(pb, bits, be2me_16(srcw[words])>>(16-bits));
+}
+
 /* VLC decoding */
 
 //#define DEBUG_VLC