diff options
author | Miguel Freitas <miguelfreitas@users.sourceforge.net> | 2003-04-12 14:58:46 +0000 |
---|---|---|
committer | Miguel Freitas <miguelfreitas@users.sourceforge.net> | 2003-04-12 14:58:46 +0000 |
commit | c40876878a3e1743738f4ce813330812d8bf49f0 (patch) | |
tree | 98a2b74bd2cb014b25a395e186a579687ce59447 /src/libfaad/bits.h | |
parent | 7be172b50ab8d2c90ac818bfe721e70c274d9880 (diff) | |
download | xine-lib-c40876878a3e1743738f4ce813330812d8bf49f0.tar.gz xine-lib-c40876878a3e1743738f4ce813330812d8bf49f0.tar.bz2 |
sync to faad2 cvs, remove some warnings.
CVS patchset: 4592
CVS date: 2003/04/12 14:58:46
Diffstat (limited to 'src/libfaad/bits.h')
-rw-r--r-- | src/libfaad/bits.h | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/src/libfaad/bits.h b/src/libfaad/bits.h index cdf83b539..dfb5ca659 100644 --- a/src/libfaad/bits.h +++ b/src/libfaad/bits.h @@ -16,7 +16,7 @@ ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ** -** $Id: bits.h,v 1.3 2002/12/16 18:59:53 miguelfreitas Exp $ +** $Id: bits.h,v 1.4 2003/04/12 14:58:46 miguelfreitas Exp $ **/ #ifndef __BITS_H__ @@ -41,6 +41,9 @@ typedef struct _bitfile uint32_t bufb; uint32_t bits_left; uint32_t buffer_size; /* size of the buffer in bytes */ + uint32_t bytes_used; + uint8_t no_more_reading; + uint8_t error; uint32_t *tail; uint32_t *start; void *buffer; @@ -103,6 +106,10 @@ static INLINE uint32_t faad_showbits(bitfile *ld, uint32_t bits) static INLINE void faad_flushbits(bitfile *ld, uint32_t bits) { + /* do nothing if error */ + if (ld->error != 0) + return; + if (bits < ld->bits_left) { ld->bits_left -= bits; @@ -117,6 +124,11 @@ static INLINE void faad_flushbits(bitfile *ld, uint32_t bits) #endif ld->bufb = tmp; ld->bits_left += (32 - bits); + ld->bytes_used += 4; + if (ld->bytes_used == ld->buffer_size) + ld->no_more_reading = 1; + if (ld->bytes_used > ld->buffer_size) + ld->error = 1; } } @@ -125,6 +137,9 @@ static INLINE uint32_t faad_getbits(bitfile *ld, uint32_t n DEBUGDEC) { uint32_t ret; + if (ld->no_more_reading) + return 0; + if (n == 0) return 0; @@ -141,7 +156,15 @@ static INLINE uint32_t faad_getbits(bitfile *ld, uint32_t n DEBUGDEC) static INLINE uint8_t faad_get1bit(bitfile *ld DEBUGDEC) { - return (uint8_t)faad_getbits(ld, 1 DEBUGVAR(print,var,dbg)); + uint8_t r; + + if (ld->bits_left == 0) + return (uint8_t)faad_getbits(ld, 1 DEBUGVAR(print,var,dbg)); + + ld->bits_left--; + r = (ld->bufa >> ld->bits_left) & 1; + + return r; } /* reversed bitreading routines */ @@ -175,6 +198,10 @@ static INLINE uint32_t faad_showbits_rev(bitfile *ld, uint32_t bits) static INLINE void faad_flushbits_rev(bitfile *ld, uint32_t bits) { + /* do nothing if error */ + if (ld->error != 0) + return; + if (bits < ld->bits_left) { ld->bits_left -= bits; @@ -189,6 +216,12 @@ static INLINE void faad_flushbits_rev(bitfile *ld, uint32_t bits) ld->bufb = tmp; ld->start--; ld->bits_left += (32 - bits); + + ld->bytes_used += 4; + if (ld->bytes_used == ld->buffer_size) + ld->no_more_reading = 1; + if (ld->bytes_used > ld->buffer_size) + ld->error = 1; } } @@ -197,6 +230,9 @@ static INLINE uint32_t faad_getbits_rev(bitfile *ld, uint32_t n { uint32_t ret; + if (ld->no_more_reading) + return 0; + if (n == 0) return 0; |