~ubuntu-branches/ubuntu/lucid/mpg123/lucid

« back to all changes in this revision

Viewing changes to getbits.c

Tags: upstream-0.60
ImportĀ upstreamĀ versionĀ 0.60

Show diffs side-by-side

added added

removed removed

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