summaryrefslogtreecommitdiff
path: root/src/libfaad/bits.h
diff options
context:
space:
mode:
authorMiguel Freitas <miguelfreitas@users.sourceforge.net>2003-04-12 14:58:46 +0000
committerMiguel Freitas <miguelfreitas@users.sourceforge.net>2003-04-12 14:58:46 +0000
commitc40876878a3e1743738f4ce813330812d8bf49f0 (patch)
tree98a2b74bd2cb014b25a395e186a579687ce59447 /src/libfaad/bits.h
parent7be172b50ab8d2c90ac818bfe721e70c274d9880 (diff)
downloadxine-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.h40
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;