Mercurial > audlegacy-plugins
diff src/Input/mpg123/getbits.c @ 0:13389e613d67 trunk
[svn] - initial import of audacious-plugins tree (lots to do)
| author | nenolod |
|---|---|
| date | Mon, 18 Sep 2006 01:11:49 -0700 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/Input/mpg123/getbits.c Mon Sep 18 01:11:49 2006 -0700 @@ -0,0 +1,116 @@ +#include "mpg123.h" +#include "common.h" + +void mpgdec_backbits(struct bitstream_info *bitbuf,int number_of_bits) +{ + bitbuf->bitindex -= number_of_bits; + bitbuf->wordpointer += (bitbuf->bitindex>>3); + bitbuf->bitindex &= 0x7; +} + +int mpgdec_getbitoffset(struct bitstream_info *bitbuf) +{ + return (-bitbuf->bitindex)&0x7; +} + +int mpgdec_getbyte(struct bitstream_info *bitbuf) +{ +#ifdef DEBUG_GETBITS + if(bitbuf->bitindex) + fprintf(stderr,"getbyte called unsynched!\n"); +#endif + return *bitbuf->wordpointer++; +} + +unsigned int mpgdec_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 mpgdec_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]<<bitbuf->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 mpgdec_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; +} +
