61
|
1 #include "mpg123.h"
|
|
2
|
|
3 #if 0
|
|
4 static void
|
|
5 check_buffer_range(int size)
|
|
6 {
|
|
7 int pos = (bsi.wordpointer - bsbuf) + (size >> 3);
|
|
8
|
|
9 if (pos >= fsizeold) {
|
|
10 fprintf(stderr, "Pointer out of range (%d,%d)!\n", pos, fsizeold);
|
|
11 }
|
|
12 }
|
|
13 #endif
|
|
14
|
|
15 void
|
|
16 mpg123_backbits(int number_of_bits)
|
|
17 {
|
|
18 bsi.bitindex -= number_of_bits;
|
|
19 bsi.wordpointer += (bsi.bitindex >> 3);
|
|
20 bsi.bitindex &= 0x7;
|
|
21 }
|
|
22
|
|
23 int
|
|
24 mpg123_getbitoffset(void)
|
|
25 {
|
|
26 return (-bsi.bitindex) & 0x7;
|
|
27 }
|
|
28
|
|
29 int
|
|
30 mpg123_getbyte(void)
|
|
31 {
|
|
32 #ifdef DEBUG_GETBITS
|
|
33 if (bsi.bitindex)
|
|
34 fprintf(stderr, "getbyte called unsynched!\n");
|
|
35 #endif
|
|
36 return *bsi.wordpointer++;
|
|
37 }
|
|
38
|
|
39 unsigned int
|
|
40 mpg123_getbits(int number_of_bits)
|
|
41 {
|
|
42 unsigned long rval;
|
|
43
|
|
44 #ifdef DEBUG_GETBITS
|
|
45 fprintf(stderr, "g%d", number_of_bits);
|
|
46 #endif
|
|
47
|
|
48 if (!number_of_bits)
|
|
49 return 0;
|
|
50
|
|
51 #if 0
|
|
52 check_buffer_range(number_of_bits + bsi.bitindex);
|
|
53 #endif
|
|
54
|
|
55 {
|
|
56 rval = bsi.wordpointer[0];
|
|
57 rval <<= 8;
|
|
58 rval |= bsi.wordpointer[1];
|
|
59 rval <<= 8;
|
|
60 rval |= bsi.wordpointer[2];
|
|
61
|
|
62 rval <<= bsi.bitindex;
|
|
63 rval &= 0xffffff;
|
|
64
|
|
65 bsi.bitindex += number_of_bits;
|
|
66
|
|
67 rval >>= (24 - number_of_bits);
|
|
68
|
|
69 bsi.wordpointer += (bsi.bitindex >> 3);
|
|
70 bsi.bitindex &= 7;
|
|
71 }
|
|
72
|
|
73 #ifdef DEBUG_GETBITS
|
|
74 fprintf(stderr, ":%x ", rval);
|
|
75 #endif
|
|
76
|
|
77 return rval;
|
|
78 }
|
|
79
|
|
80 unsigned int
|
|
81 mpg123_getbits_fast(int number_of_bits)
|
|
82 {
|
|
83 unsigned int rval;
|
|
84 #ifdef DEBUG_GETBITS
|
|
85 fprintf(stderr, "g%d", number_of_bits);
|
|
86 #endif
|
|
87
|
|
88 #if 0
|
|
89 check_buffer_range(number_of_bits + bsi.bitindex);
|
|
90 #endif
|
|
91
|
|
92 rval = (unsigned char) (bsi.wordpointer[0] << bsi.bitindex);
|
|
93 rval |= ((unsigned int) bsi.wordpointer[1] << bsi.bitindex) >> 8;
|
|
94 rval <<= number_of_bits;
|
|
95 rval >>= 8;
|
|
96
|
|
97 bsi.bitindex += number_of_bits;
|
|
98
|
|
99 bsi.wordpointer += (bsi.bitindex >> 3);
|
|
100 bsi.bitindex &= 7;
|
|
101
|
|
102 #ifdef DEBUG_GETBITS
|
|
103 fprintf(stderr, ":%x ", rval);
|
|
104 #endif
|
|
105 return rval;
|
|
106 }
|
|
107
|
|
108 unsigned int
|
|
109 mpg123_get1bit(void)
|
|
110 {
|
|
111 unsigned char rval;
|
|
112
|
|
113 #ifdef DEBUG_GETBITS
|
|
114 fprintf(stderr, "g%d", 1);
|
|
115 #endif
|
|
116
|
|
117 #if 0
|
|
118 check_buffer_range(1 + bsi.bitindex);
|
|
119 #endif
|
|
120
|
|
121 rval = *bsi.wordpointer << bsi.bitindex;
|
|
122
|
|
123 bsi.bitindex++;
|
|
124 bsi.wordpointer += (bsi.bitindex >> 3);
|
|
125 bsi.bitindex &= 7;
|
|
126
|
|
127 #ifdef DEBUG_GETBITS
|
|
128 fprintf(stderr, ":%d ", rval >> 7);
|
|
129 #endif
|
|
130
|
|
131 return rval >> 7;
|
|
132 }
|