mirror of
https://github.com/cjcliffe/CubicSDR.git
synced 2024-11-25 05:08:37 -05:00
Updated LodePNG to 20160501 version
This commit is contained in:
parent
ca0102b3aa
commit
ceeb8e25f7
739
external/lodepng/lodepng.cpp
vendored
739
external/lodepng/lodepng.cpp
vendored
File diff suppressed because it is too large
Load Diff
135
external/lodepng/lodepng.h
vendored
135
external/lodepng/lodepng.h
vendored
@ -1,7 +1,7 @@
|
||||
/*
|
||||
LodePNG version 20141130
|
||||
LodePNG version 20160501
|
||||
|
||||
Copyright (c) 2005-2014 Lode Vandevenne
|
||||
Copyright (c) 2005-2016 Lode Vandevenne
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
@ -28,12 +28,7 @@ freely, subject to the following restrictions:
|
||||
|
||||
#include <string.h> /*for size_t*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#endif /*__cplusplus*/
|
||||
|
||||
#define LODEPNG_VERSION_STRING "20141130"
|
||||
extern const char* LODEPNG_VERSION_STRING;
|
||||
|
||||
/*
|
||||
The following #defines are used to create code sections. They can be disabled
|
||||
@ -41,6 +36,8 @@ to disable code sections, which can give faster compile time and smaller binary.
|
||||
The "NO_COMPILE" defines are designed to be used to pass as defines to the
|
||||
compiler command to disable them without modifying this header, e.g.
|
||||
-DLODEPNG_NO_COMPILE_ZLIB for gcc.
|
||||
In addition to those below, you can also define LODEPNG_NO_COMPILE_CRC to
|
||||
allow implementing a custom lodepng_crc32.
|
||||
*/
|
||||
/*deflate & zlib. If disabled, you must specify alternative zlib functions in
|
||||
the custom_zlib field of the compress and decompress settings*/
|
||||
@ -84,6 +81,11 @@ source files with custom allocators.*/
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef LODEPNG_COMPILE_CPP
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#endif /*LODEPNG_COMPILE_CPP*/
|
||||
|
||||
#ifdef LODEPNG_COMPILE_PNG
|
||||
/*The PNG color types (also used for raw).*/
|
||||
typedef enum LodePNGColorType
|
||||
@ -213,8 +215,8 @@ Same as the other decode functions, but instead takes a filename as input.
|
||||
unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
|
||||
const std::string& filename,
|
||||
LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
|
||||
#endif //LODEPNG_COMPILE_DISK
|
||||
#endif //LODEPNG_COMPILE_DECODER
|
||||
#endif /* LODEPNG_COMPILE_DISK */
|
||||
#endif /* LODEPNG_COMPILE_DECODER */
|
||||
|
||||
#ifdef LODEPNG_COMPILE_ENCODER
|
||||
/*Same as lodepng_encode_memory, but encodes to an std::vector. colortype
|
||||
@ -237,9 +239,9 @@ unsigned encode(const std::string& filename,
|
||||
unsigned encode(const std::string& filename,
|
||||
const std::vector<unsigned char>& in, unsigned w, unsigned h,
|
||||
LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
|
||||
#endif //LODEPNG_COMPILE_DISK
|
||||
#endif //LODEPNG_COMPILE_ENCODER
|
||||
} //namespace lodepng
|
||||
#endif /* LODEPNG_COMPILE_DISK */
|
||||
#endif /* LODEPNG_COMPILE_ENCODER */
|
||||
} /* namespace lodepng */
|
||||
#endif /*LODEPNG_COMPILE_CPP*/
|
||||
#endif /*LODEPNG_COMPILE_PNG*/
|
||||
|
||||
@ -506,7 +508,7 @@ For 16-bit per channel colors, uses big endian format like PNG does.
|
||||
Return value is LodePNG error code
|
||||
*/
|
||||
unsigned lodepng_convert(unsigned char* out, const unsigned char* in,
|
||||
LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in,
|
||||
const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in,
|
||||
unsigned w, unsigned h);
|
||||
|
||||
#ifdef LODEPNG_COMPILE_DECODER
|
||||
@ -538,7 +540,7 @@ typedef enum LodePNGFilterStrategy
|
||||
{
|
||||
/*every filter at zero*/
|
||||
LFS_ZERO,
|
||||
/*Use filter that gives minumum sum, as described in the official PNG filter heuristic.*/
|
||||
/*Use filter that gives minimum sum, as described in the official PNG filter heuristic.*/
|
||||
LFS_MINSUM,
|
||||
/*Use the filter type that gives smallest Shannon entropy for this scanline. Depending
|
||||
on the image, this is better or worse than minsum.*/
|
||||
@ -629,7 +631,7 @@ typedef struct LodePNGState
|
||||
LodePNGInfo info_png; /*info of the PNG image obtained after decoding*/
|
||||
unsigned error;
|
||||
#ifdef LODEPNG_COMPILE_CPP
|
||||
//For the lodepng::State subclass.
|
||||
/* For the lodepng::State subclass. */
|
||||
virtual ~LodePNGState(){}
|
||||
#endif
|
||||
} LodePNGState;
|
||||
@ -811,7 +813,7 @@ unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const
|
||||
#endif /*LODEPNG_COMPILE_DISK*/
|
||||
|
||||
#ifdef LODEPNG_COMPILE_CPP
|
||||
//The LodePNG C++ wrapper uses std::vectors instead of manually allocated memory buffers.
|
||||
/* The LodePNG C++ wrapper uses std::vectors instead of manually allocated memory buffers. */
|
||||
namespace lodepng
|
||||
{
|
||||
#ifdef LODEPNG_COMPILE_PNG
|
||||
@ -825,7 +827,7 @@ class State : public LodePNGState
|
||||
};
|
||||
|
||||
#ifdef LODEPNG_COMPILE_DECODER
|
||||
//Same as other lodepng::decode, but using a State for more settings and information.
|
||||
/* Same as other lodepng::decode, but using a State for more settings and information. */
|
||||
unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
|
||||
State& state,
|
||||
const unsigned char* in, size_t insize);
|
||||
@ -835,7 +837,7 @@ unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
|
||||
#endif /*LODEPNG_COMPILE_DECODER*/
|
||||
|
||||
#ifdef LODEPNG_COMPILE_ENCODER
|
||||
//Same as other lodepng::encode, but using a State for more settings and information.
|
||||
/* Same as other lodepng::encode, but using a State for more settings and information. */
|
||||
unsigned encode(std::vector<unsigned char>& out,
|
||||
const unsigned char* in, unsigned w, unsigned h,
|
||||
State& state);
|
||||
@ -846,47 +848,47 @@ unsigned encode(std::vector<unsigned char>& out,
|
||||
|
||||
#ifdef LODEPNG_COMPILE_DISK
|
||||
/*
|
||||
Load a file from disk into an std::vector. If the vector is empty, then either
|
||||
the file doesn't exist or is an empty file.
|
||||
Load a file from disk into an std::vector.
|
||||
return value: error code (0 means ok)
|
||||
*/
|
||||
void load_file(std::vector<unsigned char>& buffer, const std::string& filename);
|
||||
unsigned load_file(std::vector<unsigned char>& buffer, const std::string& filename);
|
||||
|
||||
/*
|
||||
Save the binary data in an std::vector to a file on disk. The file is overwritten
|
||||
without warning.
|
||||
*/
|
||||
void save_file(const std::vector<unsigned char>& buffer, const std::string& filename);
|
||||
#endif //LODEPNG_COMPILE_DISK
|
||||
#endif //LODEPNG_COMPILE_PNG
|
||||
unsigned save_file(const std::vector<unsigned char>& buffer, const std::string& filename);
|
||||
#endif /* LODEPNG_COMPILE_DISK */
|
||||
#endif /* LODEPNG_COMPILE_PNG */
|
||||
|
||||
#ifdef LODEPNG_COMPILE_ZLIB
|
||||
#ifdef LODEPNG_COMPILE_DECODER
|
||||
//Zlib-decompress an unsigned char buffer
|
||||
/* Zlib-decompress an unsigned char buffer */
|
||||
unsigned decompress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,
|
||||
const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings);
|
||||
|
||||
//Zlib-decompress an std::vector
|
||||
/* Zlib-decompress an std::vector */
|
||||
unsigned decompress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,
|
||||
const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings);
|
||||
#endif //LODEPNG_COMPILE_DECODER
|
||||
#endif /* LODEPNG_COMPILE_DECODER */
|
||||
|
||||
#ifdef LODEPNG_COMPILE_ENCODER
|
||||
//Zlib-compress an unsigned char buffer
|
||||
/* Zlib-compress an unsigned char buffer */
|
||||
unsigned compress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,
|
||||
const LodePNGCompressSettings& settings = lodepng_default_compress_settings);
|
||||
|
||||
//Zlib-compress an std::vector
|
||||
/* Zlib-compress an std::vector */
|
||||
unsigned compress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,
|
||||
const LodePNGCompressSettings& settings = lodepng_default_compress_settings);
|
||||
#endif //LODEPNG_COMPILE_ENCODER
|
||||
#endif //LODEPNG_COMPILE_ZLIB
|
||||
} //namespace lodepng
|
||||
#endif /* LODEPNG_COMPILE_ENCODER */
|
||||
#endif /* LODEPNG_COMPILE_ZLIB */
|
||||
} /* namespace lodepng */
|
||||
#endif /*LODEPNG_COMPILE_CPP*/
|
||||
|
||||
/*
|
||||
TODO:
|
||||
[.] test if there are no memory leaks or security exploits - done a lot but needs to be checked often
|
||||
[.] check compatibility with vareous compilers - done but needs to be redone for every newer version
|
||||
[.] check compatibility with various compilers - done but needs to be redone for every newer version
|
||||
[X] converting color to 16-bit per channel types
|
||||
[ ] read all public PNG chunk types (but never let the color profile and gamma ones touch RGB values)
|
||||
[ ] make sure encoder generates no chunks with size > (2^31)-1
|
||||
@ -894,8 +896,9 @@ TODO:
|
||||
[X] let the "isFullyOpaque" function check color keys and transparent palettes too
|
||||
[X] better name for the variables "codes", "codesD", "codelengthcodes", "clcl" and "lldl"
|
||||
[ ] don't stop decoding on errors like 69, 57, 58 (make warnings)
|
||||
[ ] make option to choose if the raw image with non multiple of 8 bits per scanline should have padding bits or not
|
||||
[ ] let the C++ wrapper catch exceptions coming from the standard library and return LodePNG error codes
|
||||
[ ] allow user to provide custom color conversion functions, e.g. for premultiplied alpha, padding bits or not, ...
|
||||
[ ] allow user to give data (void*) to custom allocator
|
||||
*/
|
||||
|
||||
#endif /*LODEPNG_H inclusion guard*/
|
||||
@ -925,8 +928,9 @@ LodePNG Documentation
|
||||
10. examples
|
||||
10.1. decoder C++ example
|
||||
10.2. decoder C example
|
||||
11. changes
|
||||
12. contact information
|
||||
11. state settings reference
|
||||
12. changes
|
||||
13. contact information
|
||||
|
||||
|
||||
1. about
|
||||
@ -1552,8 +1556,49 @@ int main(int argc, char *argv[])
|
||||
return 0;
|
||||
}
|
||||
|
||||
11. state settings reference
|
||||
----------------------------
|
||||
|
||||
11. changes
|
||||
A quick reference of some settings to set on the LodePNGState
|
||||
|
||||
For decoding:
|
||||
|
||||
state.decoder.zlibsettings.ignore_adler32: ignore ADLER32 checksums
|
||||
state.decoder.zlibsettings.custom_...: use custom inflate function
|
||||
state.decoder.ignore_crc: ignore CRC checksums
|
||||
state.decoder.color_convert: convert internal PNG color to chosen one
|
||||
state.decoder.read_text_chunks: whether to read in text metadata chunks
|
||||
state.decoder.remember_unknown_chunks: whether to read in unknown chunks
|
||||
state.info_raw.colortype: desired color type for decoded image
|
||||
state.info_raw.bitdepth: desired bit depth for decoded image
|
||||
state.info_raw....: more color settings, see struct LodePNGColorMode
|
||||
state.info_png....: no settings for decoder but ouput, see struct LodePNGInfo
|
||||
|
||||
For encoding:
|
||||
|
||||
state.encoder.zlibsettings.btype: disable compression by setting it to 0
|
||||
state.encoder.zlibsettings.use_lz77: use LZ77 in compression
|
||||
state.encoder.zlibsettings.windowsize: tweak LZ77 windowsize
|
||||
state.encoder.zlibsettings.minmatch: tweak min LZ77 length to match
|
||||
state.encoder.zlibsettings.nicematch: tweak LZ77 match where to stop searching
|
||||
state.encoder.zlibsettings.lazymatching: try one more LZ77 matching
|
||||
state.encoder.zlibsettings.custom_...: use custom deflate function
|
||||
state.encoder.auto_convert: choose optimal PNG color type, if 0 uses info_png
|
||||
state.encoder.filter_palette_zero: PNG filter strategy for palette
|
||||
state.encoder.filter_strategy: PNG filter strategy to encode with
|
||||
state.encoder.force_palette: add palette even if not encoding to one
|
||||
state.encoder.add_id: add LodePNG identifier and version as a text chunk
|
||||
state.encoder.text_compression: use compressed text chunks for metadata
|
||||
state.info_raw.colortype: color type of raw input image you provide
|
||||
state.info_raw.bitdepth: bit depth of raw input image you provide
|
||||
state.info_raw: more color settings, see struct LodePNGColorMode
|
||||
state.info_png.color.colortype: desired color type if auto_convert is false
|
||||
state.info_png.color.bitdepth: desired bit depth if auto_convert is false
|
||||
state.info_png.color....: more color settings, see struct LodePNGColorMode
|
||||
state.info_png....: more PNG related settings, see struct LodePNGInfo
|
||||
|
||||
|
||||
12. changes
|
||||
-----------
|
||||
|
||||
The version number of LodePNG is the date of the change given in the format
|
||||
@ -1562,6 +1607,12 @@ yyyymmdd.
|
||||
Some changes aren't backwards compatible. Those are indicated with a (!)
|
||||
symbol.
|
||||
|
||||
*) 18 apr 2016: Changed qsort to custom stable sort (for platforms w/o qsort).
|
||||
*) 09 apr 2016: Fixed colorkey usage detection, and better file loading (within
|
||||
the limits of pure C90).
|
||||
*) 08 dec 2015: Made load_file function return error if file can't be opened.
|
||||
*) 24 okt 2015: Bugfix with decoding to palette output.
|
||||
*) 18 apr 2015: Boundary PM instead of just package-merge for faster encoding.
|
||||
*) 23 aug 2014: Reduced needless memory usage of decoder.
|
||||
*) 28 jun 2014: Removed fix_png setting, always support palette OOB for
|
||||
simplicity. Made ColorProfile public.
|
||||
@ -1586,7 +1637,7 @@ symbol.
|
||||
*) 22 apr 2012 (!): Made interface more consistent, renaming a lot. Removed
|
||||
redundant C++ codec classes. Reduced amount of structs. Everything changed,
|
||||
but it is cleaner now imho and functionality remains the same. Also fixed
|
||||
several bugs and shrinked the implementation code. Made new samples.
|
||||
several bugs and shrunk the implementation code. Made new samples.
|
||||
*) 6 nov 2011 (!): By default, the encoder now automatically chooses the best
|
||||
PNG color model and bit depth, based on the amount and type of colors of the
|
||||
raw image. For this, autoLeaveOutAlphaChannel replaced by auto_choose_color.
|
||||
@ -1621,7 +1672,7 @@ symbol.
|
||||
*) 20 jan 2008: support for unknown chunks allowing using LodePNG for an editor.
|
||||
*) 18 jan 2008: support for tIME and pHYs chunks added to encoder and decoder.
|
||||
*) 17 jan 2008: ability to encode and decode compressed zTXt chunks added
|
||||
Also vareous fixes, such as in the deflate and the padding bits code.
|
||||
Also various fixes, such as in the deflate and the padding bits code.
|
||||
*) 13 jan 2008: Added ability to encode Adam7-interlaced images. Improved
|
||||
filtering code of encoder.
|
||||
*) 07 jan 2008: (!) changed LodePNG to use ISO C90 instead of C++. A
|
||||
@ -1692,7 +1743,7 @@ symbol.
|
||||
*) 12 aug 2005: Initial release (C++, decoder only)
|
||||
|
||||
|
||||
12. contact information
|
||||
13. contact information
|
||||
-----------------------
|
||||
|
||||
Feel free to contact me with suggestions, problems, comments, ... concerning
|
||||
@ -1704,5 +1755,5 @@ Domain: gmail dot com.
|
||||
Account: lode dot vandevenne.
|
||||
|
||||
|
||||
Copyright (c) 2005-2014 Lode Vandevenne
|
||||
Copyright (c) 2005-2016 Lode Vandevenne
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user