Lines Matching refs:bits

48 EXPORT void speex_bits_init(SpeexBits *bits)
50 bits->chars = (char*)speex_alloc(MAX_CHARS_PER_FRAME);
51 if (!bits->chars)
54 bits->buf_size = MAX_CHARS_PER_FRAME;
56 bits->owner=1;
58 speex_bits_reset(bits);
61 EXPORT void speex_bits_init_buffer(SpeexBits *bits, void *buff, int buf_size)
63 bits->chars = (char*)buff;
64 bits->buf_size = buf_size;
66 bits->owner=0;
68 speex_bits_reset(bits);
71 EXPORT void speex_bits_set_bit_buffer(SpeexBits *bits, void *buff, int buf_size)
73 bits->chars = (char*)buff;
74 bits->buf_size = buf_size;
76 bits->owner=0;
78 bits->nbBits=buf_size<<LOG2_BITS_PER_CHAR;
79 bits->charPtr=0;
80 bits->bitPtr=0;
81 bits->overflow=0;
85 EXPORT void speex_bits_destroy(SpeexBits *bits)
87 if (bits->owner)
88 speex_free(bits->chars);
92 EXPORT void speex_bits_reset(SpeexBits *bits)
95 bits->chars[0]=0;
96 bits->nbBits=0;
97 bits->charPtr=0;
98 bits->bitPtr=0;
99 bits->overflow=0;
102 EXPORT void speex_bits_rewind(SpeexBits *bits)
104 bits->charPtr=0;
105 bits->bitPtr=0;
106 bits->overflow=0;
109 EXPORT void speex_bits_read_from(SpeexBits *bits, char *chars, int len)
113 if (nchars > bits->buf_size)
116 if (bits->owner)
118 char *tmp = (char*)speex_realloc(bits->chars, nchars);
121 bits->buf_size=nchars;
122 bits->chars=tmp;
124 nchars=bits->buf_size;
129 nchars=bits->buf_size;
139 bits->chars[i]=HTOLS(chars[i]);
141 bits->nbBits=nchars<<LOG2_BITS_PER_CHAR;
142 bits->charPtr=0;
143 bits->bitPtr=0;
144 bits->overflow=0;
147 static void speex_bits_flush(SpeexBits *bits)
149 int nchars = ((bits->nbBits+BITS_PER_CHAR-1)>>LOG2_BITS_PER_CHAR);
150 if (bits->charPtr>0)
151 SPEEX_MOVE(bits->chars, &bits->chars[bits->charPtr], nchars-bits->charPtr);
152 bits->nbBits -= bits->charPtr<<LOG2_BITS_PER_CHAR;
153 bits->charPtr=0;
156 EXPORT void speex_bits_read_whole_bytes(SpeexBits *bits, char *chars, int nbytes)
161 if (((bits->nbBits+BITS_PER_CHAR-1)>>LOG2_BITS_PER_CHAR)+nchars > bits->buf_size)
164 if (bits->owner)
166 char *tmp = (char*)speex_realloc(bits->chars, (bits->nbBits>>LOG2_BITS_PER_CHAR)+nchars+1);
169 bits->buf_size=(bits->nbBits>>LOG2_BITS_PER_CHAR)+nchars+1;
170 bits->chars=tmp;
172 nchars=bits->buf_size-(bits->nbBits>>LOG2_BITS_PER_CHAR)-1;
177 nchars=bits->buf_size;
181 speex_bits_flush(bits);
182 pos=bits->nbBits>>LOG2_BITS_PER_CHAR;
184 bits->chars[pos+i]=HTOLS(chars[i]);
185 bits->nbBits+=nchars<<LOG2_BITS_PER_CHAR;
188 EXPORT int speex_bits_write(SpeexBits *bits, char *chars, int max_nbytes)
195 bitPtr=bits->bitPtr;
196 charPtr=bits->charPtr;
197 nbBits=bits->nbBits;
198 speex_bits_insert_terminator(bits);
199 bits->bitPtr=bitPtr;
200 bits->charPtr=charPtr;
201 bits->nbBits=nbBits;
203 if (max_nchars > ((bits->nbBits+BITS_PER_CHAR-1)>>LOG2_BITS_PER_CHAR))
204 max_nchars = ((bits->nbBits+BITS_PER_CHAR-1)>>LOG2_BITS_PER_CHAR);
207 chars[i]=HTOLS(bits->chars[i]);
211 EXPORT int speex_bits_write_whole_bytes(SpeexBits *bits, char *chars, int max_nbytes)
215 if (max_nchars > ((bits->nbBits)>>LOG2_BITS_PER_CHAR))
216 max_nchars = ((bits->nbBits)>>LOG2_BITS_PER_CHAR);
218 chars[i]=HTOLS(bits->chars[i]);
220 if (bits->bitPtr>0)
221 bits->chars[0]=bits->chars[max_nchars];
223 bits->chars[0]=0;
224 bits->charPtr=0;
225 bits->nbBits &= (BITS_PER_CHAR-1);
229 EXPORT void speex_bits_pack(SpeexBits *bits, int data, int nbBits)
233 if (bits->charPtr+((nbBits+bits->bitPtr)>>LOG2_BITS_PER_CHAR) >= bits->buf_size)
235 speex_notify("Buffer too small to pack bits");
236 if (bits->owner)
238 int new_nchars = ((bits->buf_size+5)*3)>>1;
239 char *tmp = (char*)speex_realloc(bits->chars, new_nchars);
242 bits->buf_size=new_nchars;
243 bits->chars=tmp;
258 bits->chars[bits->charPtr] |= bit<<(BITS_PER_CHAR-1-bits->bitPtr);
259 bits->bitPtr++;
261 if (bits->bitPtr==BITS_PER_CHAR)
263 bits->bitPtr=0;
264 bits->charPtr++;
265 bits->chars[bits->charPtr] = 0;
267 bits->nbBits++;
272 EXPORT int speex_bits_unpack_signed(SpeexBits *bits, int nbBits)
274 unsigned int d=speex_bits_unpack_unsigned(bits,nbBits);
283 EXPORT unsigned int speex_bits_unpack_unsigned(SpeexBits *bits, int nbBits)
286 if ((bits->charPtr<<LOG2_BITS_PER_CHAR)+bits->bitPtr+nbBits>bits->nbBits)
287 bits->overflow=1;
288 if (bits->overflow)
293 d |= (bits->chars[bits->charPtr]>>(BITS_PER_CHAR-1 - bits->bitPtr))&1;
294 bits->bitPtr++;
295 if (bits->bitPtr==BITS_PER_CHAR)
297 bits->bitPtr=0;
298 bits->charPtr++;
305 EXPORT unsigned int speex_bits_peek_unsigned(SpeexBits *bits, int nbBits)
311 if ((bits->charPtr<<LOG2_BITS_PER_CHAR)+bits->bitPtr+nbBits>bits->nbBits)
312 bits->overflow=1;
313 if (bits->overflow)
316 bitPtr=bits->bitPtr;
317 charPtr=bits->charPtr;
318 chars = bits->chars;
334 EXPORT int speex_bits_peek(SpeexBits *bits)
336 if ((bits->charPtr<<LOG2_BITS_PER_CHAR)+bits->bitPtr+1>bits->nbBits)
337 bits->overflow=1;
338 if (bits->overflow)
340 return (bits->chars[bits->charPtr]>>(BITS_PER_CHAR-1 - bits->bitPtr))&1;
343 EXPORT void speex_bits_advance(SpeexBits *bits, int n)
345 if (((bits->charPtr<<LOG2_BITS_PER_CHAR)+bits->bitPtr+n>bits->nbBits) || bits->overflow){
346 bits->overflow=1;
349 bits->charPtr += (bits->bitPtr+n) >> LOG2_BITS_PER_CHAR; /* divide by BITS_PER_CHAR */
350 bits->bitPtr = (bits->bitPtr+n) & (BITS_PER_CHAR-1); /* modulo by BITS_PER_CHAR */
353 EXPORT int speex_bits_remaining(SpeexBits *bits)
355 if (bits->overflow)
358 return bits->nbBits-((bits->charPtr<<LOG2_BITS_PER_CHAR)+bits->bitPtr);
361 EXPORT int speex_bits_nbytes(SpeexBits *bits)
363 return ((bits->nbBits+BITS_PER_CHAR-1)>>LOG2_BITS_PER_CHAR);
366 EXPORT void speex_bits_insert_terminator(SpeexBits *bits)
368 if (bits->bitPtr)
369 speex_bits_pack(bits, 0, 1);
370 while (bits->bitPtr)
371 speex_bits_pack(bits, 1, 1);