comparison Plugins/Input/mpg123/getbits.c @ 61:fa848bd484d8 trunk

[svn] Move plugins to Plugins/
author nenolod
date Fri, 28 Oct 2005 22:58:11 -0700
parents
children 05d824e30afd
comparison
equal deleted inserted replaced
60:1771f253e1b2 61:fa848bd484d8
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 }