From e2de64d6f1beb9e492daf5b886e19933c1fa41dd Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdemultimedia@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- mpg123_artsplugin/mpg123/getbits.c | 116 +++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 mpg123_artsplugin/mpg123/getbits.c (limited to 'mpg123_artsplugin/mpg123/getbits.c') diff --git a/mpg123_artsplugin/mpg123/getbits.c b/mpg123_artsplugin/mpg123/getbits.c new file mode 100644 index 00000000..3ed993cb --- /dev/null +++ b/mpg123_artsplugin/mpg123/getbits.c @@ -0,0 +1,116 @@ +#include "mpg123.h" +#include "common.h" + +void backbits(struct bitstream_info *bitbuf,int number_of_bits) +{ + bitbuf->bitindex -= number_of_bits; + bitbuf->wordpointer += (bitbuf->bitindex>>3); + bitbuf->bitindex &= 0x7; +} + +int getbitoffset(struct bitstream_info *bitbuf) +{ + return (-bitbuf->bitindex)&0x7; +} + +int getbyte(struct bitstream_info *bitbuf) +{ +#ifdef DEBUG_GETBITS + if(bitbuf->bitindex) + fprintf(stderr,"getbyte called unsynched!\n"); +#endif + return *bitbuf->wordpointer++; +} + +unsigned int getbits(struct bitstream_info *bitbuf,int number_of_bits) +{ + unsigned long rval; + +#ifdef DEBUG_GETBITS +fprintf(stderr,"g%d",number_of_bits); +#endif + + if(!number_of_bits) + return 0; + +#if 0 + check_buffer_range(number_of_bits+bitbuf->bitindex); +#endif + + { + rval = bitbuf->wordpointer[0]; + rval <<= 8; + rval |= bitbuf->wordpointer[1]; + rval <<= 8; + rval |= bitbuf->wordpointer[2]; + + rval <<= bitbuf->bitindex; + rval &= 0xffffff; + + bitbuf->bitindex += number_of_bits; + + rval >>= (24-number_of_bits); + + bitbuf->wordpointer += (bitbuf->bitindex>>3); + bitbuf->bitindex &= 7; + } + +#ifdef DEBUG_GETBITS +fprintf(stderr,":%x ",rval); +#endif + + return rval; +} + +unsigned int getbits_fast(struct bitstream_info *bitbuf,int number_of_bits) +{ + unsigned int rval; +#ifdef DEBUG_GETBITS +fprintf(stderr,"g%d",number_of_bits); +#endif + +#if 0 + check_buffer_range(number_of_bits+bitbuf->bitindex); +#endif + + rval = (unsigned char) (bitbuf->wordpointer[0] << bitbuf->bitindex); + rval |= ((unsigned int) bitbuf->wordpointer[1]<bitindex)>>8; + rval <<= number_of_bits; + rval >>= 8; + + bitbuf->bitindex += number_of_bits; + + bitbuf->wordpointer += (bitbuf->bitindex>>3); + bitbuf->bitindex &= 7; + +#ifdef DEBUG_GETBITS +fprintf(stderr,":%x ",rval); +#endif + return rval; +} + +unsigned int get1bit(struct bitstream_info *bitbuf) +{ + unsigned char rval; + +#ifdef DEBUG_GETBITS +fprintf(stderr,"g%d",1); +#endif + +#if 0 + check_buffer_range(1+bitbuf->bitindex); +#endif + + rval = *(bitbuf->wordpointer) << bitbuf->bitindex; + + bitbuf->bitindex++; + bitbuf->wordpointer += (bitbuf->bitindex>>3); + bitbuf->bitindex &= 7; + +#ifdef DEBUG_GETBITS +fprintf(stderr,":%d ",rval>>7); +#endif + + return rval>>7; +} + -- cgit v1.2.1