00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifdef WORDS_BIGENDIAN
00026
00027 # define swab32(x) (x)
00028
00029 #else
00030
00031 # if 0 && defined (__i386__)
00032
00033 # define swab32(x) __i386_swab32(x)
00034 static inline const uint32_t __i386_swab32(uint32_t x)
00035 {
00036 __asm__("bswap %0" : "=r" (x) : "0" (x));
00037 return x;
00038 }
00039
00040 # else
00041
00042 # define swab32(x)\
00043 ((((uint8_t*)&x)[0] << 24) | (((uint8_t*)&x)[1] << 16) | \
00044 (((uint8_t*)&x)[2] << 8) | (((uint8_t*)&x)[3]))
00045
00046 # endif
00047 #endif
00048
00049 extern uint32_t a52_bits_left;
00050 extern uint32_t a52_current_word;
00051
00052 void a52_bitstream_set_ptr (uint8_t * buf);
00053 uint32_t a52_bitstream_get_bh(uint32_t num_bits);
00054 int32_t a52_bitstream_get_bh_2(uint32_t num_bits);
00055
00056 static inline uint32_t
00057 bitstream_get(uint32_t num_bits)
00058 {
00059 uint32_t result;
00060
00061 if(num_bits < a52_bits_left) {
00062 result = (a52_current_word << (32 - a52_bits_left)) >> (32 - num_bits);
00063 a52_bits_left -= num_bits;
00064 return result;
00065 }
00066
00067 return a52_bitstream_get_bh(num_bits);
00068 }
00069
00070 static inline int32_t
00071 bitstream_get_2(uint32_t num_bits)
00072 {
00073 int32_t result;
00074
00075 if(num_bits < a52_bits_left) {
00076 result = (((int32_t)a52_current_word) << (32 - a52_bits_left)) >> (32 - num_bits);
00077 a52_bits_left -= num_bits;
00078 return result;
00079 }
00080
00081 return a52_bitstream_get_bh_2(num_bits);
00082 }