StuBS
png.cc File Reference

contains a PNG library More...

#include "utils/png.h"
#include "utils/alloc.h"
#include "utils/string.h"
#include "fs/vfs.h"
Include dependency graph for png.cc:

Macros

#define MAKE_BYTE(b)   ((b) & 0xFF)
 
#define MAKE_DWORD(a, b, c, d)   ((MAKE_BYTE(a) << 24) | (MAKE_BYTE(b) << 16) | (MAKE_BYTE(c) << 8) | MAKE_BYTE(d))
 
#define MAKE_DWORD_PTR(p)   MAKE_DWORD((p)[0], (p)[1], (p)[2], (p)[3])
 
#define CHUNK_IHDR   MAKE_DWORD('I', 'H', 'D', 'R')
 
#define CHUNK_IDAT   MAKE_DWORD('I', 'D', 'A', 'T')
 
#define CHUNK_IEND   MAKE_DWORD('I', 'E', 'N', 'D')
 
#define FIRST_LENGTH_CODE_INDEX   257
 
#define LAST_LENGTH_CODE_INDEX   285
 
#define NUM_DEFLATE_CODE_SYMBOLS   288
 
#define NUM_DISTANCE_SYMBOLS   32
 
#define NUM_CODE_LENGTH_CODES   19
 
#define MAX_SYMBOLS   288
 
#define DEFLATE_CODE_BITLEN   15
 
#define DISTANCE_BITLEN   15
 
#define CODE_LENGTH_BITLEN   7
 
#define MAX_BIT_LENGTH   15
 
#define DEFLATE_CODE_BUFFER_SIZE   (NUM_DEFLATE_CODE_SYMBOLS * 2)
 
#define DISTANCE_BUFFER_SIZE   (NUM_DISTANCE_SYMBOLS * 2)
 
#define CODE_LENGTH_BUFFER_SIZE   (NUM_DISTANCE_SYMBOLS * 2)
 
#define SET_ERROR(code)   do { error = (code); error_line = __LINE__; } while (0)
 
#define chunk_length(chunk)   MAKE_DWORD_PTR(chunk)
 
#define chunk_type(chunk)   MAKE_DWORD_PTR((chunk) + 4)
 
#define chunk_critical(chunk)   (((chunk)[4] & 32) == 0)
 

Functions

static unsigned char read_bit (unsigned long *bitpointer, const unsigned char *bitstream)
 
static unsigned read_bits (unsigned long *bitpointer, const unsigned char *bitstream, unsigned long nbits)
 
static int paeth_predictor (int a, int b, int c)
 

Constants

static const unsigned LENGTH_BASE [29]
 
static const unsigned LENGTH_EXTRA [29]
 
static const unsigned DISTANCE_BASE [30]
 
static const unsigned DISTANCE_EXTRA [30]
 
static const unsigned CLCL [NUM_CODE_LENGTH_CODES]
 
static unsigned FIXED_DEFLATE_CODE_TREE [NUM_DEFLATE_CODE_SYMBOLS *2]
 
static unsigned FIXED_DISTANCE_TREE [NUM_DISTANCE_SYMBOLS *2]
 

Detailed Description

contains a PNG library

The PNG library 'uPNG' was written by Sean Middleditch and Lode Vandevenne and modified for StuBS by Bernhard Heinloth.

See also
https://github.com/elanthis/upng

uPNG – derived from LodePNG version 20100808

Copyright (c) 2005-2010 Lode Vandevenne Copyright (c) 2010 Sean Middleditch

This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.

Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:

1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.

2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.

3. This notice may not be removed or altered from any source
distribution.

Macro Definition Documentation

◆ MAKE_BYTE

#define MAKE_BYTE (   b)    ((b) & 0xFF)

◆ MAKE_DWORD

#define MAKE_DWORD (   a,
  b,
  c,
 
)    ((MAKE_BYTE(a) << 24) | (MAKE_BYTE(b) << 16) | (MAKE_BYTE(c) << 8) | MAKE_BYTE(d))

◆ MAKE_DWORD_PTR

#define MAKE_DWORD_PTR (   p)    MAKE_DWORD((p)[0], (p)[1], (p)[2], (p)[3])

◆ CHUNK_IHDR

#define CHUNK_IHDR   MAKE_DWORD('I', 'H', 'D', 'R')

◆ CHUNK_IDAT

#define CHUNK_IDAT   MAKE_DWORD('I', 'D', 'A', 'T')

◆ CHUNK_IEND

#define CHUNK_IEND   MAKE_DWORD('I', 'E', 'N', 'D')

◆ FIRST_LENGTH_CODE_INDEX

#define FIRST_LENGTH_CODE_INDEX   257

◆ LAST_LENGTH_CODE_INDEX

#define LAST_LENGTH_CODE_INDEX   285

◆ NUM_DEFLATE_CODE_SYMBOLS

#define NUM_DEFLATE_CODE_SYMBOLS   288

◆ NUM_DISTANCE_SYMBOLS

#define NUM_DISTANCE_SYMBOLS   32

◆ NUM_CODE_LENGTH_CODES

#define NUM_CODE_LENGTH_CODES   19

◆ MAX_SYMBOLS

#define MAX_SYMBOLS   288

◆ DEFLATE_CODE_BITLEN

#define DEFLATE_CODE_BITLEN   15

◆ DISTANCE_BITLEN

#define DISTANCE_BITLEN   15

◆ CODE_LENGTH_BITLEN

#define CODE_LENGTH_BITLEN   7

◆ MAX_BIT_LENGTH

#define MAX_BIT_LENGTH   15

◆ DEFLATE_CODE_BUFFER_SIZE

#define DEFLATE_CODE_BUFFER_SIZE   (NUM_DEFLATE_CODE_SYMBOLS * 2)

◆ DISTANCE_BUFFER_SIZE

#define DISTANCE_BUFFER_SIZE   (NUM_DISTANCE_SYMBOLS * 2)

◆ CODE_LENGTH_BUFFER_SIZE

#define CODE_LENGTH_BUFFER_SIZE   (NUM_DISTANCE_SYMBOLS * 2)

◆ SET_ERROR

#define SET_ERROR (   code)    do { error = (code); error_line = __LINE__; } while (0)

◆ chunk_length

#define chunk_length (   chunk)    MAKE_DWORD_PTR(chunk)

◆ chunk_type

#define chunk_type (   chunk)    MAKE_DWORD_PTR((chunk) + 4)

◆ chunk_critical

#define chunk_critical (   chunk)    (((chunk)[4] & 32) == 0)

Function Documentation

◆ read_bit()

static unsigned char read_bit ( unsigned long *  bitpointer,
const unsigned char *  bitstream 
)
static

◆ read_bits()

static unsigned read_bits ( unsigned long *  bitpointer,
const unsigned char *  bitstream,
unsigned long  nbits 
)
static

◆ paeth_predictor()

static int paeth_predictor ( int  a,
int  b,
int  c 
)
static

Variable Documentation

◆ LENGTH_BASE

const unsigned LENGTH_BASE[29]
static
Initial value:
= {
3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59,
67, 83, 99, 115, 131, 163, 195, 227, 258
}

◆ LENGTH_EXTRA

const unsigned LENGTH_EXTRA[29]
static
Initial value:
= {
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5,
5, 5, 5, 0
}

◆ DISTANCE_BASE

const unsigned DISTANCE_BASE[30]
static
Initial value:
= {
1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513,
769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577
}

◆ DISTANCE_EXTRA

const unsigned DISTANCE_EXTRA[30]
static
Initial value:
= {
0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10,
11, 11, 12, 12, 13, 13
}

◆ CLCL

const unsigned CLCL[NUM_CODE_LENGTH_CODES]
static
Initial value:
= {
16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15
}

◆ FIXED_DEFLATE_CODE_TREE

unsigned FIXED_DEFLATE_CODE_TREE[NUM_DEFLATE_CODE_SYMBOLS *2]
static

◆ FIXED_DISTANCE_TREE

unsigned FIXED_DISTANCE_TREE[NUM_DISTANCE_SYMBOLS *2]
static
Initial value:
= {
33, 48, 34, 41, 35, 38, 36, 37, 0, 1, 2, 3, 39, 40, 4, 5, 6, 7, 42, 45, 43,
44, 8, 9, 10, 11, 46, 47, 12, 13, 14, 15, 49, 56, 50, 53, 51, 52, 16, 17,
18, 19, 54, 55, 20, 21, 22, 23, 57, 60, 58, 59, 24, 25, 26, 27, 61, 62, 28,
29, 30, 31, 0, 0
}