diff options
author | Aurelien Jacobs <aurel@gnuage.org> | 2007-07-06 14:13:25 +0000 |
---|---|---|
committer | Aurelien Jacobs <aurel@gnuage.org> | 2007-07-06 14:13:25 +0000 |
commit | 98f7b56bb6562db841219a42ea4e15d43a835c93 (patch) | |
tree | 610fa0bffb5ad5a5ede46e21b6b6c3d883f62489 /libavcodec/bitstream.c | |
parent | 3662aa766f8ca086d8a23a9372d51706c86c2ec7 (diff) | |
download | ffmpeg-98f7b56bb6562db841219a42ea4e15d43a835c93.tar.gz |
move ff_copy_bits to bitstream.c
Originally committed as revision 9503 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/bitstream.c')
-rw-r--r-- | libavcodec/bitstream.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/libavcodec/bitstream.c b/libavcodec/bitstream.c index 8e5d15aceb..79a3f6c2f1 100644 --- a/libavcodec/bitstream.c +++ b/libavcodec/bitstream.c @@ -60,6 +60,30 @@ void ff_put_string(PutBitContext * pbc, char *s, int put_zero) 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 |