Mercurial > mplayer.hg
diff libfaad2/bits.h @ 12527:4a370c80fe5c
update to the 2.0 release of faad, patch by adland
author | diego |
---|---|
date | Wed, 02 Jun 2004 22:59:04 +0000 |
parents | 3185f64f6350 |
children | d81145997036 |
line wrap: on
line diff
--- a/libfaad2/bits.h Wed Jun 02 22:52:00 2004 +0000 +++ b/libfaad2/bits.h Wed Jun 02 22:59:04 2004 +0000 @@ -1,6 +1,6 @@ /* ** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding -** Copyright (C) 2003 M. Bakker, Ahead Software AG, http://www.nero.com +** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by @@ -56,9 +56,9 @@ } bitfile; -#if defined (_WIN32) && !defined(_WIN32_WCE) && !defined(__GNUC__) +#if defined (_WIN32) && !defined(_WIN32_WCE) && !defined(__MINGW32__) #define BSWAP(a) __asm mov eax,a __asm bswap eax __asm mov a, eax -#elif defined(ARCH_X86) && (defined(DJGPP) || defined(__GNUC__)) +#elif defined(LINUX) || defined(DJGPP) #define BSWAP(a) __asm__ ( "bswapl %0\n" : "=r" (a) : "0" (a) ) #else #define BSWAP(a) \ @@ -71,9 +71,11 @@ 0x1FFFF, 0x3FFFF, 0x7FFFF, 0xFFFFF, 0x1FFFFF, 0x3FFFFF, 0x7FFFFF, 0xFFFFFF, 0x1FFFFFF, 0x3FFFFFF, 0x7FFFFFF, 0xFFFFFFF, 0x1FFFFFFF, 0x3FFFFFFF, 0x7FFFFFFF + /* added bitmask 32, correct?!?!?! */ + , 0xFFFFFFFF }; -void faad_initbits(bitfile *ld, void *buffer, uint32_t buffer_size); +void faad_initbits(bitfile *ld, const void *buffer, const uint32_t buffer_size); void faad_endbits(bitfile *ld); void faad_initbits_rev(bitfile *ld, void *buffer, uint32_t bits_in_buffer); @@ -83,20 +85,36 @@ void faad_rewindbits(bitfile *ld); uint8_t *faad_getbitbuffer(bitfile *ld, uint32_t bits DEBUGDEC); +#ifdef DRM +void *faad_origbitbuffer(bitfile *ld); +uint32_t faad_origbitbuffer_size(bitfile *ld); +#endif /* circumvent memory alignment errors on ARM */ static INLINE uint32_t getdword(void *mem) { #ifdef ARM uint32_t tmp; +#ifndef ARCH_IS_BIG_ENDIAN + ((uint8_t*)&tmp)[0] = ((uint8_t*)mem)[3]; + ((uint8_t*)&tmp)[1] = ((uint8_t*)mem)[2]; + ((uint8_t*)&tmp)[2] = ((uint8_t*)mem)[1]; + ((uint8_t*)&tmp)[3] = ((uint8_t*)mem)[0]; +#else ((uint8_t*)&tmp)[0] = ((uint8_t*)mem)[0]; ((uint8_t*)&tmp)[1] = ((uint8_t*)mem)[1]; ((uint8_t*)&tmp)[2] = ((uint8_t*)mem)[2]; ((uint8_t*)&tmp)[3] = ((uint8_t*)mem)[3]; +#endif return tmp; #else - return *(uint32_t*)mem; + uint32_t tmp; + tmp = *(uint32_t*)mem; +#ifndef ARCH_IS_BIG_ENDIAN + BSWAP(tmp); +#endif + return tmp; #endif } @@ -107,8 +125,8 @@ return (ld->bufa >> (ld->bits_left - bits)) & bitmask[bits]; } - bits -= ld->bits_left; - return ((ld->bufa & bitmask[ld->bits_left]) << bits) | (ld->bufb >> (32 - bits)); + bits -= ld->bits_left; + return ((ld->bufa & bitmask[ld->bits_left]) << bits) | (ld->bufb >> (32 - bits)); } static INLINE void faad_flushbits(bitfile *ld, uint32_t bits) @@ -148,12 +166,20 @@ { uint8_t r; - if (ld->bits_left == 0) - return (uint8_t)faad_getbits(ld, 1 DEBUGVAR(print,var,dbg)); + if (ld->bits_left > 0) + { + ld->bits_left--; + r = (uint8_t)((ld->bufa >> ld->bits_left) & 1); + return r; + } - ld->bits_left--; - r = (uint8_t)((ld->bufa >> ld->bits_left) & 1); - + /* bits_left == 0 */ +#if 0 + r = (uint8_t)(ld->bufb >> 31); + faad_flushbits_ex(ld, 1); +#else + r = (uint8_t)faad_getbits(ld, 1); +#endif return r; } @@ -200,9 +226,6 @@ ld->bufa = ld->bufb; tmp = getdword(ld->start); -#ifndef ARCH_IS_BIG_ENDIAN - BSWAP(tmp); -#endif ld->bufb = tmp; ld->start--; ld->bits_left += (32 - bits); @@ -248,7 +271,7 @@ faad_rewindbits(ld); - CRC = ~faad_getbits(ld, 8 + CRC = (uint8_t) ~faad_getbits(ld, 8 DEBUGVAR(1,999,"faad_check_CRC(): CRC")); /* CRC is stored inverted */ for (; len>0; len--)