From bb6f08f3c79efc7bb7877aca97cebd3dab8b7838 Mon Sep 17 00:00:00 2001 From: Clement Sibille Date: Tue, 5 Mar 2024 16:02:17 +0900 Subject: Implement PNG decompression This patch adds PNG decompression for images without interlacing and without alpha channel. Only basic image data is supported. Background, transparency, gamma, paletted images are not supported. --- lisiblepng/src/bitstream.c | 53 ---------------------------------------------- 1 file changed, 53 deletions(-) delete mode 100644 lisiblepng/src/bitstream.c (limited to 'lisiblepng/src/bitstream.c') diff --git a/lisiblepng/src/bitstream.c b/lisiblepng/src/bitstream.c deleted file mode 100644 index e7ddb79..0000000 --- a/lisiblepng/src/bitstream.c +++ /dev/null @@ -1,53 +0,0 @@ -#include "bitstream.h" -#include "assert.h" - -#define MAX(x, y) (((x) > (y)) ? (x) : (y)) -#define MIN(x, y) (((x) < (y)) ? (x) : (y)) - -void Bitstream_init(Bitstream *bitstream, const uint8_t *data, - size_t data_size) { - ASSERT(bitstream != NULL); - ASSERT(data != NULL); - bitstream->data = data; - bitstream->data_size = data_size; - bitstream->current_byte_index = 0; - bitstream->current_bit_offset = 0; -} - -void bitstream_advance(Bitstream *bitstream, size_t bit_count) { - ASSERT(bitstream != NULL); - uint8_t current_bit = bitstream->current_bit_offset; - bitstream->current_byte_index = - bitstream->current_byte_index + (current_bit + bit_count) / 8; - bitstream->current_bit_offset = (current_bit + bit_count) % 8; -} - -void Bitstream_skip(Bitstream *bitstream, size_t bit_count) { - ASSERT(bitstream != NULL); - bitstream_advance(bitstream, bit_count); -} - -uint16_t Bitstream_next_bits(Bitstream *bitstream, int bit_count) { - ASSERT(bitstream != NULL); - ASSERT(bit_count <= 16); - ASSERT((bitstream->current_bit_offset + (size_t)bit_count) / 8 <= - bitstream->data_size); - - int bit_to_read = bit_count; - uint16_t val = bitstream->data[bitstream->current_byte_index] >> - bitstream->current_bit_offset; - - size_t bit_read = MIN(bit_count, 8 - bitstream->current_bit_offset); - bitstream_advance(bitstream, bit_read); - bit_to_read -= bit_read; - while (bit_to_read > 0) { - val |= (bitstream->data[bitstream->current_byte_index] >> - bitstream->current_bit_offset) - << bit_read; - bit_read = MIN(bit_to_read, 8 - bitstream->current_bit_offset); - bitstream_advance(bitstream, bit_read); - bit_to_read -= bit_read; - } - - return (val & ((1 << bit_count) - 1)); -} -- cgit v1.2.3