1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
/*
* This does the same as getbits.c but with defines to
* force inlining
*/
#define mpg123_backbits(nob) \
do { \
bsi.bitindex -= nob; \
bsi.wordpointer += (bsi.bitindex >> 3); \
bsi.bitindex &= 0x7; \
} while (0)
#define mpg123_getbitoffset() ((-bsi.bitindex) & 0x7)
#define mpg123_getbyte() (*bsi.wordpointer++)
#define mpg123_getbits(nob) \
(rval = bsi.wordpointer[0], \
rval <<= 8, \
rval |= bsi.wordpointer[1], \
rval <<= 8, \
rval |= bsi.wordpointer[2], \
rval <<= bsi.bitindex, \
rval &= 0xffffff, \
bsi.bitindex += (nob), \
rval >>= (24-(nob)), \
bsi.wordpointer += (bsi.bitindex>>3), \
bsi.bitindex &= 7, \
rval)
#define mpg123_getbits_fast(nob) \
(rval = (unsigned char) (bsi.wordpointer[0] << bsi.bitindex), \
rval |= ((unsigned long) bsi.wordpointer[1] << bsi.bitindex) >> 8, \
rval <<= (nob), \
rval >>= 8, \
bsi.bitindex += (nob), \
bsi.wordpointer += (bsi.bitindex >> 3), \
bsi.bitindex &= 7, \
rval)
#define mpg123_get1bit() \
(rval_uc = *bsi.wordpointer << bsi.bitindex, \
bsi.bitindex++, \
bsi.wordpointer += (bsi.bitindex>>3), \
bsi.bitindex &= 7, \
rval_uc >> 7)
|