/*
img_png.h - png format reference
Copyright (C) 2019 Andrey Akhmichin

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
*/
#ifndef IMG_PNG_H
#define IMG_PNG_H
/*
========================================================================

.PNG image format	(Portable Network Graphics)

========================================================================
*/

enum png_colortype
{
	PNG_CT_GREY,
	PNG_CT_RGB = BIT(1),
	PNG_CT_PALLETE = (PNG_CT_RGB|BIT(0)),
	PNG_CT_ALPHA = BIT(2),
	PNG_CT_RGBA = (PNG_CT_RGB|PNG_CT_ALPHA)
};

enum png_filter
{
	PNG_F_NONE,
	PNG_F_SUB,
	PNG_F_UP,
	PNG_F_AVERAGE,
	PNG_F_PAETH
};

#pragma pack( push, 1 )
typedef struct png_ihdr_s
{
	uint32_t    width;
	uint32_t    height;
	uint8_t     bitdepth;
	uint8_t     colortype;
	uint8_t     compression;
	uint8_t     filter;
	uint8_t     interlace;
} png_ihdr_t;

typedef struct png_s
{
	uint8_t     sign[8];
	uint32_t    ihdr_len;
	uint8_t     ihdr_sign[4];
	png_ihdr_t  ihdr_chunk;
	uint32_t    ihdr_crc32;
} png_t;

typedef struct png_footer_s
{
	uint32_t    idat_crc32;
	uint32_t    iend_len;
	uint8_t     iend_sign[4];
	uint32_t    iend_crc32;
} png_footer_t;
#pragma pack( pop )
#endif // IMG_PNG_H