Home | History | Annotate | Download | only in libFLAC

Lines Matching refs:br

92 static inline void crc16_update_word_(FLAC__BitReader *br, uint32_t word)
94 register unsigned crc = br->read_crc16;
96 switch(br->crc16_align) {
100 case 24: br->read_crc16 = FLAC__CRC16_UPDATE((unsigned)(word & 0xff), crc);
103 switch(br->crc16_align) {
111 case 56: br->read_crc16 = FLAC__CRC16_UPDATE((unsigned)(word & 0xff), crc);
114 for( ; br->crc16_align < FLAC__BITS_PER_WORD; br->crc16_align += 8)
115 crc = FLAC__CRC16_UPDATE((unsigned)((word >> (FLAC__BITS_PER_WORD-8-br->crc16_align)) & 0xff), crc);
116 br->read_crc16 = crc;
118 br->crc16_align = 0;
121 static FLAC__bool bitreader_read_from_client_(FLAC__BitReader *br)
128 if(br->consumed_words > 0) {
129 start = br->consumed_words;
130 end = br->words + (br->bytes? 1:0);
131 memmove(br->buffer, br->buffer+start, FLAC__BYTES_PER_WORD * (end - start));
133 br->words -= start;
134 br->consumed_words = 0;
140 bytes = (br->capacity - br->words) * FLAC__BYTES_PER_WORD - br->bytes;
143 target = ((FLAC__byte*)(br->buffer+br->words)) + br->bytes;
146 * bitstream : 11 22 33 44 55 br->words=1 br->bytes=1 (partial tail word is left-justified)
155 if(br->bytes)
156 br->buffer[br->words] = SWAP_BE_WORD_TO_HOST(br->buffer[br->words]);
160 * bitstream : 11 22 33 44 55 br->words=1 br->bytes=1
167 if(!br->read_callback(target, &bytes, br->client_data))
178 end = (br->words*FLAC__BYTES_PER_WORD + br->bytes + bytes + (FLAC__BYTES_PER_WORD-1)) / FLAC__BYTES_PER_WORD;
179 for(start = br->words; start < end; start++)
180 br->buffer[start] = SWAP_BE_WORD_TO_HOST(br->buffer[start]);
189 end = br->words*FLAC__BYTES_PER_WORD + br->bytes + bytes;
190 br->words = end / FLAC__BYTES_PER_WORD;
191 br->bytes = end % FLAC__BYTES_PER_WORD;
204 FLAC__BitReader *br = calloc(1, sizeof(FLAC__BitReader));
207 memset(br, 0, sizeof(FLAC__BitReader));
208 br->buffer = 0;
209 br->capacity = 0;
210 br->words = br->bytes = 0;
211 br->consumed_words = br->consumed_bits = 0;
212 br->read_callback = 0;
213 br->client_data = 0;
215 return br;
218 void FLAC__bitreader_delete(FLAC__BitReader *br)
220 FLAC__ASSERT(0 != br);
222 FLAC__bitreader_free(br);
223 free(br);
232 FLAC__bool FLAC__bitreader_init(FLAC__BitReader *br, FLAC__BitReaderReadCallback rcb, void *cd)
234 FLAC__ASSERT(0 != br);
236 br->words = br->bytes = 0;
237 br->consumed_words = br->consumed_bits = 0;
238 br->capacity = FLAC__BITREADER_DEFAULT_CAPACITY;
239 br->buffer = malloc(sizeof(uint32_t) * br->capacity);
240 if(br->buffer == 0)
242 br->read_callback = rcb;
243 br->client_data = cd;
248 void FLAC__bitreader_free(FLAC__BitReader *br)
250 FLAC__ASSERT(0 != br);
252 if(0 != br->buffer)
253 free(br->buffer);
254 br->buffer = 0;
255 br->capacity = 0;
256 br->words = br->bytes = 0;
257 br->consumed_words = br->consumed_bits = 0;
258 br->read_callback = 0;
259 br->client_data = 0;
262 FLAC__bool FLAC__bitreader_clear(FLAC__BitReader *br)
264 br->words = br->bytes = 0;
265 br->consumed_words = br->consumed_bits = 0;
269 void FLAC__bitreader_dump(const FLAC__BitReader *br, FILE *out)
272 if(br == 0) {
276 fprintf(out, "bitreader: capacity=%u words=%u bytes=%u consumed: words=%u, bits=%u\n", br->capacity, br->words, br->bytes, br->consumed_words, br->consumed_bits);
278 for(i = 0; i < br->words; i++) {
281 if(i < br->consumed_words || (i == br->consumed_words && j < br->consumed_bits))
284 fprintf(out, "%01u", br->buffer[i] & (1 << (FLAC__BITS_PER_WORD-j-1)) ? 1:0);
287 if(br->bytes > 0) {
289 for(j = 0; j < br->bytes*8; j++)
290 if(i < br->consumed_words || (i == br->consumed_words && j < br->consumed_bits))
293 fprintf(out, "%01u", br->buffer[i] & (1 << (br->bytes*8-j-1)) ? 1:0);
299 void FLAC__bitreader_reset_read_crc16(FLAC__BitReader *br, FLAC__uint16 seed)
301 FLAC__ASSERT(0 != br);
302 FLAC__ASSERT(0 != br->buffer);
303 FLAC__ASSERT((br->consumed_bits & 7) == 0);
305 br->read_crc16 = (unsigned)seed;
306 br->crc16_align = br->consumed_bits;
309 FLAC__uint16 FLAC__bitreader_get_read_crc16(FLAC__BitReader *br)
311 FLAC__ASSERT(0 != br);
312 FLAC__ASSERT(0 != br->buffer);
313 FLAC__ASSERT((br->consumed_bits & 7) == 0);
314 FLAC__ASSERT(br->crc16_align <= br->consumed_bits);
317 if(br->consumed_bits) {
318 const uint32_t tail = br->buffer[br->consumed_words];
319 for( ; br->crc16_align < br->consumed_bits; br->crc16_align += 8)
320 br->read_crc16 = FLAC__CRC16_UPDATE((unsigned)((tail >> (FLAC__BITS_PER_WORD-8-br->crc16_align)) & 0xff), br->read_crc16);
322 return br->read_crc16;
325 inline FLAC__bool FLAC__bitreader_is_consumed_byte_aligned(const FLAC__BitReader *br)
327 return ((br->consumed_bits & 7) == 0);
330 inline unsigned FLAC__bitreader_bits_left_for_byte_alignment(const FLAC__BitReader *br)
332 return 8 - (br->consumed_bits & 7);
335 inline unsigned FLAC__bitreader_get_input_bits_unconsumed(const FLAC__BitReader *br)
337 return (br->words-br->consumed_words)*FLAC__BITS_PER_WORD + br->bytes*8 - br->consumed_bits;
340 FLAC__bool FLAC__bitreader_read_raw_uint32(FLAC__BitReader *br, FLAC__uint32 *val, unsigned bits)
342 FLAC__ASSERT(0 != br);
343 FLAC__ASSERT(0 != br->buffer);
346 FLAC__ASSERT((br->capacity*FLAC__BITS_PER_WORD) * 2 >= bits);
347 FLAC__ASSERT(br->consumed_words <= br->words);
357 while((br->words-br->consumed_words)*FLAC__BITS_PER_WORD + br->bytes*8 - br->consumed_bits < bits) {
358 if(!bitreader_read_from_client_(br))
361 if(br->consumed_words < br->words) { /* if we've not consumed up to a partial tail word... */
363 if(br->consumed_bits) {
365 const unsigned n = FLAC__BITS_PER_WORD - br->consumed_bits;
366 const uint32_t word = br->buffer[br->consumed_words];
368 *val = (word & (FLAC__WORD_ALL_ONES >> br->consumed_bits)) >> (n-bits);
369 br->consumed_bits += bits;
372 *val = word & (FLAC__WORD_ALL_ONES >> br->consumed_bits);
374 crc16_update_word_(br, word);
375 br->consumed_words++;
376 br->consumed_bits = 0;
379 *val |= (br->buffer[br->consumed_words] >> (FLAC__BITS_PER_WORD-bits));
380 br->consumed_bits = bits;
385 const uint32_t word = br->buffer[br->consumed_words];
388 br->consumed_bits = bits;
393 crc16_update_word_(br, word);
394 br->consumed_words++;
404 if(br->consumed_bits) {
406 FLAC__ASSERT(br->consumed_bits + bits <= br->bytes*8);
407 *val = (br->buffer[br->consumed_words] & (FLAC__WORD_ALL_ONES >> br->consumed_bits)) >> (FLAC__BITS_PER_WORD-br->consumed_bits-bits);
408 br->consumed_bits += bits;
412 *val = br->buffer[br->consumed_words] >> (FLAC__BITS_PER_WORD-bits);
413 br->consumed_bits += bits;
419 FLAC__bool FLAC__bitreader_read_raw_int32(FLAC__BitReader *br, FLAC__int32 *val, unsigned bits)
423 if(!FLAC__bitreader_read_raw_uint32(br, &uval, bits))
432 FLAC__bool FLAC__bitreader_read_raw_uint64(FLAC__BitReader *br, FLAC__uint64 *val, unsigned bits)
437 if(!FLAC__bitreader_read_raw_uint32(br, &hi, bits-32))
439 if(!FLAC__bitreader_read_raw_uint32(br, &lo, 32))
446 br, &lo, bits))
453 inline FLAC__bool FLAC__bitreader_read_uint32_little_endian(FLAC__BitReader *br, FLAC__uint32 *val)
459 if(!FLAC__bitreader_read_raw_uint32(br, &x32, 8))
462 if(!FLAC__bitreader_read_raw_uint32(br, &x8, 8))
466 if(!FLAC__bitreader_read_raw_uint32(br, &x8, 8))
470 if(!FLAC__bitreader_read_raw_uint32(br, &x8, 8))
478 FLAC__bool FLAC__bitreader_skip_bits_no_crc(FLAC__BitReader *br, unsigned bits)
484 FLAC__ASSERT(0 != br);
485 FLAC__ASSERT(0 != br->buffer);
488 const unsigned n = br->consumed_bits & 7;
494 if(!FLAC__bitreader_read_raw_uint32(br, &x, m))
500 if(!FLAC__bitreader_skip_byte_block_aligned_no_crc(br, m))
505 if(!FLAC__bitreader_read_raw_uint32(br, &x, bits))
513 FLAC__bool FLAC__bitreader_skip_byte_block_aligned_no_crc(FLAC__BitReader *br, unsigned nvals)
517 FLAC__ASSERT(0 != br);
518 FLAC__ASSERT(0 != br->buffer);
519 FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(br));
522 while(nvals && br->consumed_bits) { /* i.e. run until we read 'nvals' bytes or we hit the end of the head word */
523 if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
531 if(br->consumed_words < br->words) {
532 br->consumed_words++;
535 else if(!bitreader_read_from_client_(br))
540 if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
548 FLAC__bool FLAC__bitreader_read_byte_block_aligned_no_crc(FLAC__BitReader *br, FLAC__byte *val, unsigned nvals)
552 FLAC__ASSERT(0 != br);
553 FLAC__ASSERT(0 != br->buffer);
554 FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(br));
557 while(nvals && br->consumed_bits) { /* i.e. run until we read 'nvals' bytes or we hit the end of the head word */
558 if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
567 if(br->consumed_words < br->words) {
568 const uint32_t word = br->buffer[br->consumed_words++];
590 else if(!bitreader_read_from_client_(br))
595 if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
604 FLAC__bool FLAC__bitreader_read_unary_unsigned(FLAC__BitReader *br, unsigned *val)
609 FLAC__ASSERT(0 != br);
610 FLAC__ASSERT(0 != br->buffer);
614 if(!FLAC__bitreader_read_bit(br, &bit))
627 FLAC__ASSERT(0 != br);
628 FLAC__ASSERT(0 != br->buffer);
632 while(br->consumed_words < br->words) { /* if we've not consumed up to a partial tail word... */
633 uint32_t b = br->buffer[br->consumed_words] << br->consumed_bits;
638 br->consumed_bits += i;
639 if(br->consumed_bits >= FLAC__BITS_PER_WORD) { /* faster way of testing if(br->consumed_bits == FLAC__BITS_PER_WORD) */
640 crc16_update_word_(br, br->buffer[br->consumed_words]);
641 br->consumed_words++;
642 br->consumed_bits = 0;
647 *val += FLAC__BITS_PER_WORD - br->consumed_bits;
648 crc16_update_word_(br, br->buffer[br->consumed_words]);
649 br->consumed_words++;
650 br->consumed_bits = 0;
658 * us data a byte at a time (unlikely), br->consumed_bits may not
661 if(br->bytes*8 > br->consumed_bits) {
662 const unsigned end = br->bytes * 8;
663 uint32_t b = (br->buffer[br->consumed_words] & (FLAC__WORD_ALL_ONES << (FLAC__BITS_PER_WORD-end))) << br->consumed_bits;
668 br->consumed_bits += i;
669 FLAC__ASSERT(br->consumed_bits < FLAC__BITS_PER_WORD);
673 *val += end - br->consumed_bits;
674 br->consumed_bits = end;
675 FLAC__ASSERT(br->consumed_bits < FLAC__BITS_PER_WORD);
679 if(!bitreader_read_from_client_(br))
685 FLAC__bool FLAC__bitreader_read_rice_signed(FLAC__BitReader *br, int *val, unsigned parameter)
690 FLAC__ASSERT(0 != br);
691 FLAC__ASSERT(0 != br->buffer);
695 if(!FLAC__bitreader_read_unary_unsigned(br, &msbs))
699 if(!FLAC__bitreader_read_raw_uint32(br, &lsbs, parameter))
713 FLAC__bool FLAC__bitreader_read_rice_signed_block(FLAC__BitReader *br, int vals[], unsigned nvals, unsigned parameter)
715 /* try and get br->consumed_words and br->consumed_bits into register;
716 * must remember to flush them back to *br before calling other
723 FLAC__ASSERT(0 != br);
724 FLAC__ASSERT(0 != br->buffer);
736 if(!FLAC__bitreader_read_unary_unsigned(br, &msbs))
747 cwords = br->consumed_words;
748 words = br->words;
756 ucbits = FLAC__BITS_PER_WORD - br->consumed_bits;
757 b = br->buffer[cwords] << br->consumed_bits; /* keep unconsumed bits aligned to left */
766 crc16_update_word_(br, br->buffer[cwords++]);
769 b = br->buffer[cwords];
786 crc16_update_word_(br, br->buffer[cwords++]);
789 b = br->buffer[cwords];
807 br->consumed_bits = 0;
808 br->consumed_words = cwords;
812 if(!FLAC__bitreader_read_unary_unsigned(br, &msbs))
819 br->consumed_bits = 0;
820 br->consumed_words = cwords;
824 if(!FLAC__bitreader_read_raw_uint32(br, &lsbs, parameter - ucbits))
833 cwords = br->consumed_words;
834 words = br->words;
835 ucbits = FLAC__BITS_PER_WORD - br->consumed_bits;
836 b = br->buffer[cwords] << br->consumed_bits;
842 crc16_update_word_(br, br->buffer[cwords++]);
846 br->consumed_bits = FLAC__BITS_PER_WORD - ucbits;
847 br->consumed_words = cwords;
853 FLAC__bool FLAC__bitreader_read_golomb_signed(FLAC__BitReader *br, int *val, unsigned parameter)
858 FLAC__ASSERT(0 != br);
859 FLAC__ASSERT(0 != br->buffer);
864 if(!FLAC__bitreader_read_unary_unsigned(br, &msbs))
868 if(!FLAC__bitreader_read_raw_uint32(br, &lsbs, k))
878 if(!FLAC__bitreader_read_bit(br, &bit))
897 FLAC__bool FLAC__bitreader_read_golomb_unsigned(FLAC__BitReader *br, unsigned *val, unsigned parameter)
902 FLAC__ASSERT(0 != br);
903 FLAC__ASSERT(0 != br->buffer);
908 if(!FLAC__bitreader_read_unary_unsigned(br, &msbs))
912 if(!FLAC__bitreader_read_raw_uint32(br, &lsbs, k))
922 if(!FLAC__bitreader_read_bit(br, &bit))
937 FLAC__bool FLAC__bitreader_read_utf8_uint32(FLAC__BitReader *br, FLAC__uint32 *val, FLAC__byte *raw, unsigned *rawlen)
943 if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
976 if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
992 FLAC__bool FLAC__bitreader_read_utf8_uint64(FLAC__BitReader *br, FLAC__uint64 *val, FLAC__byte *raw, unsigned *rawlen)
998 if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
1035 if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
1058 extern FLAC__bool FLAC__bitreader_is_consumed_byte_aligned(const FLAC__BitReader *br);
1059 extern unsigned FLAC__bitreader_bits_left_for_byte_alignment(const FLAC__BitReader *br);
1060 extern unsigned FLAC__bitreader_get_input_bits_unconsumed(const FLAC__BitReader *br);
1061 extern FLAC__bool FLAC__bitreader_read_uint32_little_endian(FLAC__BitReader *br, FLAC__uint32 *val);