1 /* libFLAC - Free Lossless Audio Codec library
2 * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
8 * - Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
15 * - Neither the name of the Xiph.org Foundation nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 #include <stdlib.h> /* for malloc() */
37 #include <string.h> /* for memcpy(), memset() */
39 #include <winsock.h> /* for ntohl() */
40 #elif defined FLAC__SYS_DARWIN
41 #include <machine/endian.h> /* for ntohl() */
42 #elif defined __MINGW32__
43 #include <winsock.h> /* for ntohl() */
45 #include <netinet/in.h> /* for ntohl() */
47 #include "private/bitmath.h"
48 #include "private/bitreader.h"
49 #include "private/crc.h"
50 #include "FLAC/assert.h"
52 /* Things should be fastest when this matches the machine word size */
53 /* WATCHOUT: if you change this you must also change the following #defines down to COUNT_ZERO_MSBS below to match */
54 /* WATCHOUT: there are a few places where the code will not work unless brword is >= 32 bits wide */
55 /* also, some sections currently only have fast versions for 4 or 8 bytes per word */
56 typedef FLAC__uint32 brword;
57 #define FLAC__BYTES_PER_WORD 4
58 #define FLAC__BITS_PER_WORD 32
59 #define FLAC__WORD_ALL_ONES ((FLAC__uint32)0xffffffff)
60 /* SWAP_BE_WORD_TO_HOST swaps bytes in a brword (which is always big-endian) if necessary to match host byte order */
62 #define SWAP_BE_WORD_TO_HOST(x) (x)
65 #define SWAP_BE_WORD_TO_HOST(x) local_swap32_(x)
67 #define SWAP_BE_WORD_TO_HOST(x) ntohl(x)
70 /* counts the # of zero MSBs in a word */
71 #define COUNT_ZERO_MSBS(word) ( \
73 ( (word) <= 0xff? byte_to_unary_table[word] + 24 : byte_to_unary_table[(word) >> 8] + 16 ) : \
74 ( (word) <= 0xffffff? byte_to_unary_table[word >> 16] + 8 : byte_to_unary_table[(word) >> 24] ) \
76 /* this alternate might be slightly faster on some systems/compilers: */
77 #define COUNT_ZERO_MSBS2(word) ( (word) <= 0xff ? byte_to_unary_table[word] + 24 : ((word) <= 0xffff ? byte_to_unary_table[(word) >> 8] + 16 : ((word) <= 0xffffff ? byte_to_unary_table[(word) >> 16] + 8 : byte_to_unary_table[(word) >> 24])) )
81 * This should be at least twice as large as the largest number of words
82 * required to represent any 'number' (in any encoding) you are going to
83 * read. With FLAC this is on the order of maybe a few hundred bits.
84 * If the buffer is smaller than that, the decoder won't be able to read
85 * in a whole number that is in a variable length encoding (e.g. Rice).
86 * But to be practical it should be at least 1K bytes.
88 * Increase this number to decrease the number of read callbacks, at the
89 * expense of using more memory. Or decrease for the reverse effect,
90 * keeping in mind the limit from the first paragraph. The optimal size
91 * also depends on the CPU cache size and other factors; some twiddling
92 * may be necessary to squeeze out the best performance.
94 static const unsigned FLAC__BITREADER_DEFAULT_CAPACITY = 65536u / FLAC__BITS_PER_WORD; /* in words */
96 static const unsigned char byte_to_unary_table[] = {
97 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,
98 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
99 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
100 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
101 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
102 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
103 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
104 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
105 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
106 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
107 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
108 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
109 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
110 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
111 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
112 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
118 #define min(x,y) ((x)<(y)?(x):(y))
122 #define max(x,y) ((x)>(y)?(x):(y))
124 /* adjust for compilers that can't understand using LLU suffix for uint64_t literals */
126 #define FLAC__U64L(x) x
128 #define FLAC__U64L(x) x##LLU
135 /* WATCHOUT: assembly routines rely on the order in which these fields are declared */
136 struct FLAC__BitReader {
137 /* any partially-consumed word at the head will stay right-justified as bits are consumed from the left */
138 /* any incomplete word at the tail will be left-justified, and bytes from the read callback are added on the right */
140 unsigned capacity; /* in words */
141 unsigned words; /* # of completed words in buffer */
142 unsigned bytes; /* # of bytes in incomplete word at buffer[words] */
143 unsigned consumed_words; /* #words ... */
144 unsigned consumed_bits; /* ... + (#bits of head word) already consumed from the front of buffer */
145 unsigned read_crc16; /* the running frame CRC */
146 unsigned crc16_align; /* the number of bits in the current consumed word that should not be CRC'd */
147 FLAC__BitReaderReadCallback read_callback;
149 FLAC__CPUInfo cpu_info;
153 /* OPT: an MSVC built-in would be better */
154 static _inline FLAC__uint32 local_swap32_(FLAC__uint32 x)
156 x = ((x<<8)&0xFF00FF00) | ((x>>8)&0x00FF00FF);
157 return (x>>16) | (x<<16);
159 static void local_swap32_block_(FLAC__uint32 *start, FLAC__uint32 len)
178 static FLaC__INLINE void crc16_update_word_(FLAC__BitReader *br, brword word)
180 register unsigned crc = br->read_crc16;
181 #if FLAC__BYTES_PER_WORD == 4
182 switch(br->crc16_align) {
183 case 0: crc = FLAC__CRC16_UPDATE((unsigned)(word >> 24), crc);
184 case 8: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 16) & 0xff), crc);
185 case 16: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 8) & 0xff), crc);
186 case 24: br->read_crc16 = FLAC__CRC16_UPDATE((unsigned)(word & 0xff), crc);
188 #elif FLAC__BYTES_PER_WORD == 8
189 switch(br->crc16_align) {
190 case 0: crc = FLAC__CRC16_UPDATE((unsigned)(word >> 56), crc);
191 case 8: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 48) & 0xff), crc);
192 case 16: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 40) & 0xff), crc);
193 case 24: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 32) & 0xff), crc);
194 case 32: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 24) & 0xff), crc);
195 case 40: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 16) & 0xff), crc);
196 case 48: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 8) & 0xff), crc);
197 case 56: br->read_crc16 = FLAC__CRC16_UPDATE((unsigned)(word & 0xff), crc);
200 for( ; br->crc16_align < FLAC__BITS_PER_WORD; br->crc16_align += 8)
201 crc = FLAC__CRC16_UPDATE((unsigned)((word >> (FLAC__BITS_PER_WORD-8-br->crc16_align)) & 0xff), crc);
202 br->read_crc16 = crc;
207 /* would be static except it needs to be called by asm routines */
208 FLAC__bool bitreader_read_from_client_(FLAC__BitReader *br)
214 /* first shift the unconsumed buffer data toward the front as much as possible */
215 if(br->consumed_words > 0) {
216 start = br->consumed_words;
217 end = br->words + (br->bytes? 1:0);
218 memmove(br->buffer, br->buffer+start, FLAC__BYTES_PER_WORD * (end - start));
221 br->consumed_words = 0;
225 * set the target for reading, taking into account word alignment and endianness
227 bytes = (br->capacity - br->words) * FLAC__BYTES_PER_WORD - br->bytes;
229 return false; /* no space left, buffer is too small; see note for FLAC__BITREADER_DEFAULT_CAPACITY */
230 target = ((FLAC__byte*)(br->buffer+br->words)) + br->bytes;
232 /* before reading, if the existing reader looks like this (say brword is 32 bits wide)
233 * bitstream : 11 22 33 44 55 br->words=1 br->bytes=1 (partial tail word is left-justified)
234 * buffer[BE]: 11 22 33 44 55 ?? ?? ?? (shown layed out as bytes sequentially in memory)
235 * buffer[LE]: 44 33 22 11 ?? ?? ?? 55 (?? being don't-care)
236 * ^^-------target, bytes=3
237 * on LE machines, have to byteswap the odd tail word so nothing is
243 br->buffer[br->words] = SWAP_BE_WORD_TO_HOST(br->buffer[br->words]);
246 /* now it looks like:
247 * bitstream : 11 22 33 44 55 br->words=1 br->bytes=1
248 * buffer[BE]: 11 22 33 44 55 ?? ?? ??
249 * buffer[LE]: 44 33 22 11 55 ?? ?? ??
250 * ^^-------target, bytes=3
253 /* read in the data; note that the callback may return a smaller number of bytes */
254 if(!br->read_callback(target, &bytes, br->client_data))
257 /* after reading bytes 66 77 88 99 AA BB CC DD EE FF from the client:
258 * bitstream : 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF
259 * buffer[BE]: 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ??
260 * buffer[LE]: 44 33 22 11 55 66 77 88 99 AA BB CC DD EE FF ??
261 * now have to byteswap on LE machines:
265 end = (br->words*FLAC__BYTES_PER_WORD + br->bytes + bytes + (FLAC__BYTES_PER_WORD-1)) / FLAC__BYTES_PER_WORD;
266 # if defined(_MSC_VER) && (FLAC__BYTES_PER_WORD == 4)
267 if(br->cpu_info.type == FLAC__CPUINFO_TYPE_IA32 && br->cpu_info.data.ia32.bswap) {
269 local_swap32_block_(br->buffer + start, end - start);
273 for(start = br->words; start < end; start++)
274 br->buffer[start] = SWAP_BE_WORD_TO_HOST(br->buffer[start]);
277 /* now it looks like:
278 * bitstream : 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF
279 * buffer[BE]: 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ??
280 * buffer[LE]: 44 33 22 11 88 77 66 55 CC BB AA 99 ?? FF EE DD
281 * finally we'll update the reader values:
283 end = br->words*FLAC__BYTES_PER_WORD + br->bytes + bytes;
284 br->words = end / FLAC__BYTES_PER_WORD;
285 br->bytes = end % FLAC__BYTES_PER_WORD;
290 /***********************************************************************
292 * Class constructor/destructor
294 ***********************************************************************/
296 FLAC__BitReader *FLAC__bitreader_new(void)
298 FLAC__BitReader *br = (FLAC__BitReader*)calloc(1, sizeof(FLAC__BitReader));
301 memset(br, 0, sizeof(FLAC__BitReader));
304 br->words = br->bytes = 0;
305 br->consumed_words = br->consumed_bits = 0;
306 br->read_callback = 0;
312 void FLAC__bitreader_delete(FLAC__BitReader *br)
314 FLAC__ASSERT(0 != br);
316 FLAC__bitreader_free(br);
320 /***********************************************************************
322 * Public class methods
324 ***********************************************************************/
326 FLAC__bool FLAC__bitreader_init(FLAC__BitReader *br, FLAC__CPUInfo cpu, FLAC__BitReaderReadCallback rcb, void *cd)
328 FLAC__ASSERT(0 != br);
330 br->words = br->bytes = 0;
331 br->consumed_words = br->consumed_bits = 0;
332 br->capacity = FLAC__BITREADER_DEFAULT_CAPACITY;
333 br->buffer = (brword*)malloc(sizeof(brword) * br->capacity);
336 br->read_callback = rcb;
337 br->client_data = cd;
343 void FLAC__bitreader_free(FLAC__BitReader *br)
345 FLAC__ASSERT(0 != br);
351 br->words = br->bytes = 0;
352 br->consumed_words = br->consumed_bits = 0;
353 br->read_callback = 0;
357 FLAC__bool FLAC__bitreader_clear(FLAC__BitReader *br)
359 br->words = br->bytes = 0;
360 br->consumed_words = br->consumed_bits = 0;
364 void FLAC__bitreader_dump(const FLAC__BitReader *br, FILE *out)
368 fprintf(out, "bitreader is NULL\n");
371 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);
373 for(i = 0; i < br->words; i++) {
374 fprintf(out, "%08X: ", i);
375 for(j = 0; j < FLAC__BITS_PER_WORD; j++)
376 if(i < br->consumed_words || (i == br->consumed_words && j < br->consumed_bits))
379 fprintf(out, "%01u", br->buffer[i] & (1 << (FLAC__BITS_PER_WORD-j-1)) ? 1:0);
383 fprintf(out, "%08X: ", i);
384 for(j = 0; j < br->bytes*8; j++)
385 if(i < br->consumed_words || (i == br->consumed_words && j < br->consumed_bits))
388 fprintf(out, "%01u", br->buffer[i] & (1 << (br->bytes*8-j-1)) ? 1:0);
394 void FLAC__bitreader_reset_read_crc16(FLAC__BitReader *br, FLAC__uint16 seed)
396 FLAC__ASSERT(0 != br);
397 FLAC__ASSERT(0 != br->buffer);
398 FLAC__ASSERT((br->consumed_bits & 7) == 0);
400 br->read_crc16 = (unsigned)seed;
401 br->crc16_align = br->consumed_bits;
404 FLAC__uint16 FLAC__bitreader_get_read_crc16(FLAC__BitReader *br)
406 FLAC__ASSERT(0 != br);
407 FLAC__ASSERT(0 != br->buffer);
408 FLAC__ASSERT((br->consumed_bits & 7) == 0);
409 FLAC__ASSERT(br->crc16_align <= br->consumed_bits);
411 /* CRC any tail bytes in a partially-consumed word */
412 if(br->consumed_bits) {
413 const brword tail = br->buffer[br->consumed_words];
414 for( ; br->crc16_align < br->consumed_bits; br->crc16_align += 8)
415 br->read_crc16 = FLAC__CRC16_UPDATE((unsigned)((tail >> (FLAC__BITS_PER_WORD-8-br->crc16_align)) & 0xff), br->read_crc16);
417 return br->read_crc16;
420 FLaC__INLINE FLAC__bool FLAC__bitreader_is_consumed_byte_aligned(const FLAC__BitReader *br)
422 return ((br->consumed_bits & 7) == 0);
425 FLaC__INLINE unsigned FLAC__bitreader_bits_left_for_byte_alignment(const FLAC__BitReader *br)
427 return 8 - (br->consumed_bits & 7);
430 FLaC__INLINE unsigned FLAC__bitreader_get_input_bits_unconsumed(const FLAC__BitReader *br)
432 return (br->words-br->consumed_words)*FLAC__BITS_PER_WORD + br->bytes*8 - br->consumed_bits;
435 FLaC__INLINE FLAC__bool FLAC__bitreader_read_raw_uint32(FLAC__BitReader *br, FLAC__uint32 *val, unsigned bits)
437 FLAC__ASSERT(0 != br);
438 FLAC__ASSERT(0 != br->buffer);
440 FLAC__ASSERT(bits <= 32);
441 FLAC__ASSERT((br->capacity*FLAC__BITS_PER_WORD) * 2 >= bits);
442 FLAC__ASSERT(br->consumed_words <= br->words);
444 /* WATCHOUT: code does not work with <32bit words; we can make things much faster with this assertion */
445 FLAC__ASSERT(FLAC__BITS_PER_WORD >= 32);
447 if(bits == 0) { /* OPT: investigate if this can ever happen, maybe change to assertion */
452 while((br->words-br->consumed_words)*FLAC__BITS_PER_WORD + br->bytes*8 - br->consumed_bits < bits) {
453 if(!bitreader_read_from_client_(br))
456 if(br->consumed_words < br->words) { /* if we've not consumed up to a partial tail word... */
457 /* OPT: taking out the consumed_bits==0 "else" case below might make things faster if less code allows the compiler to inline this function */
458 if(br->consumed_bits) {
459 /* this also works when consumed_bits==0, it's just a little slower than necessary for that case */
460 const unsigned n = FLAC__BITS_PER_WORD - br->consumed_bits;
461 const brword word = br->buffer[br->consumed_words];
463 *val = (word & (FLAC__WORD_ALL_ONES >> br->consumed_bits)) >> (n-bits);
464 br->consumed_bits += bits;
467 *val = word & (FLAC__WORD_ALL_ONES >> br->consumed_bits);
469 crc16_update_word_(br, word);
470 br->consumed_words++;
471 br->consumed_bits = 0;
472 if(bits) { /* if there are still bits left to read, there have to be less than 32 so they will all be in the next word */
474 *val |= (br->buffer[br->consumed_words] >> (FLAC__BITS_PER_WORD-bits));
475 br->consumed_bits = bits;
480 const brword word = br->buffer[br->consumed_words];
481 if(bits < FLAC__BITS_PER_WORD) {
482 *val = word >> (FLAC__BITS_PER_WORD-bits);
483 br->consumed_bits = bits;
486 /* at this point 'bits' must be == FLAC__BITS_PER_WORD; because of previous assertions, it can't be larger */
488 crc16_update_word_(br, word);
489 br->consumed_words++;
494 /* in this case we're starting our read at a partial tail word;
495 * the reader has guaranteed that we have at least 'bits' bits
496 * available to read, which makes this case simpler.
498 /* OPT: taking out the consumed_bits==0 "else" case below might make things faster if less code allows the compiler to inline this function */
499 if(br->consumed_bits) {
500 /* this also works when consumed_bits==0, it's just a little slower than necessary for that case */
501 FLAC__ASSERT(br->consumed_bits + bits <= br->bytes*8);
502 *val = (br->buffer[br->consumed_words] & (FLAC__WORD_ALL_ONES >> br->consumed_bits)) >> (FLAC__BITS_PER_WORD-br->consumed_bits-bits);
503 br->consumed_bits += bits;
507 *val = br->buffer[br->consumed_words] >> (FLAC__BITS_PER_WORD-bits);
508 br->consumed_bits += bits;
514 FLAC__bool FLAC__bitreader_read_raw_int32(FLAC__BitReader *br, FLAC__int32 *val, unsigned bits)
516 /* OPT: inline raw uint32 code here, or make into a macro if possible in the .h file */
517 if(!FLAC__bitreader_read_raw_uint32(br, (FLAC__uint32*)val, bits))
525 FLAC__bool FLAC__bitreader_read_raw_uint64(FLAC__BitReader *br, FLAC__uint64 *val, unsigned bits)
530 if(!FLAC__bitreader_read_raw_uint32(br, &hi, bits-32))
532 if(!FLAC__bitreader_read_raw_uint32(br, &lo, 32))
539 if(!FLAC__bitreader_read_raw_uint32(br, &lo, bits))
546 FLaC__INLINE FLAC__bool FLAC__bitreader_read_uint32_little_endian(FLAC__BitReader *br, FLAC__uint32 *val)
548 FLAC__uint32 x8, x32 = 0;
550 /* this doesn't need to be that fast as currently it is only used for vorbis comments */
552 if(!FLAC__bitreader_read_raw_uint32(br, &x32, 8))
555 if(!FLAC__bitreader_read_raw_uint32(br, &x8, 8))
559 if(!FLAC__bitreader_read_raw_uint32(br, &x8, 8))
563 if(!FLAC__bitreader_read_raw_uint32(br, &x8, 8))
571 FLAC__bool FLAC__bitreader_skip_bits_no_crc(FLAC__BitReader *br, unsigned bits)
574 * OPT: a faster implementation is possible but probably not that useful
575 * since this is only called a couple of times in the metadata readers.
577 FLAC__ASSERT(0 != br);
578 FLAC__ASSERT(0 != br->buffer);
581 const unsigned n = br->consumed_bits & 7;
587 if(!FLAC__bitreader_read_raw_uint32(br, &x, m))
593 if(!FLAC__bitreader_skip_byte_block_aligned_no_crc(br, m))
598 if(!FLAC__bitreader_read_raw_uint32(br, &x, bits))
606 FLAC__bool FLAC__bitreader_skip_byte_block_aligned_no_crc(FLAC__BitReader *br, unsigned nvals)
610 FLAC__ASSERT(0 != br);
611 FLAC__ASSERT(0 != br->buffer);
612 FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(br));
614 /* step 1: skip over partial head word to get word aligned */
615 while(nvals && br->consumed_bits) { /* i.e. run until we read 'nvals' bytes or we hit the end of the head word */
616 if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
622 /* step 2: skip whole words in chunks */
623 while(nvals >= FLAC__BYTES_PER_WORD) {
624 if(br->consumed_words < br->words) {
625 br->consumed_words++;
626 nvals -= FLAC__BYTES_PER_WORD;
628 else if(!bitreader_read_from_client_(br))
631 /* step 3: skip any remainder from partial tail bytes */
633 if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
641 FLAC__bool FLAC__bitreader_read_byte_block_aligned_no_crc(FLAC__BitReader *br, FLAC__byte *val, unsigned nvals)
645 FLAC__ASSERT(0 != br);
646 FLAC__ASSERT(0 != br->buffer);
647 FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(br));
649 /* step 1: read from partial head word to get word aligned */
650 while(nvals && br->consumed_bits) { /* i.e. run until we read 'nvals' bytes or we hit the end of the head word */
651 if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
653 *val++ = (FLAC__byte)x;
658 /* step 2: read whole words in chunks */
659 while(nvals >= FLAC__BYTES_PER_WORD) {
660 if(br->consumed_words < br->words) {
661 const brword word = br->buffer[br->consumed_words++];
662 #if FLAC__BYTES_PER_WORD == 4
663 val[0] = (FLAC__byte)(word >> 24);
664 val[1] = (FLAC__byte)(word >> 16);
665 val[2] = (FLAC__byte)(word >> 8);
666 val[3] = (FLAC__byte)word;
667 #elif FLAC__BYTES_PER_WORD == 8
668 val[0] = (FLAC__byte)(word >> 56);
669 val[1] = (FLAC__byte)(word >> 48);
670 val[2] = (FLAC__byte)(word >> 40);
671 val[3] = (FLAC__byte)(word >> 32);
672 val[4] = (FLAC__byte)(word >> 24);
673 val[5] = (FLAC__byte)(word >> 16);
674 val[6] = (FLAC__byte)(word >> 8);
675 val[7] = (FLAC__byte)word;
677 for(x = 0; x < FLAC__BYTES_PER_WORD; x++)
678 val[x] = (FLAC__byte)(word >> (8*(FLAC__BYTES_PER_WORD-x-1)));
680 val += FLAC__BYTES_PER_WORD;
681 nvals -= FLAC__BYTES_PER_WORD;
683 else if(!bitreader_read_from_client_(br))
686 /* step 3: read any remainder from partial tail bytes */
688 if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
690 *val++ = (FLAC__byte)x;
697 FLaC__INLINE FLAC__bool FLAC__bitreader_read_unary_unsigned(FLAC__BitReader *br, unsigned *val)
698 #if 0 /* slow but readable version */
702 FLAC__ASSERT(0 != br);
703 FLAC__ASSERT(0 != br->buffer);
707 if(!FLAC__bitreader_read_bit(br, &bit))
720 FLAC__ASSERT(0 != br);
721 FLAC__ASSERT(0 != br->buffer);
725 while(br->consumed_words < br->words) { /* if we've not consumed up to a partial tail word... */
726 brword b = br->buffer[br->consumed_words] << br->consumed_bits;
728 i = COUNT_ZERO_MSBS(b);
731 br->consumed_bits += i;
732 if(br->consumed_bits >= FLAC__BITS_PER_WORD) { /* faster way of testing if(br->consumed_bits == FLAC__BITS_PER_WORD) */
733 crc16_update_word_(br, br->buffer[br->consumed_words]);
734 br->consumed_words++;
735 br->consumed_bits = 0;
740 *val += FLAC__BITS_PER_WORD - br->consumed_bits;
741 crc16_update_word_(br, br->buffer[br->consumed_words]);
742 br->consumed_words++;
743 br->consumed_bits = 0;
744 /* didn't find stop bit yet, have to keep going... */
747 /* at this point we've eaten up all the whole words; have to try
748 * reading through any tail bytes before calling the read callback.
749 * this is a repeat of the above logic adjusted for the fact we
750 * don't have a whole word. note though if the client is feeding
751 * us data a byte at a time (unlikely), br->consumed_bits may not
755 const unsigned end = br->bytes * 8;
756 brword b = (br->buffer[br->consumed_words] & (FLAC__WORD_ALL_ONES << (FLAC__BITS_PER_WORD-end))) << br->consumed_bits;
758 i = COUNT_ZERO_MSBS(b);
761 br->consumed_bits += i;
762 FLAC__ASSERT(br->consumed_bits < FLAC__BITS_PER_WORD);
766 *val += end - br->consumed_bits;
767 br->consumed_bits += end;
768 FLAC__ASSERT(br->consumed_bits < FLAC__BITS_PER_WORD);
769 /* didn't find stop bit yet, have to keep going... */
772 if(!bitreader_read_from_client_(br))
778 FLAC__bool FLAC__bitreader_read_rice_signed(FLAC__BitReader *br, int *val, unsigned parameter)
780 FLAC__uint32 lsbs = 0, msbs = 0;
783 FLAC__ASSERT(0 != br);
784 FLAC__ASSERT(0 != br->buffer);
785 FLAC__ASSERT(parameter <= 31);
787 /* read the unary MSBs and end bit */
788 if(!FLAC__bitreader_read_unary_unsigned(br, &msbs))
791 /* read the binary LSBs */
792 if(!FLAC__bitreader_read_raw_uint32(br, &lsbs, parameter))
795 /* compose the value */
796 uval = (msbs << parameter) | lsbs;
798 *val = -((int)(uval >> 1)) - 1;
800 *val = (int)(uval >> 1);
805 /* this is by far the most heavily used reader call. it ain't pretty but it's fast */
806 /* a lot of the logic is copied, then adapted, from FLAC__bitreader_read_unary_unsigned() and FLAC__bitreader_read_raw_uint32() */
807 FLAC__bool FLAC__bitreader_read_rice_signed_block(FLAC__BitReader *br, int vals[], unsigned nvals, unsigned parameter)
808 /* OPT: possibly faster version for use with MSVC */
813 unsigned bits; /* the # of binary LSBs left to read to finish a rice codeword */
815 /* try and get br->consumed_words and br->consumed_bits into register;
816 * must remember to flush them back to *br before calling other
817 * bitwriter functions that use them, and before returning */
818 register unsigned cwords;
819 register unsigned cbits;
821 FLAC__ASSERT(0 != br);
822 FLAC__ASSERT(0 != br->buffer);
823 /* WATCHOUT: code does not work with <32bit words; we can make things much faster with this assertion */
824 FLAC__ASSERT(FLAC__BITS_PER_WORD >= 32);
825 FLAC__ASSERT(parameter < 32);
826 /* the above two asserts also guarantee that the binary part never straddles more that 2 words, so we don't have to loop to read it */
831 cbits = br->consumed_bits;
832 cwords = br->consumed_words;
836 /* read unary part */
838 while(cwords < br->words) { /* if we've not consumed up to a partial tail word... */
839 brword b = br->buffer[cwords] << cbits;
841 #if 0 /* slower, probably due to bad register allocation... */ && defined FLAC__CPU_IA32 && !defined FLAC__NO_ASM && FLAC__BITS_PER_WORD == 32
849 i = COUNT_ZERO_MSBS(b);
855 if(cbits == FLAC__BITS_PER_WORD) {
856 crc16_update_word_(br, br->buffer[cwords]);
863 uval += FLAC__BITS_PER_WORD - cbits;
864 crc16_update_word_(br, br->buffer[cwords]);
867 /* didn't find stop bit yet, have to keep going... */
870 /* at this point we've eaten up all the whole words; have to try
871 * reading through any tail bytes before calling the read callback.
872 * this is a repeat of the above logic adjusted for the fact we
873 * don't have a whole word. note though if the client is feeding
874 * us data a byte at a time (unlikely), br->consumed_bits may not
878 const unsigned end = br->bytes * 8;
879 brword b = (br->buffer[cwords] & (FLAC__WORD_ALL_ONES << (FLAC__BITS_PER_WORD-end))) << cbits;
881 i = COUNT_ZERO_MSBS(b);
886 FLAC__ASSERT(cbits < FLAC__BITS_PER_WORD);
892 FLAC__ASSERT(cbits < FLAC__BITS_PER_WORD);
893 /* didn't find stop bit yet, have to keep going... */
896 /* flush registers and read; bitreader_read_from_client_() does
897 * not touch br->consumed_bits at all but we still need to set
898 * it in case it fails and we have to return false.
900 br->consumed_bits = cbits;
901 br->consumed_words = cwords;
902 if(!bitreader_read_from_client_(br))
904 cwords = br->consumed_words;
907 /* read binary part */
908 FLAC__ASSERT(cwords <= br->words);
911 while((br->words-cwords)*FLAC__BITS_PER_WORD + br->bytes*8 - cbits < bits) {
912 /* flush registers and read; bitreader_read_from_client_() does
913 * not touch br->consumed_bits at all but we still need to set
914 * it in case it fails and we have to return false.
916 br->consumed_bits = cbits;
917 br->consumed_words = cwords;
918 if(!bitreader_read_from_client_(br))
920 cwords = br->consumed_words;
922 if(cwords < br->words) { /* if we've not consumed up to a partial tail word... */
924 /* this also works when consumed_bits==0, it's just a little slower than necessary for that case */
925 const unsigned n = FLAC__BITS_PER_WORD - cbits;
926 const brword word = br->buffer[cwords];
929 uval |= (word & (FLAC__WORD_ALL_ONES >> cbits)) >> (n-bits);
934 uval |= word & (FLAC__WORD_ALL_ONES >> cbits);
936 crc16_update_word_(br, word);
939 if(bits) { /* if there are still bits left to read, there have to be less than 32 so they will all be in the next word */
941 uval |= (br->buffer[cwords] >> (FLAC__BITS_PER_WORD-bits));
947 FLAC__ASSERT(bits < FLAC__BITS_PER_WORD);
949 uval |= br->buffer[cwords] >> (FLAC__BITS_PER_WORD-bits);
955 /* in this case we're starting our read at a partial tail word;
956 * the reader has guaranteed that we have at least 'bits' bits
957 * available to read, which makes this case simpler.
961 /* this also works when consumed_bits==0, it's just a little slower than necessary for that case */
962 FLAC__ASSERT(cbits + bits <= br->bytes*8);
963 uval |= (br->buffer[cwords] & (FLAC__WORD_ALL_ONES >> cbits)) >> (FLAC__BITS_PER_WORD-cbits-bits);
968 uval |= br->buffer[cwords] >> (FLAC__BITS_PER_WORD-bits);
975 /* compose the value */
976 *vals = (int)(uval >> 1 ^ -(int)(uval & 1));
981 br->consumed_bits = cbits;
982 br->consumed_words = cwords;
996 /* try and get br->consumed_words and br->consumed_bits into register;
997 * must remember to flush them back to *br before calling other
998 * bitwriter functions that use them, and before returning */
999 register unsigned cwords;
1000 register unsigned cbits;
1001 unsigned ucbits; /* keep track of the number of unconsumed bits in the buffer */
1003 FLAC__ASSERT(0 != br);
1004 FLAC__ASSERT(0 != br->buffer);
1005 /* WATCHOUT: code does not work with <32bit words; we can make things much faster with this assertion */
1006 FLAC__ASSERT(FLAC__BITS_PER_WORD >= 32);
1007 FLAC__ASSERT(parameter < 32);
1008 /* the above two asserts also guarantee that the binary part never straddles more than 2 words, so we don't have to loop to read it */
1013 cbits = br->consumed_bits;
1014 cwords = br->consumed_words;
1015 ucbits = (br->words-cwords)*FLAC__BITS_PER_WORD + br->bytes*8 - cbits;
1019 /* read unary part */
1021 while(cwords < br->words) { /* if we've not consumed up to a partial tail word... */
1022 brword b = br->buffer[cwords] << cbits;
1024 #if 0 /* is not discernably faster... */ && defined FLAC__CPU_IA32 && !defined FLAC__NO_ASM && FLAC__BITS_PER_WORD == 32 && defined __GNUC__
1033 i = COUNT_ZERO_MSBS(b);
1037 cbits++; /* skip over stop bit */
1038 if(cbits >= FLAC__BITS_PER_WORD) { /* faster way of testing if(cbits == FLAC__BITS_PER_WORD) */
1039 crc16_update_word_(br, br->buffer[cwords]);
1046 uval += FLAC__BITS_PER_WORD - cbits;
1047 crc16_update_word_(br, br->buffer[cwords]);
1050 /* didn't find stop bit yet, have to keep going... */
1053 /* at this point we've eaten up all the whole words; have to try
1054 * reading through any tail bytes before calling the read callback.
1055 * this is a repeat of the above logic adjusted for the fact we
1056 * don't have a whole word. note though if the client is feeding
1057 * us data a byte at a time (unlikely), br->consumed_bits may not
1061 const unsigned end = br->bytes * 8;
1062 brword b = (br->buffer[cwords] & ~(FLAC__WORD_ALL_ONES >> end)) << cbits;
1064 i = COUNT_ZERO_MSBS(b);
1067 cbits++; /* skip over stop bit */
1068 FLAC__ASSERT(cbits < FLAC__BITS_PER_WORD);
1072 uval += end - cbits;
1074 FLAC__ASSERT(cbits < FLAC__BITS_PER_WORD);
1075 /* didn't find stop bit yet, have to keep going... */
1078 /* flush registers and read; bitreader_read_from_client_() does
1079 * not touch br->consumed_bits at all but we still need to set
1080 * it in case it fails and we have to return false.
1082 br->consumed_bits = cbits;
1083 br->consumed_words = cwords;
1084 if(!bitreader_read_from_client_(br))
1086 cwords = br->consumed_words;
1087 ucbits = (br->words-cwords)*FLAC__BITS_PER_WORD + br->bytes*8 - cbits + uval;
1088 /* + uval to offset our count by the # of unary bits already
1089 * consumed before the read, because we will add these back
1090 * in all at once at break1
1095 ucbits--; /* account for stop bit */
1097 /* read binary part */
1098 FLAC__ASSERT(cwords <= br->words);
1101 while(ucbits < parameter) {
1102 /* flush registers and read; bitreader_read_from_client_() does
1103 * not touch br->consumed_bits at all but we still need to set
1104 * it in case it fails and we have to return false.
1106 br->consumed_bits = cbits;
1107 br->consumed_words = cwords;
1108 if(!bitreader_read_from_client_(br))
1110 cwords = br->consumed_words;
1111 ucbits = (br->words-cwords)*FLAC__BITS_PER_WORD + br->bytes*8 - cbits;
1113 if(cwords < br->words) { /* if we've not consumed up to a partial tail word... */
1115 /* this also works when consumed_bits==0, it's just slower than necessary for that case */
1116 const unsigned n = FLAC__BITS_PER_WORD - cbits;
1117 const brword word = br->buffer[cwords];
1120 uval |= (word & (FLAC__WORD_ALL_ONES >> cbits)) >> (n-parameter);
1125 uval |= word & (FLAC__WORD_ALL_ONES >> cbits);
1126 crc16_update_word_(br, word);
1128 cbits = parameter - n;
1129 if(cbits) { /* parameter > n, i.e. if there are still bits left to read, there have to be less than 32 so they will all be in the next word */
1131 uval |= (br->buffer[cwords] >> (FLAC__BITS_PER_WORD-cbits));
1138 uval |= br->buffer[cwords] >> (FLAC__BITS_PER_WORD-cbits);
1142 /* in this case we're starting our read at a partial tail word;
1143 * the reader has guaranteed that we have at least 'parameter'
1144 * bits available to read, which makes this case simpler.
1148 /* this also works when consumed_bits==0, it's just a little slower than necessary for that case */
1149 FLAC__ASSERT(cbits + parameter <= br->bytes*8);
1150 uval |= (br->buffer[cwords] & (FLAC__WORD_ALL_ONES >> cbits)) >> (FLAC__BITS_PER_WORD-cbits-parameter);
1155 uval |= br->buffer[cwords] >> (FLAC__BITS_PER_WORD-cbits);
1160 ucbits -= parameter;
1162 /* compose the value */
1163 *vals = (int)(uval >> 1 ^ -(int)(uval & 1));
1168 br->consumed_bits = cbits;
1169 br->consumed_words = cwords;
1181 FLAC__bool FLAC__bitreader_read_golomb_signed(FLAC__BitReader *br, int *val, unsigned parameter)
1183 FLAC__uint32 lsbs = 0, msbs = 0;
1184 unsigned bit, uval, k;
1186 FLAC__ASSERT(0 != br);
1187 FLAC__ASSERT(0 != br->buffer);
1189 k = FLAC__bitmath_ilog2(parameter);
1191 /* read the unary MSBs and end bit */
1192 if(!FLAC__bitreader_read_unary_unsigned(br, &msbs))
1195 /* read the binary LSBs */
1196 if(!FLAC__bitreader_read_raw_uint32(br, &lsbs, k))
1199 if(parameter == 1u<<k) {
1200 /* compose the value */
1201 uval = (msbs << k) | lsbs;
1204 unsigned d = (1 << (k+1)) - parameter;
1206 if(!FLAC__bitreader_read_bit(br, &bit))
1212 /* compose the value */
1213 uval = msbs * parameter + lsbs;
1216 /* unfold unsigned to signed */
1218 *val = -((int)(uval >> 1)) - 1;
1220 *val = (int)(uval >> 1);
1225 FLAC__bool FLAC__bitreader_read_golomb_unsigned(FLAC__BitReader *br, unsigned *val, unsigned parameter)
1227 FLAC__uint32 lsbs, msbs = 0;
1230 FLAC__ASSERT(0 != br);
1231 FLAC__ASSERT(0 != br->buffer);
1233 k = FLAC__bitmath_ilog2(parameter);
1235 /* read the unary MSBs and end bit */
1236 if(!FLAC__bitreader_read_unary_unsigned(br, &msbs))
1239 /* read the binary LSBs */
1240 if(!FLAC__bitreader_read_raw_uint32(br, &lsbs, k))
1243 if(parameter == 1u<<k) {
1244 /* compose the value */
1245 *val = (msbs << k) | lsbs;
1248 unsigned d = (1 << (k+1)) - parameter;
1250 if(!FLAC__bitreader_read_bit(br, &bit))
1256 /* compose the value */
1257 *val = msbs * parameter + lsbs;
1264 /* on return, if *val == 0xffffffff then the utf-8 sequence was invalid, but the return value will be true */
1265 FLAC__bool FLAC__bitreader_read_utf8_uint32(FLAC__BitReader *br, FLAC__uint32 *val, FLAC__byte *raw, unsigned *rawlen)
1271 if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
1274 raw[(*rawlen)++] = (FLAC__byte)x;
1275 if(!(x & 0x80)) { /* 0xxxxxxx */
1279 else if(x & 0xC0 && !(x & 0x20)) { /* 110xxxxx */
1283 else if(x & 0xE0 && !(x & 0x10)) { /* 1110xxxx */
1287 else if(x & 0xF0 && !(x & 0x08)) { /* 11110xxx */
1291 else if(x & 0xF8 && !(x & 0x04)) { /* 111110xx */
1295 else if(x & 0xFC && !(x & 0x02)) { /* 1111110x */
1304 if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
1307 raw[(*rawlen)++] = (FLAC__byte)x;
1308 if(!(x & 0x80) || (x & 0x40)) { /* 10xxxxxx */
1319 /* on return, if *val == 0xffffffffffffffff then the utf-8 sequence was invalid, but the return value will be true */
1320 FLAC__bool FLAC__bitreader_read_utf8_uint64(FLAC__BitReader *br, FLAC__uint64 *val, FLAC__byte *raw, unsigned *rawlen)
1326 if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
1329 raw[(*rawlen)++] = (FLAC__byte)x;
1330 if(!(x & 0x80)) { /* 0xxxxxxx */
1334 else if(x & 0xC0 && !(x & 0x20)) { /* 110xxxxx */
1338 else if(x & 0xE0 && !(x & 0x10)) { /* 1110xxxx */
1342 else if(x & 0xF0 && !(x & 0x08)) { /* 11110xxx */
1346 else if(x & 0xF8 && !(x & 0x04)) { /* 111110xx */
1350 else if(x & 0xFC && !(x & 0x02)) { /* 1111110x */
1354 else if(x & 0xFE && !(x & 0x01)) { /* 11111110 */
1359 *val = FLAC__U64L(0xffffffffffffffff);
1363 if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
1366 raw[(*rawlen)++] = (FLAC__byte)x;
1367 if(!(x & 0x80) || (x & 0x40)) { /* 10xxxxxx */
1368 *val = FLAC__U64L(0xffffffffffffffff);