1 /* libFLAC - Free Lossless Audio Codec library 2 * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * - Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 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. 14 * 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. 18 * 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. 30 */ 31 32 #if HAVE_CONFIG_H 33 # include <config.h> 34 #endif 35 36 #include <stdlib.h> /* for malloc() */ 37 #include <string.h> /* for memcpy(), memset() */ 38 #ifdef _MSC_VER 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() */ 44 #else 45 #include <netinet/in.h> /* for ntohl() */ 46 #endif 47 #include "private/bitmath.h" 48 #include "private/bitreader.h" 49 #include "private/crc.h" 50 #include "FLAC/assert.h" 51 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 */ 61 #if WORDS_BIGENDIAN 62 #define SWAP_BE_WORD_TO_HOST(x) (x) 63 #else 64 #ifdef _MSC_VER 65 #define SWAP_BE_WORD_TO_HOST(x) local_swap32_(x) 66 #else 67 #define SWAP_BE_WORD_TO_HOST(x) ntohl(x) 68 #endif 69 #endif 70 /* counts the # of zero MSBs in a word */ 71 #define COUNT_ZERO_MSBS(word) ( \ 72 (word) <= 0xffff ? \ 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] ) \ 75 ) 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])) ) 78 79 80 /* 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. 87 * 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. 93 */ 94 static const unsigned FLAC__BITREADER_DEFAULT_CAPACITY = 65536u / FLAC__BITS_PER_WORD; /* in words */ 95 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 113 }; 114 115 #ifdef min 116 #undef min 117 #endif 118 #define min(x,y) ((x)<(y)?(x):(y)) 119 #ifdef max 120 #undef max 121 #endif 122 #define max(x,y) ((x)>(y)?(x):(y)) 123 124 /* adjust for compilers that can't understand using LLU suffix for uint64_t literals */ 125 #ifdef _MSC_VER 126 #define FLAC__U64L(x) x 127 #else 128 #define FLAC__U64L(x) x##LLU 129 #endif 130 131 #ifndef FLaC__INLINE 132 #define FLaC__INLINE 133 #endif 134 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 */ 139 brword *buffer; 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; 148 void *client_data; 149 FLAC__CPUInfo cpu_info; 150 }; 151 152 #ifdef _MSC_VER 153 /* OPT: an MSVC built-in would be better */ 154 static _inline FLAC__uint32 local_swap32_(FLAC__uint32 x) 155 { 156 x = ((x<<8)&0xFF00FF00) | ((x>>8)&0x00FF00FF); 157 return (x>>16) | (x<<16); 158 } 159 static void local_swap32_block_(FLAC__uint32 *start, FLAC__uint32 len) 160 { 161 __asm { 162 mov edx, start 163 mov ecx, len 164 test ecx, ecx 165 loop1: 166 jz done1 167 mov eax, [edx] 168 bswap eax 169 mov [edx], eax 170 add edx, 4 171 dec ecx 172 jmp short loop1 173 done1: 174 } 175 } 176 #endif 177 178 static FLaC__INLINE void crc16_update_word_(FLAC__BitReader *br, brword word) 179 { 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); 187 } 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); 198 } 199 #else 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; 203 #endif 204 br->crc16_align = 0; 205 } 206 207 /* would be static except it needs to be called by asm routines */ 208 FLAC__bool bitreader_read_from_client_(FLAC__BitReader *br) 209 { 210 unsigned start, end; 211 size_t bytes; 212 FLAC__byte *target; 213 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)); 219 220 br->words -= start; 221 br->consumed_words = 0; 222 } 223 224 /* 225 * set the target for reading, taking into account word alignment and endianness 226 */ 227 bytes = (br->capacity - br->words) * FLAC__BYTES_PER_WORD - br->bytes; 228 if(bytes == 0) 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; 231 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 238 * overwritten: 239 */ 240 #if WORDS_BIGENDIAN 241 #else 242 if(br->bytes) 243 br->buffer[br->words] = SWAP_BE_WORD_TO_HOST(br->buffer[br->words]); 244 #endif 245 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 251 */ 252 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)) 255 return false; 256 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: 262 */ 263 #if WORDS_BIGENDIAN 264 #else 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) { 268 start = br->words; 269 local_swap32_block_(br->buffer + start, end - start); 270 } 271 else 272 # endif 273 for(start = br->words; start < end; start++) 274 br->buffer[start] = SWAP_BE_WORD_TO_HOST(br->buffer[start]); 275 #endif 276 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: 282 */ 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; 286 287 return true; 288 } 289 290 /*********************************************************************** 291 * 292 * Class constructor/destructor 293 * 294 ***********************************************************************/ 295 296 FLAC__BitReader *FLAC__bitreader_new(void) 297 { 298 FLAC__BitReader *br = (FLAC__BitReader*)calloc(1, sizeof(FLAC__BitReader)); 299 300 /* calloc() implies: 301 memset(br, 0, sizeof(FLAC__BitReader)); 302 br->buffer = 0; 303 br->capacity = 0; 304 br->words = br->bytes = 0; 305 br->consumed_words = br->consumed_bits = 0; 306 br->read_callback = 0; 307 br->client_data = 0; 308 */ 309 return br; 310 } 311 312 void FLAC__bitreader_delete(FLAC__BitReader *br) 313 { 314 FLAC__ASSERT(0 != br); 315 316 FLAC__bitreader_free(br); 317 free(br); 318 } 319 320 /*********************************************************************** 321 * 322 * Public class methods 323 * 324 ***********************************************************************/ 325 326 FLAC__bool FLAC__bitreader_init(FLAC__BitReader *br, FLAC__CPUInfo cpu, FLAC__BitReaderReadCallback rcb, void *cd) 327 { 328 FLAC__ASSERT(0 != br); 329 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); 334 if(br->buffer == 0) 335 return false; 336 br->read_callback = rcb; 337 br->client_data = cd; 338 br->cpu_info = cpu; 339 340 return true; 341 } 342 343 void FLAC__bitreader_free(FLAC__BitReader *br) 344 { 345 FLAC__ASSERT(0 != br); 346 347 if(0 != br->buffer) 348 free(br->buffer); 349 br->buffer = 0; 350 br->capacity = 0; 351 br->words = br->bytes = 0; 352 br->consumed_words = br->consumed_bits = 0; 353 br->read_callback = 0; 354 br->client_data = 0; 355 } 356 357 FLAC__bool FLAC__bitreader_clear(FLAC__BitReader *br) 358 { 359 br->words = br->bytes = 0; 360 br->consumed_words = br->consumed_bits = 0; 361 return true; 362 } 363 364 void FLAC__bitreader_dump(const FLAC__BitReader *br, FILE *out) 365 { 366 unsigned i, j; 367 if(br == 0) { 368 fprintf(out, "bitreader is NULL\n"); 369 } 370 else { 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); 372 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)) 377 fprintf(out, "."); 378 else 379 fprintf(out, "%01u", br->buffer[i] & (1 << (FLAC__BITS_PER_WORD-j-1)) ? 1:0); 380 fprintf(out, "\n"); 381 } 382 if(br->bytes > 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)) 386 fprintf(out, "."); 387 else 388 fprintf(out, "%01u", br->buffer[i] & (1 << (br->bytes*8-j-1)) ? 1:0); 389 fprintf(out, "\n"); 390 } 391 } 392 } 393 394 void FLAC__bitreader_reset_read_crc16(FLAC__BitReader *br, FLAC__uint16 seed) 395 { 396 FLAC__ASSERT(0 != br); 397 FLAC__ASSERT(0 != br->buffer); 398 FLAC__ASSERT((br->consumed_bits & 7) == 0); 399 400 br->read_crc16 = (unsigned)seed; 401 br->crc16_align = br->consumed_bits; 402 } 403 404 FLAC__uint16 FLAC__bitreader_get_read_crc16(FLAC__BitReader *br) 405 { 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); 410 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); 416 } 417 return br->read_crc16; 418 } 419 420 FLaC__INLINE FLAC__bool FLAC__bitreader_is_consumed_byte_aligned(const FLAC__BitReader *br) 421 { 422 return ((br->consumed_bits & 7) == 0); 423 } 424 425 FLaC__INLINE unsigned FLAC__bitreader_bits_left_for_byte_alignment(const FLAC__BitReader *br) 426 { 427 return 8 - (br->consumed_bits & 7); 428 } 429 430 FLaC__INLINE unsigned FLAC__bitreader_get_input_bits_unconsumed(const FLAC__BitReader *br) 431 { 432 return (br->words-br->consumed_words)*FLAC__BITS_PER_WORD + br->bytes*8 - br->consumed_bits; 433 } 434 435 FLaC__INLINE FLAC__bool FLAC__bitreader_read_raw_uint32(FLAC__BitReader *br, FLAC__uint32 *val, unsigned bits) 436 { 437 FLAC__ASSERT(0 != br); 438 FLAC__ASSERT(0 != br->buffer); 439 440 FLAC__ASSERT(bits <= 32); 441 FLAC__ASSERT((br->capacity*FLAC__BITS_PER_WORD) * 2 >= bits); 442 FLAC__ASSERT(br->consumed_words <= br->words); 443 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); 446 447 if(bits == 0) { /* OPT: investigate if this can ever happen, maybe change to assertion */ 448 *val = 0; 449 return true; 450 } 451 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)) 454 return false; 455 } 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]; 462 if(bits < n) { 463 *val = (word & (FLAC__WORD_ALL_ONES >> br->consumed_bits)) >> (n-bits); 464 br->consumed_bits += bits; 465 return true; 466 } 467 *val = word & (FLAC__WORD_ALL_ONES >> br->consumed_bits); 468 bits -= n; 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 */ 473 *val <<= bits; 474 *val |= (br->buffer[br->consumed_words] >> (FLAC__BITS_PER_WORD-bits)); 475 br->consumed_bits = bits; 476 } 477 return true; 478 } 479 else { 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; 484 return true; 485 } 486 /* at this point 'bits' must be == FLAC__BITS_PER_WORD; because of previous assertions, it can't be larger */ 487 *val = word; 488 crc16_update_word_(br, word); 489 br->consumed_words++; 490 return true; 491 } 492 } 493 else { 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. 497 */ 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; 504 return true; 505 } 506 else { 507 *val = br->buffer[br->consumed_words] >> (FLAC__BITS_PER_WORD-bits); 508 br->consumed_bits += bits; 509 return true; 510 } 511 } 512 } 513 514 FLAC__bool FLAC__bitreader_read_raw_int32(FLAC__BitReader *br, FLAC__int32 *val, unsigned bits) 515 { 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)) 518 return false; 519 /* sign-extend: */ 520 *val <<= (32-bits); 521 *val >>= (32-bits); 522 return true; 523 } 524 525 FLAC__bool FLAC__bitreader_read_raw_uint64(FLAC__BitReader *br, FLAC__uint64 *val, unsigned bits) 526 { 527 FLAC__uint32 hi, lo; 528 529 if(bits > 32) { 530 if(!FLAC__bitreader_read_raw_uint32(br, &hi, bits-32)) 531 return false; 532 if(!FLAC__bitreader_read_raw_uint32(br, &lo, 32)) 533 return false; 534 *val = hi; 535 *val <<= 32; 536 *val |= lo; 537 } 538 else { 539 if(!FLAC__bitreader_read_raw_uint32(br, &lo, bits)) 540 return false; 541 *val = lo; 542 } 543 return true; 544 } 545 546 FLaC__INLINE FLAC__bool FLAC__bitreader_read_uint32_little_endian(FLAC__BitReader *br, FLAC__uint32 *val) 547 { 548 FLAC__uint32 x8, x32 = 0; 549 550 /* this doesn't need to be that fast as currently it is only used for vorbis comments */ 551 552 if(!FLAC__bitreader_read_raw_uint32(br, &x32, 8)) 553 return false; 554 555 if(!FLAC__bitreader_read_raw_uint32(br, &x8, 8)) 556 return false; 557 x32 |= (x8 << 8); 558 559 if(!FLAC__bitreader_read_raw_uint32(br, &x8, 8)) 560 return false; 561 x32 |= (x8 << 16); 562 563 if(!FLAC__bitreader_read_raw_uint32(br, &x8, 8)) 564 return false; 565 x32 |= (x8 << 24); 566 567 *val = x32; 568 return true; 569 } 570 571 FLAC__bool FLAC__bitreader_skip_bits_no_crc(FLAC__BitReader *br, unsigned bits) 572 { 573 /* 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. 576 */ 577 FLAC__ASSERT(0 != br); 578 FLAC__ASSERT(0 != br->buffer); 579 580 if(bits > 0) { 581 const unsigned n = br->consumed_bits & 7; 582 unsigned m; 583 FLAC__uint32 x; 584 585 if(n != 0) { 586 m = min(8-n, bits); 587 if(!FLAC__bitreader_read_raw_uint32(br, &x, m)) 588 return false; 589 bits -= m; 590 } 591 m = bits / 8; 592 if(m > 0) { 593 if(!FLAC__bitreader_skip_byte_block_aligned_no_crc(br, m)) 594 return false; 595 bits %= 8; 596 } 597 if(bits > 0) { 598 if(!FLAC__bitreader_read_raw_uint32(br, &x, bits)) 599 return false; 600 } 601 } 602 603 return true; 604 } 605 606 FLAC__bool FLAC__bitreader_skip_byte_block_aligned_no_crc(FLAC__BitReader *br, unsigned nvals) 607 { 608 FLAC__uint32 x; 609 610 FLAC__ASSERT(0 != br); 611 FLAC__ASSERT(0 != br->buffer); 612 FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(br)); 613 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)) 617 return false; 618 nvals--; 619 } 620 if(0 == nvals) 621 return true; 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; 627 } 628 else if(!bitreader_read_from_client_(br)) 629 return false; 630 } 631 /* step 3: skip any remainder from partial tail bytes */ 632 while(nvals) { 633 if(!FLAC__bitreader_read_raw_uint32(br, &x, 8)) 634 return false; 635 nvals--; 636 } 637 638 return true; 639 } 640 641 FLAC__bool FLAC__bitreader_read_byte_block_aligned_no_crc(FLAC__BitReader *br, FLAC__byte *val, unsigned nvals) 642 { 643 FLAC__uint32 x; 644 645 FLAC__ASSERT(0 != br); 646 FLAC__ASSERT(0 != br->buffer); 647 FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(br)); 648 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)) 652 return false; 653 *val++ = (FLAC__byte)x; 654 nvals--; 655 } 656 if(0 == nvals) 657 return true; 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; 676 #else 677 for(x = 0; x < FLAC__BYTES_PER_WORD; x++) 678 val[x] = (FLAC__byte)(word >> (8*(FLAC__BYTES_PER_WORD-x-1))); 679 #endif 680 val += FLAC__BYTES_PER_WORD; 681 nvals -= FLAC__BYTES_PER_WORD; 682 } 683 else if(!bitreader_read_from_client_(br)) 684 return false; 685 } 686 /* step 3: read any remainder from partial tail bytes */ 687 while(nvals) { 688 if(!FLAC__bitreader_read_raw_uint32(br, &x, 8)) 689 return false; 690 *val++ = (FLAC__byte)x; 691 nvals--; 692 } 693 694 return true; 695 } 696 697 FLaC__INLINE FLAC__bool FLAC__bitreader_read_unary_unsigned(FLAC__BitReader *br, unsigned *val) 698 #if 0 /* slow but readable version */ 699 { 700 unsigned bit; 701 702 FLAC__ASSERT(0 != br); 703 FLAC__ASSERT(0 != br->buffer); 704 705 *val = 0; 706 while(1) { 707 if(!FLAC__bitreader_read_bit(br, &bit)) 708 return false; 709 if(bit) 710 break; 711 else 712 *val++; 713 } 714 return true; 715 } 716 #else 717 { 718 unsigned i; 719 720 FLAC__ASSERT(0 != br); 721 FLAC__ASSERT(0 != br->buffer); 722 723 *val = 0; 724 while(1) { 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; 727 if(b) { 728 i = COUNT_ZERO_MSBS(b); 729 *val += i; 730 i++; 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; 736 } 737 return true; 738 } 739 else { 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... */ 745 } 746 } 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 752 * be zero. 753 */ 754 if(br->bytes) { 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; 757 if(b) { 758 i = COUNT_ZERO_MSBS(b); 759 *val += i; 760 i++; 761 br->consumed_bits += i; 762 FLAC__ASSERT(br->consumed_bits < FLAC__BITS_PER_WORD); 763 return true; 764 } 765 else { 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... */ 770 } 771 } 772 if(!bitreader_read_from_client_(br)) 773 return false; 774 } 775 } 776 #endif 777 778 FLAC__bool FLAC__bitreader_read_rice_signed(FLAC__BitReader *br, int *val, unsigned parameter) 779 { 780 FLAC__uint32 lsbs = 0, msbs = 0; 781 unsigned uval; 782 783 FLAC__ASSERT(0 != br); 784 FLAC__ASSERT(0 != br->buffer); 785 FLAC__ASSERT(parameter <= 31); 786 787 /* read the unary MSBs and end bit */ 788 if(!FLAC__bitreader_read_unary_unsigned(br, &msbs)) 789 return false; 790 791 /* read the binary LSBs */ 792 if(!FLAC__bitreader_read_raw_uint32(br, &lsbs, parameter)) 793 return false; 794 795 /* compose the value */ 796 uval = (msbs << parameter) | lsbs; 797 if(uval & 1) 798 *val = -((int)(uval >> 1)) - 1; 799 else 800 *val = (int)(uval >> 1); 801 802 return true; 803 } 804 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 */ 809 #ifdef _MSC_VER 810 { 811 unsigned i; 812 unsigned uval = 0; 813 unsigned bits; /* the # of binary LSBs left to read to finish a rice codeword */ 814 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; 820 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 */ 827 828 if(nvals == 0) 829 return true; 830 831 cbits = br->consumed_bits; 832 cwords = br->consumed_words; 833 834 while(1) { 835 836 /* read unary part */ 837 while(1) { 838 while(cwords < br->words) { /* if we've not consumed up to a partial tail word... */ 839 brword b = br->buffer[cwords] << cbits; 840 if(b) { 841 #if 0 /* slower, probably due to bad register allocation... */ && defined FLAC__CPU_IA32 && !defined FLAC__NO_ASM && FLAC__BITS_PER_WORD == 32 842 __asm { 843 bsr eax, b 844 not eax 845 and eax, 31 846 mov i, eax 847 } 848 #else 849 i = COUNT_ZERO_MSBS(b); 850 #endif 851 uval += i; 852 bits = parameter; 853 i++; 854 cbits += i; 855 if(cbits == FLAC__BITS_PER_WORD) { 856 crc16_update_word_(br, br->buffer[cwords]); 857 cwords++; 858 cbits = 0; 859 } 860 goto break1; 861 } 862 else { 863 uval += FLAC__BITS_PER_WORD - cbits; 864 crc16_update_word_(br, br->buffer[cwords]); 865 cwords++; 866 cbits = 0; 867 /* didn't find stop bit yet, have to keep going... */ 868 } 869 } 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 875 * be zero. 876 */ 877 if(br->bytes) { 878 const unsigned end = br->bytes * 8; 879 brword b = (br->buffer[cwords] & (FLAC__WORD_ALL_ONES << (FLAC__BITS_PER_WORD-end))) << cbits; 880 if(b) { 881 i = COUNT_ZERO_MSBS(b); 882 uval += i; 883 bits = parameter; 884 i++; 885 cbits += i; 886 FLAC__ASSERT(cbits < FLAC__BITS_PER_WORD); 887 goto break1; 888 } 889 else { 890 uval += end - cbits; 891 cbits += end; 892 FLAC__ASSERT(cbits < FLAC__BITS_PER_WORD); 893 /* didn't find stop bit yet, have to keep going... */ 894 } 895 } 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. 899 */ 900 br->consumed_bits = cbits; 901 br->consumed_words = cwords; 902 if(!bitreader_read_from_client_(br)) 903 return false; 904 cwords = br->consumed_words; 905 } 906 break1: 907 /* read binary part */ 908 FLAC__ASSERT(cwords <= br->words); 909 910 if(bits) { 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. 915 */ 916 br->consumed_bits = cbits; 917 br->consumed_words = cwords; 918 if(!bitreader_read_from_client_(br)) 919 return false; 920 cwords = br->consumed_words; 921 } 922 if(cwords < br->words) { /* if we've not consumed up to a partial tail word... */ 923 if(cbits) { 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]; 927 if(bits < n) { 928 uval <<= bits; 929 uval |= (word & (FLAC__WORD_ALL_ONES >> cbits)) >> (n-bits); 930 cbits += bits; 931 goto break2; 932 } 933 uval <<= n; 934 uval |= word & (FLAC__WORD_ALL_ONES >> cbits); 935 bits -= n; 936 crc16_update_word_(br, word); 937 cwords++; 938 cbits = 0; 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 */ 940 uval <<= bits; 941 uval |= (br->buffer[cwords] >> (FLAC__BITS_PER_WORD-bits)); 942 cbits = bits; 943 } 944 goto break2; 945 } 946 else { 947 FLAC__ASSERT(bits < FLAC__BITS_PER_WORD); 948 uval <<= bits; 949 uval |= br->buffer[cwords] >> (FLAC__BITS_PER_WORD-bits); 950 cbits = bits; 951 goto break2; 952 } 953 } 954 else { 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. 958 */ 959 uval <<= bits; 960 if(cbits) { 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); 964 cbits += bits; 965 goto break2; 966 } 967 else { 968 uval |= br->buffer[cwords] >> (FLAC__BITS_PER_WORD-bits); 969 cbits += bits; 970 goto break2; 971 } 972 } 973 } 974 break2: 975 /* compose the value */ 976 *vals = (int)(uval >> 1 ^ -(int)(uval & 1)); 977 978 /* are we done? */ 979 --nvals; 980 if(nvals == 0) { 981 br->consumed_bits = cbits; 982 br->consumed_words = cwords; 983 return true; 984 } 985 986 uval = 0; 987 ++vals; 988 989 } 990 } 991 #else 992 { 993 unsigned i; 994 unsigned uval = 0; 995 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 */ 1002 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 */ 1009 1010 if(nvals == 0) 1011 return true; 1012 1013 cbits = br->consumed_bits; 1014 cwords = br->consumed_words; 1015 ucbits = (br->words-cwords)*FLAC__BITS_PER_WORD + br->bytes*8 - cbits; 1016 1017 while(1) { 1018 1019 /* read unary part */ 1020 while(1) { 1021 while(cwords < br->words) { /* if we've not consumed up to a partial tail word... */ 1022 brword b = br->buffer[cwords] << cbits; 1023 if(b) { 1024 #if 0 /* is not discernably faster... */ && defined FLAC__CPU_IA32 && !defined FLAC__NO_ASM && FLAC__BITS_PER_WORD == 32 && defined __GNUC__ 1025 asm volatile ( 1026 "bsrl %1, %0;" 1027 "notl %0;" 1028 "andl $31, %0;" 1029 : "=r"(i) 1030 : "r"(b) 1031 ); 1032 #else 1033 i = COUNT_ZERO_MSBS(b); 1034 #endif 1035 uval += i; 1036 cbits += i; 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]); 1040 cwords++; 1041 cbits = 0; 1042 } 1043 goto break1; 1044 } 1045 else { 1046 uval += FLAC__BITS_PER_WORD - cbits; 1047 crc16_update_word_(br, br->buffer[cwords]); 1048 cwords++; 1049 cbits = 0; 1050 /* didn't find stop bit yet, have to keep going... */ 1051 } 1052 } 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 1058 * be zero. 1059 */ 1060 if(br->bytes) { 1061 const unsigned end = br->bytes * 8; 1062 brword b = (br->buffer[cwords] & ~(FLAC__WORD_ALL_ONES >> end)) << cbits; 1063 if(b) { 1064 i = COUNT_ZERO_MSBS(b); 1065 uval += i; 1066 cbits += i; 1067 cbits++; /* skip over stop bit */ 1068 FLAC__ASSERT(cbits < FLAC__BITS_PER_WORD); 1069 goto break1; 1070 } 1071 else { 1072 uval += end - cbits; 1073 cbits += end; 1074 FLAC__ASSERT(cbits < FLAC__BITS_PER_WORD); 1075 /* didn't find stop bit yet, have to keep going... */ 1076 } 1077 } 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. 1081 */ 1082 br->consumed_bits = cbits; 1083 br->consumed_words = cwords; 1084 if(!bitreader_read_from_client_(br)) 1085 return false; 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 1091 */ 1092 } 1093 break1: 1094 ucbits -= uval; 1095 ucbits--; /* account for stop bit */ 1096 1097 /* read binary part */ 1098 FLAC__ASSERT(cwords <= br->words); 1099 1100 if(parameter) { 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. 1105 */ 1106 br->consumed_bits = cbits; 1107 br->consumed_words = cwords; 1108 if(!bitreader_read_from_client_(br)) 1109 return false; 1110 cwords = br->consumed_words; 1111 ucbits = (br->words-cwords)*FLAC__BITS_PER_WORD + br->bytes*8 - cbits; 1112 } 1113 if(cwords < br->words) { /* if we've not consumed up to a partial tail word... */ 1114 if(cbits) { 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]; 1118 if(parameter < n) { 1119 uval <<= parameter; 1120 uval |= (word & (FLAC__WORD_ALL_ONES >> cbits)) >> (n-parameter); 1121 cbits += parameter; 1122 } 1123 else { 1124 uval <<= n; 1125 uval |= word & (FLAC__WORD_ALL_ONES >> cbits); 1126 crc16_update_word_(br, word); 1127 cwords++; 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 */ 1130 uval <<= cbits; 1131 uval |= (br->buffer[cwords] >> (FLAC__BITS_PER_WORD-cbits)); 1132 } 1133 } 1134 } 1135 else { 1136 cbits = parameter; 1137 uval <<= parameter; 1138 uval |= br->buffer[cwords] >> (FLAC__BITS_PER_WORD-cbits); 1139 } 1140 } 1141 else { 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. 1145 */ 1146 uval <<= parameter; 1147 if(cbits) { 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); 1151 cbits += parameter; 1152 } 1153 else { 1154 cbits = parameter; 1155 uval |= br->buffer[cwords] >> (FLAC__BITS_PER_WORD-cbits); 1156 } 1157 } 1158 } 1159 1160 ucbits -= parameter; 1161 1162 /* compose the value */ 1163 *vals = (int)(uval >> 1 ^ -(int)(uval & 1)); 1164 1165 /* are we done? */ 1166 --nvals; 1167 if(nvals == 0) { 1168 br->consumed_bits = cbits; 1169 br->consumed_words = cwords; 1170 return true; 1171 } 1172 1173 uval = 0; 1174 ++vals; 1175 1176 } 1177 } 1178 #endif 1179 1180 #if 0 /* UNUSED */ 1181 FLAC__bool FLAC__bitreader_read_golomb_signed(FLAC__BitReader *br, int *val, unsigned parameter) 1182 { 1183 FLAC__uint32 lsbs = 0, msbs = 0; 1184 unsigned bit, uval, k; 1185 1186 FLAC__ASSERT(0 != br); 1187 FLAC__ASSERT(0 != br->buffer); 1188 1189 k = FLAC__bitmath_ilog2(parameter); 1190 1191 /* read the unary MSBs and end bit */ 1192 if(!FLAC__bitreader_read_unary_unsigned(br, &msbs)) 1193 return false; 1194 1195 /* read the binary LSBs */ 1196 if(!FLAC__bitreader_read_raw_uint32(br, &lsbs, k)) 1197 return false; 1198 1199 if(parameter == 1u<<k) { 1200 /* compose the value */ 1201 uval = (msbs << k) | lsbs; 1202 } 1203 else { 1204 unsigned d = (1 << (k+1)) - parameter; 1205 if(lsbs >= d) { 1206 if(!FLAC__bitreader_read_bit(br, &bit)) 1207 return false; 1208 lsbs <<= 1; 1209 lsbs |= bit; 1210 lsbs -= d; 1211 } 1212 /* compose the value */ 1213 uval = msbs * parameter + lsbs; 1214 } 1215 1216 /* unfold unsigned to signed */ 1217 if(uval & 1) 1218 *val = -((int)(uval >> 1)) - 1; 1219 else 1220 *val = (int)(uval >> 1); 1221 1222 return true; 1223 } 1224 1225 FLAC__bool FLAC__bitreader_read_golomb_unsigned(FLAC__BitReader *br, unsigned *val, unsigned parameter) 1226 { 1227 FLAC__uint32 lsbs, msbs = 0; 1228 unsigned bit, k; 1229 1230 FLAC__ASSERT(0 != br); 1231 FLAC__ASSERT(0 != br->buffer); 1232 1233 k = FLAC__bitmath_ilog2(parameter); 1234 1235 /* read the unary MSBs and end bit */ 1236 if(!FLAC__bitreader_read_unary_unsigned(br, &msbs)) 1237 return false; 1238 1239 /* read the binary LSBs */ 1240 if(!FLAC__bitreader_read_raw_uint32(br, &lsbs, k)) 1241 return false; 1242 1243 if(parameter == 1u<<k) { 1244 /* compose the value */ 1245 *val = (msbs << k) | lsbs; 1246 } 1247 else { 1248 unsigned d = (1 << (k+1)) - parameter; 1249 if(lsbs >= d) { 1250 if(!FLAC__bitreader_read_bit(br, &bit)) 1251 return false; 1252 lsbs <<= 1; 1253 lsbs |= bit; 1254 lsbs -= d; 1255 } 1256 /* compose the value */ 1257 *val = msbs * parameter + lsbs; 1258 } 1259 1260 return true; 1261 } 1262 #endif /* UNUSED */ 1263 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) 1266 { 1267 FLAC__uint32 v = 0; 1268 FLAC__uint32 x; 1269 unsigned i; 1270 1271 if(!FLAC__bitreader_read_raw_uint32(br, &x, 8)) 1272 return false; 1273 if(raw) 1274 raw[(*rawlen)++] = (FLAC__byte)x; 1275 if(!(x & 0x80)) { /* 0xxxxxxx */ 1276 v = x; 1277 i = 0; 1278 } 1279 else if(x & 0xC0 && !(x & 0x20)) { /* 110xxxxx */ 1280 v = x & 0x1F; 1281 i = 1; 1282 } 1283 else if(x & 0xE0 && !(x & 0x10)) { /* 1110xxxx */ 1284 v = x & 0x0F; 1285 i = 2; 1286 } 1287 else if(x & 0xF0 && !(x & 0x08)) { /* 11110xxx */ 1288 v = x & 0x07; 1289 i = 3; 1290 } 1291 else if(x & 0xF8 && !(x & 0x04)) { /* 111110xx */ 1292 v = x & 0x03; 1293 i = 4; 1294 } 1295 else if(x & 0xFC && !(x & 0x02)) { /* 1111110x */ 1296 v = x & 0x01; 1297 i = 5; 1298 } 1299 else { 1300 *val = 0xffffffff; 1301 return true; 1302 } 1303 for( ; i; i--) { 1304 if(!FLAC__bitreader_read_raw_uint32(br, &x, 8)) 1305 return false; 1306 if(raw) 1307 raw[(*rawlen)++] = (FLAC__byte)x; 1308 if(!(x & 0x80) || (x & 0x40)) { /* 10xxxxxx */ 1309 *val = 0xffffffff; 1310 return true; 1311 } 1312 v <<= 6; 1313 v |= (x & 0x3F); 1314 } 1315 *val = v; 1316 return true; 1317 } 1318 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) 1321 { 1322 FLAC__uint64 v = 0; 1323 FLAC__uint32 x; 1324 unsigned i; 1325 1326 if(!FLAC__bitreader_read_raw_uint32(br, &x, 8)) 1327 return false; 1328 if(raw) 1329 raw[(*rawlen)++] = (FLAC__byte)x; 1330 if(!(x & 0x80)) { /* 0xxxxxxx */ 1331 v = x; 1332 i = 0; 1333 } 1334 else if(x & 0xC0 && !(x & 0x20)) { /* 110xxxxx */ 1335 v = x & 0x1F; 1336 i = 1; 1337 } 1338 else if(x & 0xE0 && !(x & 0x10)) { /* 1110xxxx */ 1339 v = x & 0x0F; 1340 i = 2; 1341 } 1342 else if(x & 0xF0 && !(x & 0x08)) { /* 11110xxx */ 1343 v = x & 0x07; 1344 i = 3; 1345 } 1346 else if(x & 0xF8 && !(x & 0x04)) { /* 111110xx */ 1347 v = x & 0x03; 1348 i = 4; 1349 } 1350 else if(x & 0xFC && !(x & 0x02)) { /* 1111110x */ 1351 v = x & 0x01; 1352 i = 5; 1353 } 1354 else if(x & 0xFE && !(x & 0x01)) { /* 11111110 */ 1355 v = 0; 1356 i = 6; 1357 } 1358 else { 1359 *val = FLAC__U64L(0xffffffffffffffff); 1360 return true; 1361 } 1362 for( ; i; i--) { 1363 if(!FLAC__bitreader_read_raw_uint32(br, &x, 8)) 1364 return false; 1365 if(raw) 1366 raw[(*rawlen)++] = (FLAC__byte)x; 1367 if(!(x & 0x80) || (x & 0x40)) { /* 10xxxxxx */ 1368 *val = FLAC__U64L(0xffffffffffffffff); 1369 return true; 1370 } 1371 v <<= 6; 1372 v |= (x & 0x3F); 1373 } 1374 *val = v; 1375 return true; 1376 } 1377