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 void a52_bitstream_set_ptr (a52_state_t * state, uint8_t * buf);
00050 uint32_t a52_bitstream_get_bh (a52_state_t * state, uint32_t num_bits);
00051 int32_t a52_bitstream_get_bh_2 (a52_state_t * state, uint32_t num_bits);
00052
00053 static inline uint32_t bitstream_get (a52_state_t * state, uint32_t num_bits)
00054 {
00055 uint32_t result;
00056
00057 if (num_bits < state->bits_left) {
00058 result = (state->current_word << (32 - state->bits_left)) >> (32 - num_bits);
00059 state->bits_left -= num_bits;
00060 return result;
00061 }
00062
00063 return a52_bitstream_get_bh (state, num_bits);
00064 }
00065
00066 static inline int32_t bitstream_get_2 (a52_state_t * state, uint32_t num_bits)
00067 {
00068 int32_t result;
00069
00070 if (num_bits < state->bits_left) {
00071 result = (((int32_t)state->current_word) << (32 - state->bits_left)) >> (32 - num_bits);
00072 state->bits_left -= num_bits;
00073 return result;
00074 }
00075
00076 return a52_bitstream_get_bh_2 (state, num_bits);
00077 }