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