Home | History | Annotate | Download | only in libFLAC
      1 /* libFLAC - Free Lossless Audio Codec library
      2  * Copyright (C) 2000-2009  Josh Coalson
      3  * Copyright (C) 2011-2016  Xiph.Org Foundation
      4  *
      5  * Redistribution and use in source and binary forms, with or without
      6  * modification, are permitted provided that the following conditions
      7  * are met:
      8  *
      9  * - Redistributions of source code must retain the above copyright
     10  * notice, this list of conditions and the following disclaimer.
     11  *
     12  * - Redistributions in binary form must reproduce the above copyright
     13  * notice, this list of conditions and the following disclaimer in the
     14  * documentation and/or other materials provided with the distribution.
     15  *
     16  * - Neither the name of the Xiph.org Foundation nor the names of its
     17  * contributors may be used to endorse or promote products derived from
     18  * this software without specific prior written permission.
     19  *
     20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     21  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     23  * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
     24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     27  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
     28  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
     29  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     31  */
     32 
     33 #ifdef HAVE_CONFIG_H
     34 #  include <config.h>
     35 #endif
     36 
     37 #include <stdlib.h>
     38 #include <string.h>
     39 #include "private/bitmath.h"
     40 #include "private/bitreader.h"
     41 #include "private/crc.h"
     42 #include "private/macros.h"
     43 #include "FLAC/assert.h"
     44 #include "share/compat.h"
     45 #include "share/endswap.h"
     46 
     47 /* Things should be fastest when this matches the machine word size */
     48 /* WATCHOUT: if you change this you must also change the following #defines down to COUNT_ZERO_MSBS2 below to match */
     49 /* WATCHOUT: there are a few places where the code will not work unless brword is >= 32 bits wide */
     50 /*           also, some sections currently only have fast versions for 4 or 8 bytes per word */
     51 
     52 #if (ENABLE_64_BIT_WORDS == 0)
     53 
     54 typedef FLAC__uint32 brword;
     55 #define FLAC__BYTES_PER_WORD 4		/* sizeof brword */
     56 #define FLAC__BITS_PER_WORD 32
     57 #define FLAC__WORD_ALL_ONES ((FLAC__uint32)0xffffffff)
     58 /* SWAP_BE_WORD_TO_HOST swaps bytes in a brword (which is always big-endian) if necessary to match host byte order */
     59 #if WORDS_BIGENDIAN
     60 #define SWAP_BE_WORD_TO_HOST(x) (x)
     61 #else
     62 #define SWAP_BE_WORD_TO_HOST(x) ENDSWAP_32(x)
     63 #endif
     64 /* counts the # of zero MSBs in a word */
     65 #define COUNT_ZERO_MSBS(word) FLAC__clz_uint32(word)
     66 #define COUNT_ZERO_MSBS2(word) FLAC__clz2_uint32(word)
     67 
     68 #else
     69 
     70 typedef FLAC__uint64 brword;
     71 #define FLAC__BYTES_PER_WORD 8		/* sizeof brword */
     72 #define FLAC__BITS_PER_WORD 64
     73 #define FLAC__WORD_ALL_ONES ((FLAC__uint64)FLAC__U64L(0xffffffffffffffff))
     74 /* SWAP_BE_WORD_TO_HOST swaps bytes in a brword (which is always big-endian) if necessary to match host byte order */
     75 #if WORDS_BIGENDIAN
     76 #define SWAP_BE_WORD_TO_HOST(x) (x)
     77 #else
     78 #define SWAP_BE_WORD_TO_HOST(x) ENDSWAP_64(x)
     79 #endif
     80 /* counts the # of zero MSBs in a word */
     81 #define COUNT_ZERO_MSBS(word) FLAC__clz_uint64(word)
     82 #define COUNT_ZERO_MSBS2(word) FLAC__clz2_uint64(word)
     83 
     84 #endif
     85 
     86 /*
     87  * This should be at least twice as large as the largest number of words
     88  * required to represent any 'number' (in any encoding) you are going to
     89  * read.  With FLAC this is on the order of maybe a few hundred bits.
     90  * If the buffer is smaller than that, the decoder won't be able to read
     91  * in a whole number that is in a variable length encoding (e.g. Rice).
     92  * But to be practical it should be at least 1K bytes.
     93  *
     94  * Increase this number to decrease the number of read callbacks, at the
     95  * expense of using more memory.  Or decrease for the reverse effect,
     96  * keeping in mind the limit from the first paragraph.  The optimal size
     97  * also depends on the CPU cache size and other factors; some twiddling
     98  * may be necessary to squeeze out the best performance.
     99  */
    100 static const unsigned FLAC__BITREADER_DEFAULT_CAPACITY = 65536u / FLAC__BITS_PER_WORD; /* in words */
    101 
    102 struct FLAC__BitReader {
    103 	/* any partially-consumed word at the head will stay right-justified as bits are consumed from the left */
    104 	/* any incomplete word at the tail will be left-justified, and bytes from the read callback are added on the right */
    105 	brword *buffer;
    106 	unsigned capacity; /* in words */
    107 	unsigned words; /* # of completed words in buffer */
    108 	unsigned bytes; /* # of bytes in incomplete word at buffer[words] */
    109 	unsigned consumed_words; /* #words ... */
    110 	unsigned consumed_bits; /* ... + (#bits of head word) already consumed from the front of buffer */
    111 	unsigned read_crc16; /* the running frame CRC */
    112 	unsigned crc16_align; /* the number of bits in the current consumed word that should not be CRC'd */
    113 	FLAC__BitReaderReadCallback read_callback;
    114 	void *client_data;
    115 };
    116 
    117 static inline void crc16_update_word_(FLAC__BitReader *br, brword word)
    118 {
    119 	register unsigned crc = br->read_crc16;
    120 #if FLAC__BYTES_PER_WORD == 4
    121 	switch(br->crc16_align) {
    122 		case  0: crc = FLAC__CRC16_UPDATE((unsigned)(word >> 24), crc);
    123 		case  8: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 16) & 0xff), crc);
    124 		case 16: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 8) & 0xff), crc);
    125 		case 24: br->read_crc16 = FLAC__CRC16_UPDATE((unsigned)(word & 0xff), crc);
    126 	}
    127 #elif FLAC__BYTES_PER_WORD == 8
    128 	switch(br->crc16_align) {
    129 		case  0: crc = FLAC__CRC16_UPDATE((unsigned)(word >> 56), crc);
    130 		case  8: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 48) & 0xff), crc);
    131 		case 16: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 40) & 0xff), crc);
    132 		case 24: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 32) & 0xff), crc);
    133 		case 32: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 24) & 0xff), crc);
    134 		case 40: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 16) & 0xff), crc);
    135 		case 48: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 8) & 0xff), crc);
    136 		case 56: br->read_crc16 = FLAC__CRC16_UPDATE((unsigned)(word & 0xff), crc);
    137 	}
    138 #else
    139 	for( ; br->crc16_align < FLAC__BITS_PER_WORD; br->crc16_align += 8)
    140 		crc = FLAC__CRC16_UPDATE((unsigned)((word >> (FLAC__BITS_PER_WORD-8-br->crc16_align)) & 0xff), crc);
    141 	br->read_crc16 = crc;
    142 #endif
    143 	br->crc16_align = 0;
    144 }
    145 
    146 static FLAC__bool bitreader_read_from_client_(FLAC__BitReader *br)
    147 {
    148 	unsigned start, end;
    149 	size_t bytes;
    150 	FLAC__byte *target;
    151 
    152 	/* first shift the unconsumed buffer data toward the front as much as possible */
    153 	if(br->consumed_words > 0) {
    154 		start = br->consumed_words;
    155 		end = br->words + (br->bytes? 1:0);
    156 		memmove(br->buffer, br->buffer+start, FLAC__BYTES_PER_WORD * (end - start));
    157 
    158 		br->words -= start;
    159 		br->consumed_words = 0;
    160 	}
    161 
    162 	/*
    163 	 * set the target for reading, taking into account word alignment and endianness
    164 	 */
    165 	bytes = (br->capacity - br->words) * FLAC__BYTES_PER_WORD - br->bytes;
    166 	if(bytes == 0)
    167 		return false; /* no space left, buffer is too small; see note for FLAC__BITREADER_DEFAULT_CAPACITY  */
    168 	target = ((FLAC__byte*)(br->buffer+br->words)) + br->bytes;
    169 
    170 	/* before reading, if the existing reader looks like this (say brword is 32 bits wide)
    171 	 *   bitstream :  11 22 33 44 55            br->words=1 br->bytes=1 (partial tail word is left-justified)
    172 	 *   buffer[BE]:  11 22 33 44 55 ?? ?? ??   (shown layed out as bytes sequentially in memory)
    173 	 *   buffer[LE]:  44 33 22 11 ?? ?? ?? 55   (?? being don't-care)
    174 	 *                               ^^-------target, bytes=3
    175 	 * on LE machines, have to byteswap the odd tail word so nothing is
    176 	 * overwritten:
    177 	 */
    178 #if WORDS_BIGENDIAN
    179 #else
    180 	if(br->bytes)
    181 		br->buffer[br->words] = SWAP_BE_WORD_TO_HOST(br->buffer[br->words]);
    182 #endif
    183 
    184 	/* now it looks like:
    185 	 *   bitstream :  11 22 33 44 55            br->words=1 br->bytes=1
    186 	 *   buffer[BE]:  11 22 33 44 55 ?? ?? ??
    187 	 *   buffer[LE]:  44 33 22 11 55 ?? ?? ??
    188 	 *                               ^^-------target, bytes=3
    189 	 */
    190 
    191 	/* read in the data; note that the callback may return a smaller number of bytes */
    192 	if(!br->read_callback(target, &bytes, br->client_data))
    193 		return false;
    194 
    195 	/* after reading bytes 66 77 88 99 AA BB CC DD EE FF from the client:
    196 	 *   bitstream :  11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF
    197 	 *   buffer[BE]:  11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ??
    198 	 *   buffer[LE]:  44 33 22 11 55 66 77 88 99 AA BB CC DD EE FF ??
    199 	 * now have to byteswap on LE machines:
    200 	 */
    201 #if WORDS_BIGENDIAN
    202 #else
    203 	end = (br->words*FLAC__BYTES_PER_WORD + br->bytes + (unsigned)bytes + (FLAC__BYTES_PER_WORD-1)) / FLAC__BYTES_PER_WORD;
    204 	for(start = br->words; start < end; start++)
    205 		br->buffer[start] = SWAP_BE_WORD_TO_HOST(br->buffer[start]);
    206 #endif
    207 
    208 	/* now it looks like:
    209 	 *   bitstream :  11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF
    210 	 *   buffer[BE]:  11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ??
    211 	 *   buffer[LE]:  44 33 22 11 88 77 66 55 CC BB AA 99 ?? FF EE DD
    212 	 * finally we'll update the reader values:
    213 	 */
    214 	end = br->words*FLAC__BYTES_PER_WORD + br->bytes + (unsigned)bytes;
    215 	br->words = end / FLAC__BYTES_PER_WORD;
    216 	br->bytes = end % FLAC__BYTES_PER_WORD;
    217 
    218 	return true;
    219 }
    220 
    221 /***********************************************************************
    222  *
    223  * Class constructor/destructor
    224  *
    225  ***********************************************************************/
    226 
    227 FLAC__BitReader *FLAC__bitreader_new(void)
    228 {
    229 	FLAC__BitReader *br = calloc(1, sizeof(FLAC__BitReader));
    230 
    231 	/* calloc() implies:
    232 		memset(br, 0, sizeof(FLAC__BitReader));
    233 		br->buffer = 0;
    234 		br->capacity = 0;
    235 		br->words = br->bytes = 0;
    236 		br->consumed_words = br->consumed_bits = 0;
    237 		br->read_callback = 0;
    238 		br->client_data = 0;
    239 	*/
    240 	return br;
    241 }
    242 
    243 void FLAC__bitreader_delete(FLAC__BitReader *br)
    244 {
    245 	FLAC__ASSERT(0 != br);
    246 
    247 	FLAC__bitreader_free(br);
    248 	free(br);
    249 }
    250 
    251 /***********************************************************************
    252  *
    253  * Public class methods
    254  *
    255  ***********************************************************************/
    256 
    257 FLAC__bool FLAC__bitreader_init(FLAC__BitReader *br, FLAC__BitReaderReadCallback rcb, void *cd)
    258 {
    259 	FLAC__ASSERT(0 != br);
    260 
    261 	br->words = br->bytes = 0;
    262 	br->consumed_words = br->consumed_bits = 0;
    263 	br->capacity = FLAC__BITREADER_DEFAULT_CAPACITY;
    264 	br->buffer = malloc(sizeof(brword) * br->capacity);
    265 	if(br->buffer == 0)
    266 		return false;
    267 	br->read_callback = rcb;
    268 	br->client_data = cd;
    269 
    270 	return true;
    271 }
    272 
    273 void FLAC__bitreader_free(FLAC__BitReader *br)
    274 {
    275 	FLAC__ASSERT(0 != br);
    276 
    277 	if(0 != br->buffer)
    278 		free(br->buffer);
    279 	br->buffer = 0;
    280 	br->capacity = 0;
    281 	br->words = br->bytes = 0;
    282 	br->consumed_words = br->consumed_bits = 0;
    283 	br->read_callback = 0;
    284 	br->client_data = 0;
    285 }
    286 
    287 FLAC__bool FLAC__bitreader_clear(FLAC__BitReader *br)
    288 {
    289 	br->words = br->bytes = 0;
    290 	br->consumed_words = br->consumed_bits = 0;
    291 	return true;
    292 }
    293 
    294 void FLAC__bitreader_dump(const FLAC__BitReader *br, FILE *out)
    295 {
    296 	unsigned i, j;
    297 	if(br == 0) {
    298 		fprintf(out, "bitreader is NULL\n");
    299 	}
    300 	else {
    301 		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);
    302 
    303 		for(i = 0; i < br->words; i++) {
    304 			fprintf(out, "%08X: ", i);
    305 			for(j = 0; j < FLAC__BITS_PER_WORD; j++)
    306 				if(i < br->consumed_words || (i == br->consumed_words && j < br->consumed_bits))
    307 					fprintf(out, ".");
    308 				else
    309 					fprintf(out, "%01u", br->buffer[i] & ((brword)1 << (FLAC__BITS_PER_WORD-j-1)) ? 1:0);
    310 			fprintf(out, "\n");
    311 		}
    312 		if(br->bytes > 0) {
    313 			fprintf(out, "%08X: ", i);
    314 			for(j = 0; j < br->bytes*8; j++)
    315 				if(i < br->consumed_words || (i == br->consumed_words && j < br->consumed_bits))
    316 					fprintf(out, ".");
    317 				else
    318 					fprintf(out, "%01u", br->buffer[i] & ((brword)1 << (br->bytes*8-j-1)) ? 1:0);
    319 			fprintf(out, "\n");
    320 		}
    321 	}
    322 }
    323 
    324 void FLAC__bitreader_reset_read_crc16(FLAC__BitReader *br, FLAC__uint16 seed)
    325 {
    326 	FLAC__ASSERT(0 != br);
    327 	FLAC__ASSERT(0 != br->buffer);
    328 	FLAC__ASSERT((br->consumed_bits & 7) == 0);
    329 
    330 	br->read_crc16 = (unsigned)seed;
    331 	br->crc16_align = br->consumed_bits;
    332 }
    333 
    334 FLAC__uint16 FLAC__bitreader_get_read_crc16(FLAC__BitReader *br)
    335 {
    336 	FLAC__ASSERT(0 != br);
    337 	FLAC__ASSERT(0 != br->buffer);
    338 	FLAC__ASSERT((br->consumed_bits & 7) == 0);
    339 	FLAC__ASSERT(br->crc16_align <= br->consumed_bits);
    340 
    341 	/* CRC any tail bytes in a partially-consumed word */
    342 	if(br->consumed_bits) {
    343 		const brword tail = br->buffer[br->consumed_words];
    344 		for( ; br->crc16_align < br->consumed_bits; br->crc16_align += 8)
    345 			br->read_crc16 = FLAC__CRC16_UPDATE((unsigned)((tail >> (FLAC__BITS_PER_WORD-8-br->crc16_align)) & 0xff), br->read_crc16);
    346 	}
    347 	return br->read_crc16;
    348 }
    349 
    350 inline FLAC__bool FLAC__bitreader_is_consumed_byte_aligned(const FLAC__BitReader *br)
    351 {
    352 	return ((br->consumed_bits & 7) == 0);
    353 }
    354 
    355 inline unsigned FLAC__bitreader_bits_left_for_byte_alignment(const FLAC__BitReader *br)
    356 {
    357 	return 8 - (br->consumed_bits & 7);
    358 }
    359 
    360 inline unsigned FLAC__bitreader_get_input_bits_unconsumed(const FLAC__BitReader *br)
    361 {
    362 	return (br->words-br->consumed_words)*FLAC__BITS_PER_WORD + br->bytes*8 - br->consumed_bits;
    363 }
    364 
    365 FLAC__bool FLAC__bitreader_read_raw_uint32(FLAC__BitReader *br, FLAC__uint32 *val, unsigned bits)
    366 {
    367 	FLAC__ASSERT(0 != br);
    368 	FLAC__ASSERT(0 != br->buffer);
    369 
    370 	FLAC__ASSERT(bits <= 32);
    371 	FLAC__ASSERT((br->capacity*FLAC__BITS_PER_WORD) * 2 >= bits);
    372 	FLAC__ASSERT(br->consumed_words <= br->words);
    373 
    374 	/* WATCHOUT: code does not work with <32bit words; we can make things much faster with this assertion */
    375 	FLAC__ASSERT(FLAC__BITS_PER_WORD >= 32);
    376 
    377 	if(bits == 0) { /* OPT: investigate if this can ever happen, maybe change to assertion */
    378 		*val = 0;
    379 		return true;
    380 	}
    381 
    382 	while((br->words-br->consumed_words)*FLAC__BITS_PER_WORD + br->bytes*8 - br->consumed_bits < bits) {
    383 		if(!bitreader_read_from_client_(br))
    384 			return false;
    385 	}
    386 	if(br->consumed_words < br->words) { /* if we've not consumed up to a partial tail word... */
    387 		/* OPT: taking out the consumed_bits==0 "else" case below might make things faster if less code allows the compiler to inline this function */
    388 		if(br->consumed_bits) {
    389 			/* this also works when consumed_bits==0, it's just a little slower than necessary for that case */
    390 			const unsigned n = FLAC__BITS_PER_WORD - br->consumed_bits;
    391 			const brword word = br->buffer[br->consumed_words];
    392 			if(bits < n) {
    393 				*val = (FLAC__uint32)((word & (FLAC__WORD_ALL_ONES >> br->consumed_bits)) >> (n-bits)); /* The result has <= 32 non-zero bits */
    394 				br->consumed_bits += bits;
    395 				return true;
    396 			}
    397 			/* (FLAC__BITS_PER_WORD - br->consumed_bits <= bits) ==> (FLAC__WORD_ALL_ONES >> br->consumed_bits) has no more than 'bits' non-zero bits */
    398 			*val = (FLAC__uint32)(word & (FLAC__WORD_ALL_ONES >> br->consumed_bits));
    399 			bits -= n;
    400 			crc16_update_word_(br, word);
    401 			br->consumed_words++;
    402 			br->consumed_bits = 0;
    403 			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 */
    404 				*val <<= bits;
    405 				*val |= (FLAC__uint32)(br->buffer[br->consumed_words] >> (FLAC__BITS_PER_WORD-bits));
    406 				br->consumed_bits = bits;
    407 			}
    408 			return true;
    409 		}
    410 		else { /* br->consumed_bits == 0 */
    411 			const brword word = br->buffer[br->consumed_words];
    412 			if(bits < FLAC__BITS_PER_WORD) {
    413 				*val = (FLAC__uint32)(word >> (FLAC__BITS_PER_WORD-bits));
    414 				br->consumed_bits = bits;
    415 				return true;
    416 			}
    417 			/* at this point bits == FLAC__BITS_PER_WORD == 32; because of previous assertions, it can't be larger */
    418 			*val = (FLAC__uint32)word;
    419 			crc16_update_word_(br, word);
    420 			br->consumed_words++;
    421 			return true;
    422 		}
    423 	}
    424 	else {
    425 		/* in this case we're starting our read at a partial tail word;
    426 		 * the reader has guaranteed that we have at least 'bits' bits
    427 		 * available to read, which makes this case simpler.
    428 		 */
    429 		/* OPT: taking out the consumed_bits==0 "else" case below might make things faster if less code allows the compiler to inline this function */
    430 		if(br->consumed_bits) {
    431 			/* this also works when consumed_bits==0, it's just a little slower than necessary for that case */
    432 			FLAC__ASSERT(br->consumed_bits + bits <= br->bytes*8);
    433 			*val = (FLAC__uint32)((br->buffer[br->consumed_words] & (FLAC__WORD_ALL_ONES >> br->consumed_bits)) >> (FLAC__BITS_PER_WORD-br->consumed_bits-bits));
    434 			br->consumed_bits += bits;
    435 			return true;
    436 		}
    437 		else {
    438 			*val = (FLAC__uint32)(br->buffer[br->consumed_words] >> (FLAC__BITS_PER_WORD-bits));
    439 			br->consumed_bits += bits;
    440 			return true;
    441 		}
    442 	}
    443 }
    444 
    445 FLAC__bool FLAC__bitreader_read_raw_int32(FLAC__BitReader *br, FLAC__int32 *val, unsigned bits)
    446 {
    447 	FLAC__uint32 uval, mask;
    448 	/* OPT: inline raw uint32 code here, or make into a macro if possible in the .h file */
    449 	if(!FLAC__bitreader_read_raw_uint32(br, &uval, bits))
    450 		return false;
    451 	/* sign-extend *val assuming it is currently bits wide. */
    452 	/* From: https://graphics.stanford.edu/~seander/bithacks.html#FixedSignExtend */
    453 	mask = 1u << (bits - 1);
    454 	*val = (uval ^ mask) - mask;
    455 	return true;
    456 }
    457 
    458 FLAC__bool FLAC__bitreader_read_raw_uint64(FLAC__BitReader *br, FLAC__uint64 *val, unsigned bits)
    459 {
    460 	FLAC__uint32 hi, lo;
    461 
    462 	if(bits > 32) {
    463 		if(!FLAC__bitreader_read_raw_uint32(br, &hi, bits-32))
    464 			return false;
    465 		if(!FLAC__bitreader_read_raw_uint32(br, &lo, 32))
    466 			return false;
    467 		*val = hi;
    468 		*val <<= 32;
    469 		*val |= lo;
    470 	}
    471 	else {
    472 		if(!FLAC__bitreader_read_raw_uint32(br, &lo, bits))
    473 			return false;
    474 		*val = lo;
    475 	}
    476 	return true;
    477 }
    478 
    479 inline FLAC__bool FLAC__bitreader_read_uint32_little_endian(FLAC__BitReader *br, FLAC__uint32 *val)
    480 {
    481 	FLAC__uint32 x8, x32 = 0;
    482 
    483 	/* this doesn't need to be that fast as currently it is only used for vorbis comments */
    484 
    485 	if(!FLAC__bitreader_read_raw_uint32(br, &x32, 8))
    486 		return false;
    487 
    488 	if(!FLAC__bitreader_read_raw_uint32(br, &x8, 8))
    489 		return false;
    490 	x32 |= (x8 << 8);
    491 
    492 	if(!FLAC__bitreader_read_raw_uint32(br, &x8, 8))
    493 		return false;
    494 	x32 |= (x8 << 16);
    495 
    496 	if(!FLAC__bitreader_read_raw_uint32(br, &x8, 8))
    497 		return false;
    498 	x32 |= (x8 << 24);
    499 
    500 	*val = x32;
    501 	return true;
    502 }
    503 
    504 FLAC__bool FLAC__bitreader_skip_bits_no_crc(FLAC__BitReader *br, unsigned bits)
    505 {
    506 	/*
    507 	 * OPT: a faster implementation is possible but probably not that useful
    508 	 * since this is only called a couple of times in the metadata readers.
    509 	 */
    510 	FLAC__ASSERT(0 != br);
    511 	FLAC__ASSERT(0 != br->buffer);
    512 
    513 	if(bits > 0) {
    514 		const unsigned n = br->consumed_bits & 7;
    515 		unsigned m;
    516 		FLAC__uint32 x;
    517 
    518 		if(n != 0) {
    519 			m = flac_min(8-n, bits);
    520 			if(!FLAC__bitreader_read_raw_uint32(br, &x, m))
    521 				return false;
    522 			bits -= m;
    523 		}
    524 		m = bits / 8;
    525 		if(m > 0) {
    526 			if(!FLAC__bitreader_skip_byte_block_aligned_no_crc(br, m))
    527 				return false;
    528 			bits %= 8;
    529 		}
    530 		if(bits > 0) {
    531 			if(!FLAC__bitreader_read_raw_uint32(br, &x, bits))
    532 				return false;
    533 		}
    534 	}
    535 
    536 	return true;
    537 }
    538 
    539 FLAC__bool FLAC__bitreader_skip_byte_block_aligned_no_crc(FLAC__BitReader *br, unsigned nvals)
    540 {
    541 	FLAC__uint32 x;
    542 
    543 	FLAC__ASSERT(0 != br);
    544 	FLAC__ASSERT(0 != br->buffer);
    545 	FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(br));
    546 
    547 	/* step 1: skip over partial head word to get word aligned */
    548 	while(nvals && br->consumed_bits) { /* i.e. run until we read 'nvals' bytes or we hit the end of the head word */
    549 		if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
    550 			return false;
    551 		nvals--;
    552 	}
    553 	if(0 == nvals)
    554 		return true;
    555 	/* step 2: skip whole words in chunks */
    556 	while(nvals >= FLAC__BYTES_PER_WORD) {
    557 		if(br->consumed_words < br->words) {
    558 			br->consumed_words++;
    559 			nvals -= FLAC__BYTES_PER_WORD;
    560 		}
    561 		else if(!bitreader_read_from_client_(br))
    562 			return false;
    563 	}
    564 	/* step 3: skip any remainder from partial tail bytes */
    565 	while(nvals) {
    566 		if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
    567 			return false;
    568 		nvals--;
    569 	}
    570 
    571 	return true;
    572 }
    573 
    574 FLAC__bool FLAC__bitreader_read_byte_block_aligned_no_crc(FLAC__BitReader *br, FLAC__byte *val, unsigned nvals)
    575 {
    576 	FLAC__uint32 x;
    577 
    578 	FLAC__ASSERT(0 != br);
    579 	FLAC__ASSERT(0 != br->buffer);
    580 	FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(br));
    581 
    582 	/* step 1: read from partial head word to get word aligned */
    583 	while(nvals && br->consumed_bits) { /* i.e. run until we read 'nvals' bytes or we hit the end of the head word */
    584 		if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
    585 			return false;
    586 		*val++ = (FLAC__byte)x;
    587 		nvals--;
    588 	}
    589 	if(0 == nvals)
    590 		return true;
    591 	/* step 2: read whole words in chunks */
    592 	while(nvals >= FLAC__BYTES_PER_WORD) {
    593 		if(br->consumed_words < br->words) {
    594 			const brword word = br->buffer[br->consumed_words++];
    595 #if FLAC__BYTES_PER_WORD == 4
    596 			val[0] = (FLAC__byte)(word >> 24);
    597 			val[1] = (FLAC__byte)(word >> 16);
    598 			val[2] = (FLAC__byte)(word >> 8);
    599 			val[3] = (FLAC__byte)word;
    600 #elif FLAC__BYTES_PER_WORD == 8
    601 			val[0] = (FLAC__byte)(word >> 56);
    602 			val[1] = (FLAC__byte)(word >> 48);
    603 			val[2] = (FLAC__byte)(word >> 40);
    604 			val[3] = (FLAC__byte)(word >> 32);
    605 			val[4] = (FLAC__byte)(word >> 24);
    606 			val[5] = (FLAC__byte)(word >> 16);
    607 			val[6] = (FLAC__byte)(word >> 8);
    608 			val[7] = (FLAC__byte)word;
    609 #else
    610 			for(x = 0; x < FLAC__BYTES_PER_WORD; x++)
    611 				val[x] = (FLAC__byte)(word >> (8*(FLAC__BYTES_PER_WORD-x-1)));
    612 #endif
    613 			val += FLAC__BYTES_PER_WORD;
    614 			nvals -= FLAC__BYTES_PER_WORD;
    615 		}
    616 		else if(!bitreader_read_from_client_(br))
    617 			return false;
    618 	}
    619 	/* step 3: read any remainder from partial tail bytes */
    620 	while(nvals) {
    621 		if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
    622 			return false;
    623 		*val++ = (FLAC__byte)x;
    624 		nvals--;
    625 	}
    626 
    627 	return true;
    628 }
    629 
    630 FLAC__bool FLAC__bitreader_read_unary_unsigned(FLAC__BitReader *br, unsigned *val)
    631 #if 0 /* slow but readable version */
    632 {
    633 	unsigned bit;
    634 
    635 	FLAC__ASSERT(0 != br);
    636 	FLAC__ASSERT(0 != br->buffer);
    637 
    638 	*val = 0;
    639 	while(1) {
    640 		if(!FLAC__bitreader_read_bit(br, &bit))
    641 			return false;
    642 		if(bit)
    643 			break;
    644 		else
    645 			*val++;
    646 	}
    647 	return true;
    648 }
    649 #else
    650 {
    651 	unsigned i;
    652 
    653 	FLAC__ASSERT(0 != br);
    654 	FLAC__ASSERT(0 != br->buffer);
    655 
    656 	*val = 0;
    657 	while(1) {
    658 		while(br->consumed_words < br->words) { /* if we've not consumed up to a partial tail word... */
    659 			brword b = br->buffer[br->consumed_words] << br->consumed_bits;
    660 			if(b) {
    661 				i = COUNT_ZERO_MSBS(b);
    662 				*val += i;
    663 				i++;
    664 				br->consumed_bits += i;
    665 				if(br->consumed_bits >= FLAC__BITS_PER_WORD) { /* faster way of testing if(br->consumed_bits == FLAC__BITS_PER_WORD) */
    666 					crc16_update_word_(br, br->buffer[br->consumed_words]);
    667 					br->consumed_words++;
    668 					br->consumed_bits = 0;
    669 				}
    670 				return true;
    671 			}
    672 			else {
    673 				*val += FLAC__BITS_PER_WORD - br->consumed_bits;
    674 				crc16_update_word_(br, br->buffer[br->consumed_words]);
    675 				br->consumed_words++;
    676 				br->consumed_bits = 0;
    677 				/* didn't find stop bit yet, have to keep going... */
    678 			}
    679 		}
    680 		/* at this point we've eaten up all the whole words; have to try
    681 		 * reading through any tail bytes before calling the read callback.
    682 		 * this is a repeat of the above logic adjusted for the fact we
    683 		 * don't have a whole word.  note though if the client is feeding
    684 		 * us data a byte at a time (unlikely), br->consumed_bits may not
    685 		 * be zero.
    686 		 */
    687 		if(br->bytes*8 > br->consumed_bits) {
    688 			const unsigned end = br->bytes * 8;
    689 			brword b = (br->buffer[br->consumed_words] & (FLAC__WORD_ALL_ONES << (FLAC__BITS_PER_WORD-end))) << br->consumed_bits;
    690 			if(b) {
    691 				i = COUNT_ZERO_MSBS(b);
    692 				*val += i;
    693 				i++;
    694 				br->consumed_bits += i;
    695 				FLAC__ASSERT(br->consumed_bits < FLAC__BITS_PER_WORD);
    696 				return true;
    697 			}
    698 			else {
    699 				*val += end - br->consumed_bits;
    700 				br->consumed_bits = end;
    701 				FLAC__ASSERT(br->consumed_bits < FLAC__BITS_PER_WORD);
    702 				/* didn't find stop bit yet, have to keep going... */
    703 			}
    704 		}
    705 		if(!bitreader_read_from_client_(br))
    706 			return false;
    707 	}
    708 }
    709 #endif
    710 
    711 FLAC__bool FLAC__bitreader_read_rice_signed(FLAC__BitReader *br, int *val, unsigned parameter)
    712 {
    713 	FLAC__uint32 lsbs = 0, msbs = 0;
    714 	unsigned uval;
    715 
    716 	FLAC__ASSERT(0 != br);
    717 	FLAC__ASSERT(0 != br->buffer);
    718 	FLAC__ASSERT(parameter <= 31);
    719 
    720 	/* read the unary MSBs and end bit */
    721 	if(!FLAC__bitreader_read_unary_unsigned(br, &msbs))
    722 		return false;
    723 
    724 	/* read the binary LSBs */
    725 	if(!FLAC__bitreader_read_raw_uint32(br, &lsbs, parameter))
    726 		return false;
    727 
    728 	/* compose the value */
    729 	uval = (msbs << parameter) | lsbs;
    730 	if(uval & 1)
    731 		*val = -((int)(uval >> 1)) - 1;
    732 	else
    733 		*val = (int)(uval >> 1);
    734 
    735 	return true;
    736 }
    737 
    738 /* this is by far the most heavily used reader call.  it ain't pretty but it's fast */
    739 FLAC__bool FLAC__bitreader_read_rice_signed_block(FLAC__BitReader *br, int vals[], unsigned nvals, unsigned parameter)
    740 {
    741 	/* try and get br->consumed_words and br->consumed_bits into register;
    742 	 * must remember to flush them back to *br before calling other
    743 	 * bitreader functions that use them, and before returning */
    744 	unsigned cwords, words, lsbs, msbs, x, y;
    745 	unsigned ucbits; /* keep track of the number of unconsumed bits in word */
    746 	brword b;
    747 	int *val, *end;
    748 
    749 	FLAC__ASSERT(0 != br);
    750 	FLAC__ASSERT(0 != br->buffer);
    751 	/* WATCHOUT: code does not work with <32bit words; we can make things much faster with this assertion */
    752 	FLAC__ASSERT(FLAC__BITS_PER_WORD >= 32);
    753 	FLAC__ASSERT(parameter < 32);
    754 	/* 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 */
    755 
    756 	val = vals;
    757 	end = vals + nvals;
    758 
    759 	if(parameter == 0) {
    760 		while(val < end) {
    761 			/* read the unary MSBs and end bit */
    762 			if(!FLAC__bitreader_read_unary_unsigned(br, &msbs))
    763 				return false;
    764 
    765 			*val++ = (int)(msbs >> 1) ^ -(int)(msbs & 1);
    766 		}
    767 
    768 		return true;
    769 	}
    770 
    771 	FLAC__ASSERT(parameter > 0);
    772 
    773 	cwords = br->consumed_words;
    774 	words = br->words;
    775 
    776 	/* if we've not consumed up to a partial tail word... */
    777 	if(cwords >= words) {
    778 		x = 0;
    779 		goto process_tail;
    780 	}
    781 
    782 	ucbits = FLAC__BITS_PER_WORD - br->consumed_bits;
    783 	b = br->buffer[cwords] << br->consumed_bits;  /* keep unconsumed bits aligned to left */
    784 
    785 	while(val < end) {
    786 		/* read the unary MSBs and end bit */
    787 		x = y = COUNT_ZERO_MSBS2(b);
    788 		if(x == FLAC__BITS_PER_WORD) {
    789 			x = ucbits;
    790 			do {
    791 				/* didn't find stop bit yet, have to keep going... */
    792 				crc16_update_word_(br, br->buffer[cwords++]);
    793 				if (cwords >= words)
    794 					goto incomplete_msbs;
    795 				b = br->buffer[cwords];
    796 				y = COUNT_ZERO_MSBS2(b);
    797 				x += y;
    798 			} while(y == FLAC__BITS_PER_WORD);
    799 		}
    800 		b <<= y;
    801 		b <<= 1; /* account for stop bit */
    802 		ucbits = (ucbits - x - 1) % FLAC__BITS_PER_WORD;
    803 		msbs = x;
    804 
    805 		/* read the binary LSBs */
    806 		x = (FLAC__uint32)(b >> (FLAC__BITS_PER_WORD - parameter)); /* parameter < 32, so we can cast to 32-bit unsigned */
    807 		if(parameter <= ucbits) {
    808 			ucbits -= parameter;
    809 			b <<= parameter;
    810 		} else {
    811 			/* there are still bits left to read, they will all be in the next word */
    812 			crc16_update_word_(br, br->buffer[cwords++]);
    813 			if (cwords >= words)
    814 				goto incomplete_lsbs;
    815 			b = br->buffer[cwords];
    816 			ucbits += FLAC__BITS_PER_WORD - parameter;
    817 			x |= (FLAC__uint32)(b >> ucbits);
    818 			b <<= FLAC__BITS_PER_WORD - ucbits;
    819 		}
    820 		lsbs = x;
    821 
    822 		/* compose the value */
    823 		x = (msbs << parameter) | lsbs;
    824 		*val++ = (int)(x >> 1) ^ -(int)(x & 1);
    825 
    826 		continue;
    827 
    828 		/* at this point we've eaten up all the whole words */
    829 process_tail:
    830 		do {
    831 			if(0) {
    832 incomplete_msbs:
    833 				br->consumed_bits = 0;
    834 				br->consumed_words = cwords;
    835 			}
    836 
    837 			/* read the unary MSBs and end bit */
    838 			if(!FLAC__bitreader_read_unary_unsigned(br, &msbs))
    839 				return false;
    840 			msbs += x;
    841 			x = ucbits = 0;
    842 
    843 			if(0) {
    844 incomplete_lsbs:
    845 				br->consumed_bits = 0;
    846 				br->consumed_words = cwords;
    847 			}
    848 
    849 			/* read the binary LSBs */
    850 			if(!FLAC__bitreader_read_raw_uint32(br, &lsbs, parameter - ucbits))
    851 				return false;
    852 			lsbs = x | lsbs;
    853 
    854 			/* compose the value */
    855 			x = (msbs << parameter) | lsbs;
    856 			*val++ = (int)(x >> 1) ^ -(int)(x & 1);
    857 			x = 0;
    858 
    859 			cwords = br->consumed_words;
    860 			words = br->words;
    861 			ucbits = FLAC__BITS_PER_WORD - br->consumed_bits;
    862 			b = br->buffer[cwords] << br->consumed_bits;
    863 		} while(cwords >= words && val < end);
    864 	}
    865 
    866 	if(ucbits == 0 && cwords < words) {
    867 		/* don't leave the head word with no unconsumed bits */
    868 		crc16_update_word_(br, br->buffer[cwords++]);
    869 		ucbits = FLAC__BITS_PER_WORD;
    870 	}
    871 
    872 	br->consumed_bits = FLAC__BITS_PER_WORD - ucbits;
    873 	br->consumed_words = cwords;
    874 
    875 	return true;
    876 }
    877 
    878 #if 0 /* UNUSED */
    879 FLAC__bool FLAC__bitreader_read_golomb_signed(FLAC__BitReader *br, int *val, unsigned parameter)
    880 {
    881 	FLAC__uint32 lsbs = 0, msbs = 0;
    882 	unsigned bit, uval, k;
    883 
    884 	FLAC__ASSERT(0 != br);
    885 	FLAC__ASSERT(0 != br->buffer);
    886 
    887 	k = FLAC__bitmath_ilog2(parameter);
    888 
    889 	/* read the unary MSBs and end bit */
    890 	if(!FLAC__bitreader_read_unary_unsigned(br, &msbs))
    891 		return false;
    892 
    893 	/* read the binary LSBs */
    894 	if(!FLAC__bitreader_read_raw_uint32(br, &lsbs, k))
    895 		return false;
    896 
    897 	if(parameter == 1u<<k) {
    898 		/* compose the value */
    899 		uval = (msbs << k) | lsbs;
    900 	}
    901 	else {
    902 		unsigned d = (1 << (k+1)) - parameter;
    903 		if(lsbs >= d) {
    904 			if(!FLAC__bitreader_read_bit(br, &bit))
    905 				return false;
    906 			lsbs <<= 1;
    907 			lsbs |= bit;
    908 			lsbs -= d;
    909 		}
    910 		/* compose the value */
    911 		uval = msbs * parameter + lsbs;
    912 	}
    913 
    914 	/* unfold unsigned to signed */
    915 	if(uval & 1)
    916 		*val = -((int)(uval >> 1)) - 1;
    917 	else
    918 		*val = (int)(uval >> 1);
    919 
    920 	return true;
    921 }
    922 
    923 FLAC__bool FLAC__bitreader_read_golomb_unsigned(FLAC__BitReader *br, unsigned *val, unsigned parameter)
    924 {
    925 	FLAC__uint32 lsbs, msbs = 0;
    926 	unsigned bit, k;
    927 
    928 	FLAC__ASSERT(0 != br);
    929 	FLAC__ASSERT(0 != br->buffer);
    930 
    931 	k = FLAC__bitmath_ilog2(parameter);
    932 
    933 	/* read the unary MSBs and end bit */
    934 	if(!FLAC__bitreader_read_unary_unsigned(br, &msbs))
    935 		return false;
    936 
    937 	/* read the binary LSBs */
    938 	if(!FLAC__bitreader_read_raw_uint32(br, &lsbs, k))
    939 		return false;
    940 
    941 	if(parameter == 1u<<k) {
    942 		/* compose the value */
    943 		*val = (msbs << k) | lsbs;
    944 	}
    945 	else {
    946 		unsigned d = (1 << (k+1)) - parameter;
    947 		if(lsbs >= d) {
    948 			if(!FLAC__bitreader_read_bit(br, &bit))
    949 				return false;
    950 			lsbs <<= 1;
    951 			lsbs |= bit;
    952 			lsbs -= d;
    953 		}
    954 		/* compose the value */
    955 		*val = msbs * parameter + lsbs;
    956 	}
    957 
    958 	return true;
    959 }
    960 #endif /* UNUSED */
    961 
    962 /* on return, if *val == 0xffffffff then the utf-8 sequence was invalid, but the return value will be true */
    963 FLAC__bool FLAC__bitreader_read_utf8_uint32(FLAC__BitReader *br, FLAC__uint32 *val, FLAC__byte *raw, unsigned *rawlen)
    964 {
    965 	FLAC__uint32 v = 0;
    966 	FLAC__uint32 x;
    967 	unsigned i;
    968 
    969 	if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
    970 		return false;
    971 	if(raw)
    972 		raw[(*rawlen)++] = (FLAC__byte)x;
    973 	if(!(x & 0x80)) { /* 0xxxxxxx */
    974 		v = x;
    975 		i = 0;
    976 	}
    977 	else if(x & 0xC0 && !(x & 0x20)) { /* 110xxxxx */
    978 		v = x & 0x1F;
    979 		i = 1;
    980 	}
    981 	else if(x & 0xE0 && !(x & 0x10)) { /* 1110xxxx */
    982 		v = x & 0x0F;
    983 		i = 2;
    984 	}
    985 	else if(x & 0xF0 && !(x & 0x08)) { /* 11110xxx */
    986 		v = x & 0x07;
    987 		i = 3;
    988 	}
    989 	else if(x & 0xF8 && !(x & 0x04)) { /* 111110xx */
    990 		v = x & 0x03;
    991 		i = 4;
    992 	}
    993 	else if(x & 0xFC && !(x & 0x02)) { /* 1111110x */
    994 		v = x & 0x01;
    995 		i = 5;
    996 	}
    997 	else {
    998 		*val = 0xffffffff;
    999 		return true;
   1000 	}
   1001 	for( ; i; i--) {
   1002 		if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
   1003 			return false;
   1004 		if(raw)
   1005 			raw[(*rawlen)++] = (FLAC__byte)x;
   1006 		if(!(x & 0x80) || (x & 0x40)) { /* 10xxxxxx */
   1007 			*val = 0xffffffff;
   1008 			return true;
   1009 		}
   1010 		v <<= 6;
   1011 		v |= (x & 0x3F);
   1012 	}
   1013 	*val = v;
   1014 	return true;
   1015 }
   1016 
   1017 /* on return, if *val == 0xffffffffffffffff then the utf-8 sequence was invalid, but the return value will be true */
   1018 FLAC__bool FLAC__bitreader_read_utf8_uint64(FLAC__BitReader *br, FLAC__uint64 *val, FLAC__byte *raw, unsigned *rawlen)
   1019 {
   1020 	FLAC__uint64 v = 0;
   1021 	FLAC__uint32 x;
   1022 	unsigned i;
   1023 
   1024 	if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
   1025 		return false;
   1026 	if(raw)
   1027 		raw[(*rawlen)++] = (FLAC__byte)x;
   1028 	if(!(x & 0x80)) { /* 0xxxxxxx */
   1029 		v = x;
   1030 		i = 0;
   1031 	}
   1032 	else if(x & 0xC0 && !(x & 0x20)) { /* 110xxxxx */
   1033 		v = x & 0x1F;
   1034 		i = 1;
   1035 	}
   1036 	else if(x & 0xE0 && !(x & 0x10)) { /* 1110xxxx */
   1037 		v = x & 0x0F;
   1038 		i = 2;
   1039 	}
   1040 	else if(x & 0xF0 && !(x & 0x08)) { /* 11110xxx */
   1041 		v = x & 0x07;
   1042 		i = 3;
   1043 	}
   1044 	else if(x & 0xF8 && !(x & 0x04)) { /* 111110xx */
   1045 		v = x & 0x03;
   1046 		i = 4;
   1047 	}
   1048 	else if(x & 0xFC && !(x & 0x02)) { /* 1111110x */
   1049 		v = x & 0x01;
   1050 		i = 5;
   1051 	}
   1052 	else if(x & 0xFE && !(x & 0x01)) { /* 11111110 */
   1053 		v = 0;
   1054 		i = 6;
   1055 	}
   1056 	else {
   1057 		*val = FLAC__U64L(0xffffffffffffffff);
   1058 		return true;
   1059 	}
   1060 	for( ; i; i--) {
   1061 		if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
   1062 			return false;
   1063 		if(raw)
   1064 			raw[(*rawlen)++] = (FLAC__byte)x;
   1065 		if(!(x & 0x80) || (x & 0x40)) { /* 10xxxxxx */
   1066 			*val = FLAC__U64L(0xffffffffffffffff);
   1067 			return true;
   1068 		}
   1069 		v <<= 6;
   1070 		v |= (x & 0x3F);
   1071 	}
   1072 	*val = v;
   1073 	return true;
   1074 }
   1075 
   1076 /* These functions are declared inline in this file but are also callable as
   1077  * externs from elsewhere.
   1078  * According to the C99 spec, section 6.7.4, simply providing a function
   1079  * prototype in a header file without 'inline' and making the function inline
   1080  * in this file should be sufficient.
   1081  * Unfortunately, the Microsoft VS compiler doesn't pick them up externally. To
   1082  * fix that we add extern declarations here.
   1083  */
   1084 extern FLAC__bool FLAC__bitreader_is_consumed_byte_aligned(const FLAC__BitReader *br);
   1085 extern unsigned FLAC__bitreader_bits_left_for_byte_alignment(const FLAC__BitReader *br);
   1086 extern unsigned FLAC__bitreader_get_input_bits_unconsumed(const FLAC__BitReader *br);
   1087 extern FLAC__bool FLAC__bitreader_read_uint32_little_endian(FLAC__BitReader *br, FLAC__uint32 *val);
   1088