Lines Matching refs:reader
500 static unsigned LodePNGBitReader_init(LodePNGBitReader * reader, const unsigned char * data, size_t… in LodePNGBitReader_init() argument
503 reader->data = data; in LodePNGBitReader_init()
504 reader->size = size; in LodePNGBitReader_init()
506 if(lodepng_mulofl(size, 8u, &reader->bitsize)) return 105; in LodePNGBitReader_init()
509 if(lodepng_addofl(reader->bitsize, 64u, &temp)) return 105; in LodePNGBitReader_init()
510 reader->bp = 0; in LodePNGBitReader_init()
511 reader->buffer = 0; in LodePNGBitReader_init()
524 static LODEPNG_INLINE void ensureBits9(LodePNGBitReader * reader, size_t nbits) in ensureBits9() argument
526 size_t start = reader->bp >> 3u; in ensureBits9()
527 size_t size = reader->size; in ensureBits9()
529 … reader->buffer = (unsigned)reader->data[start + 0] | ((unsigned)reader->data[start + 1] << 8u); in ensureBits9()
530 reader->buffer >>= (reader->bp & 7u); in ensureBits9()
533 reader->buffer = 0; in ensureBits9()
534 if(start + 0u < size) reader->buffer = reader->data[start + 0]; in ensureBits9()
535 reader->buffer >>= (reader->bp & 7u); in ensureBits9()
541 static LODEPNG_INLINE void ensureBits17(LodePNGBitReader * reader, size_t nbits) in ensureBits17() argument
543 size_t start = reader->bp >> 3u; in ensureBits17()
544 size_t size = reader->size; in ensureBits17()
546 … reader->buffer = (unsigned)reader->data[start + 0] | ((unsigned)reader->data[start + 1] << 8u) | in ensureBits17()
547 ((unsigned)reader->data[start + 2] << 16u); in ensureBits17()
548 reader->buffer >>= (reader->bp & 7u); in ensureBits17()
551 reader->buffer = 0; in ensureBits17()
552 if(start + 0u < size) reader->buffer |= reader->data[start + 0]; in ensureBits17()
553 if(start + 1u < size) reader->buffer |= ((unsigned)reader->data[start + 1] << 8u); in ensureBits17()
554 reader->buffer >>= (reader->bp & 7u); in ensureBits17()
560 static LODEPNG_INLINE void ensureBits25(LodePNGBitReader * reader, size_t nbits) in ensureBits25() argument
562 size_t start = reader->bp >> 3u; in ensureBits25()
563 size_t size = reader->size; in ensureBits25()
565 … reader->buffer = (unsigned)reader->data[start + 0] | ((unsigned)reader->data[start + 1] << 8u) | in ensureBits25()
566 … ((unsigned)reader->data[start + 2] << 16u) | ((unsigned)reader->data[start + 3] << 24u); in ensureBits25()
567 reader->buffer >>= (reader->bp & 7u); in ensureBits25()
570 reader->buffer = 0; in ensureBits25()
571 if(start + 0u < size) reader->buffer |= reader->data[start + 0]; in ensureBits25()
572 if(start + 1u < size) reader->buffer |= ((unsigned)reader->data[start + 1] << 8u); in ensureBits25()
573 if(start + 2u < size) reader->buffer |= ((unsigned)reader->data[start + 2] << 16u); in ensureBits25()
574 reader->buffer >>= (reader->bp & 7u); in ensureBits25()
580 static LODEPNG_INLINE void ensureBits32(LodePNGBitReader * reader, size_t nbits) in ensureBits32() argument
582 size_t start = reader->bp >> 3u; in ensureBits32()
583 size_t size = reader->size; in ensureBits32()
585 … reader->buffer = (unsigned)reader->data[start + 0] | ((unsigned)reader->data[start + 1] << 8u) | in ensureBits32()
586 … ((unsigned)reader->data[start + 2] << 16u) | ((unsigned)reader->data[start + 3] << 24u); in ensureBits32()
587 reader->buffer >>= (reader->bp & 7u); in ensureBits32()
588 reader->buffer |= (((unsigned)reader->data[start + 4] << 24u) << (8u - (reader->bp & 7u))); in ensureBits32()
591 reader->buffer = 0; in ensureBits32()
592 if(start + 0u < size) reader->buffer |= reader->data[start + 0]; in ensureBits32()
593 if(start + 1u < size) reader->buffer |= ((unsigned)reader->data[start + 1] << 8u); in ensureBits32()
594 if(start + 2u < size) reader->buffer |= ((unsigned)reader->data[start + 2] << 16u); in ensureBits32()
595 if(start + 3u < size) reader->buffer |= ((unsigned)reader->data[start + 3] << 24u); in ensureBits32()
596 reader->buffer >>= (reader->bp & 7u); in ensureBits32()
602 static LODEPNG_INLINE unsigned peekBits(LodePNGBitReader * reader, size_t nbits) in peekBits() argument
605 return reader->buffer & ((1u << nbits) - 1u); in peekBits()
609 static LODEPNG_INLINE void advanceBits(LodePNGBitReader * reader, size_t nbits) in advanceBits() argument
611 reader->buffer >>= nbits; in advanceBits()
612 reader->bp += nbits; in advanceBits()
616 static LODEPNG_INLINE unsigned readBits(LodePNGBitReader * reader, size_t nbits) in readBits() argument
618 unsigned result = peekBits(reader, nbits); in readBits()
619 advanceBits(reader, nbits); in readBits()
1138 static unsigned huffmanDecodeSymbol(LodePNGBitReader * reader, const HuffmanTree * codetree) in huffmanDecodeSymbol() argument
1140 unsigned short code = peekBits(reader, FIRSTBITS); in huffmanDecodeSymbol()
1144 advanceBits(reader, l); in huffmanDecodeSymbol()
1148 advanceBits(reader, FIRSTBITS); in huffmanDecodeSymbol()
1149 value += peekBits(reader, l - FIRSTBITS); in huffmanDecodeSymbol()
1150 advanceBits(reader, codetree->table_len[value] - FIRSTBITS); in huffmanDecodeSymbol()
1173 LodePNGBitReader * reader) in getTreeInflateDynamic() argument
1186 …if(reader->bitsize - reader->bp < 14) return 49; /*error: the bit pointer is or will go past the m… in getTreeInflateDynamic()
1187 ensureBits17(reader, 14); in getTreeInflateDynamic()
1190 HLIT = readBits(reader, 5) + 257; in getTreeInflateDynamic()
1192 HDIST = readBits(reader, 5) + 1; in getTreeInflateDynamic()
1194 HCLEN = readBits(reader, 4) + 4; in getTreeInflateDynamic()
1203 if(lodepng_gtofl(reader->bp, HCLEN * 3, reader->bitsize)) { in getTreeInflateDynamic()
1207 ensureBits9(reader, 3); /*out of bounds already checked above */ in getTreeInflateDynamic()
1208 bitlen_cl[CLCL_ORDER[i]] = readBits(reader, 3); in getTreeInflateDynamic()
1228 ensureBits25(reader, 22); /* up to 15 bits for huffman code, up to 7 extra bits below*/ in getTreeInflateDynamic()
1229 code = huffmanDecodeSymbol(reader, &tree_cl); in getTreeInflateDynamic()
1241 replength += readBits(reader, 2); in getTreeInflateDynamic()
1255 replength += readBits(reader, 3); in getTreeInflateDynamic()
1268 replength += readBits(reader, 7); in getTreeInflateDynamic()
1283 if(reader->bp > reader->bitsize) { in getTreeInflateDynamic()
1311 static unsigned inflateHuffmanBlock(ucvector * out, LodePNGBitReader * reader, in inflateHuffmanBlock() argument
1327 else /*if(btype == 2)*/ error = getTreeInflateDynamic(&tree_ll, &tree_d, reader); in inflateHuffmanBlock()
1335 ensureBits32(reader, 30); in inflateHuffmanBlock()
1336 code_ll = huffmanDecodeSymbol(reader, &tree_ll); in inflateHuffmanBlock()
1340 code_ll = huffmanDecodeSymbol(reader, &tree_ll); in inflateHuffmanBlock()
1357 ensureBits25(reader, 5); in inflateHuffmanBlock()
1358 length += readBits(reader, numextrabits_l); in inflateHuffmanBlock()
1362 … ensureBits32(reader, 28); /* up to 15 for the huffman symbol, up to 13 for the extra bits */ in inflateHuffmanBlock()
1363 code_d = huffmanDecodeSymbol(reader, &tree_d); in inflateHuffmanBlock()
1378 distance += readBits(reader, numextrabits_d); in inflateHuffmanBlock()
1409 if(reader->bp > reader->bitsize) { in inflateHuffmanBlock()
1426 static unsigned inflateNoCompression(ucvector * out, LodePNGBitReader * reader, in inflateNoCompression() argument
1430 size_t size = reader->size; in inflateNoCompression()
1434 bytepos = (reader->bp + 7u) >> 3u; in inflateNoCompression()
1438 LEN = (unsigned)reader->data[bytepos] + ((unsigned)reader->data[bytepos + 1] << 8u); in inflateNoCompression()
1440 NLEN = (unsigned)reader->data[bytepos] + ((unsigned)reader->data[bytepos + 1] << 8u); in inflateNoCompression()
1455 lodepng_memcpy(out->data + out->size - LEN, reader->data + bytepos, LEN); in inflateNoCompression()
1459 reader->bp = bytepos << 3u; in inflateNoCompression()
1469 LodePNGBitReader reader; in lodepng_inflatev() local
1470 unsigned error = LodePNGBitReader_init(&reader, in, insize); in lodepng_inflatev()
1476 if(reader.bitsize - reader.bp < 3) return 52; /*error, bit pointer will jump past memory*/ in lodepng_inflatev()
1477 ensureBits9(&reader, 3); in lodepng_inflatev()
1478 BFINAL = readBits(&reader, 1); in lodepng_inflatev()
1479 BTYPE = readBits(&reader, 2); in lodepng_inflatev()
1482 else if(BTYPE == 0) error = inflateNoCompression(out, &reader, settings); /*no compression*/ in lodepng_inflatev()
1483 …else error = inflateHuffmanBlock(out, &reader, BTYPE, settings->max_output_size); /*compression, B… in lodepng_inflatev()