laag-libpng 1.6.34.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +57 -0
- data/LICENSE.txt +133 -0
- data/README.org +34 -0
- data/ext/laag/libpng/extconf.rb +13 -0
- data/laag-libpng.gemspec +20 -0
- data/lib/laag/libpng.rb +29 -0
- data/vendor/git.code.sf.net/p/libpng/code/ANNOUNCE +35 -0
- data/vendor/git.code.sf.net/p/libpng/code/CHANGES +6051 -0
- data/vendor/git.code.sf.net/p/libpng/code/CMakeLists.txt +945 -0
- data/vendor/git.code.sf.net/p/libpng/code/INSTALL +465 -0
- data/vendor/git.code.sf.net/p/libpng/code/LICENSE +133 -0
- data/vendor/git.code.sf.net/p/libpng/code/Makefile.am +392 -0
- data/vendor/git.code.sf.net/p/libpng/code/README +222 -0
- data/vendor/git.code.sf.net/p/libpng/code/TODO +30 -0
- data/vendor/git.code.sf.net/p/libpng/code/arm/arm_init.c +135 -0
- data/vendor/git.code.sf.net/p/libpng/code/arm/filter_neon.S +253 -0
- data/vendor/git.code.sf.net/p/libpng/code/arm/filter_neon_intrinsics.c +387 -0
- data/vendor/git.code.sf.net/p/libpng/code/autogen.sh +225 -0
- data/vendor/git.code.sf.net/p/libpng/code/configure.ac +533 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/README.txt +5 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/arm-neon/README +83 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/arm-neon/android-ndk.c +39 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/arm-neon/linux-auxv.c +120 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/arm-neon/linux.c +161 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/conftest/README +49 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/conftest/pngcp.dfa +57 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/conftest/read.dfa +58 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/conftest/s_read.dfa +35 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/conftest/s_write.dfa +33 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/conftest/simple.dfa +36 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/conftest/write.dfa +45 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/examples/README.txt +24 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/examples/iccfrompng.c +185 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/examples/pngpixel.c +371 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/examples/pngtopng.c +98 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/examples/simpleover.c +648 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/gregbook/COPYING +340 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/gregbook/LICENSE +50 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/gregbook/Makefile.mingw32 +131 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/gregbook/Makefile.sgi +105 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/gregbook/Makefile.unx +134 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/gregbook/Makefile.w32 +114 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/gregbook/README +186 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/gregbook/makevms.com +132 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/gregbook/readpng.c +323 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/gregbook/readpng.h +88 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/gregbook/readpng2.c +521 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/gregbook/readpng2.h +116 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/gregbook/readppm.c +188 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/gregbook/rpng-win.c +735 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/gregbook/rpng-x.c +911 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/gregbook/rpng2-win.c +1261 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/gregbook/rpng2-x.c +2143 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/gregbook/toucan.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/gregbook/wpng.c +865 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/gregbook/writepng.c +401 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/gregbook/writepng.h +133 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/libtests/fakepng.c +65 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/libtests/gentests.sh +102 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/libtests/makepng.c +1941 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/libtests/pngimage.c +1712 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/libtests/pngstest-errors.h +165 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/libtests/pngstest.c +3829 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/libtests/pngunknown.c +1294 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/libtests/pngvalid.c +12230 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/libtests/readpng.c +115 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/libtests/tarith.c +999 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/libtests/timepng.c +608 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/mips-msa/README +83 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/mips-msa/linux.c +64 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/oss-fuzz/Dockerfile +24 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/oss-fuzz/README.txt +37 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/oss-fuzz/build.sh +50 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/oss-fuzz/libpng_read_fuzzer.cc +180 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/oss-fuzz/libpng_read_fuzzer.options +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/oss-fuzz/newcc +190 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/oss-fuzz/png.dict +39 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngminim/README +5 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngminim/decoder/README +10 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngminim/decoder/makefile +151 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngminim/decoder/pngusr.dfa +40 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngminim/decoder/pngusr.h +23 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngminim/encoder/README +10 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngminim/encoder/makefile +150 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngminim/encoder/pngusr.dfa +39 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngminim/encoder/pngusr.h +23 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngminim/preader/README +15 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngminim/preader/makefile +166 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngminim/preader/pngusr.dfa +40 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngminim/preader/pngusr.h +23 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngminus/README +153 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngminus/makefile.std +66 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngminus/makefile.tc3 +38 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngminus/makevms.com +92 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngminus/png2pnm.bat +41 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngminus/png2pnm.c +460 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngminus/png2pnm.sh +42 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngminus/pngminus.bat +4 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngminus/pngminus.sh +5 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngminus/pnm2png.bat +41 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngminus/pnm2png.c +638 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngminus/pnm2png.sh +42 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/README +105 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/basn0g01.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/basn0g02.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/basn0g04.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/basn0g08.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/basn0g16.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/basn2c08.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/basn2c16.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/basn3p01.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/basn3p02.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/basn3p04.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/basn3p08.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/basn4a08.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/basn4a16.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/basn6a08.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/basn6a16.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/ftbbn0g01.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/ftbbn0g02.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/ftbbn0g04.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/ftbbn2c16.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/ftbbn3p08.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/ftbgn2c16.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/ftbgn3p08.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/ftbrn2c08.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/ftbwn0g16.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/ftbwn3p08.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/ftbyn3p08.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/ftp0n0g08.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/ftp0n2c08.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/ftp0n3p08.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/pngsuite/ftp1n3p08.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/powerpc-vsx/README +81 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/powerpc-vsx/linux.c +57 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/powerpc-vsx/linux_aux.c +36 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/crashers/bad_iCCP.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/crashers/badadler.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/crashers/badcrc.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/crashers/empty_ancillary_chunks.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/crashers/huge_IDAT.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/crashers/huge_bKGD_chunk.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/crashers/huge_cHRM_chunk.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/crashers/huge_eXIf_chunk.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/crashers/huge_gAMA_chunk.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/crashers/huge_hIST_chunk.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/crashers/huge_iCCP_chunk.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/crashers/huge_iTXt_chunk.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/crashers/huge_juNK_unsafe_to_copy.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/crashers/huge_juNk_safe_to_copy.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/crashers/huge_pCAL_chunk.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/crashers/huge_pHYs_chunk.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/crashers/huge_sCAL_chunk.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/crashers/huge_sPLT_chunk.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/crashers/huge_sRGB_chunk.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/crashers/huge_sTER_chunk.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/crashers/huge_tEXt_chunk.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/crashers/huge_tIME_chunk.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/crashers/huge_zTXt_chunk.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-1-1.8-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-1-1.8.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-1-linear-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-1-linear.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-1-sRGB-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-1-sRGB.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-1-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-1.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-16-1.8-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-16-1.8.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-16-linear-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-16-linear.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-16-sRGB-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-16-sRGB.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-16-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-16.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-2-1.8-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-2-1.8.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-2-linear-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-2-linear.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-2-sRGB-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-2-sRGB.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-2-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-2.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-4-1.8-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-4-1.8.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-4-linear-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-4-linear.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-4-sRGB-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-4-sRGB.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-4-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-4.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-8-1.8-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-8-1.8.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-8-linear-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-8-linear.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-8-sRGB-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-8-sRGB.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-8-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-8.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-alpha-16-1.8.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-alpha-16-linear.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-alpha-16-sRGB.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-alpha-16.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-alpha-8-1.8.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-alpha-8-linear.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-alpha-8-sRGB.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/gray-alpha-8.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/makepngs.sh +94 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-1-1.8-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-1-1.8.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-1-linear-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-1-linear.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-1-sRGB-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-1-sRGB.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-1-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-1.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-2-1.8-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-2-1.8.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-2-linear-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-2-linear.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-2-sRGB-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-2-sRGB.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-2-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-2.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-4-1.8-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-4-1.8.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-4-linear-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-4-linear.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-4-sRGB-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-4-sRGB.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-4-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-4.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-8-1.8-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-8-1.8.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-8-linear-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-8-linear.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-8-sRGB-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-8-sRGB.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-8-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/palette-8.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/rgb-16-1.8-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/rgb-16-1.8.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/rgb-16-linear-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/rgb-16-linear.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/rgb-16-sRGB-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/rgb-16-sRGB.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/rgb-16-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/rgb-16.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/rgb-8-1.8-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/rgb-8-1.8.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/rgb-8-linear-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/rgb-8-linear.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/rgb-8-sRGB-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/rgb-8-sRGB.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/rgb-8-tRNS.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/rgb-8.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/rgb-alpha-16-1.8.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/rgb-alpha-16-linear.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/rgb-alpha-16-sRGB.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/rgb-alpha-16.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/rgb-alpha-8-1.8.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/rgb-alpha-8-linear.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/rgb-alpha-8-sRGB.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/testpngs/rgb-alpha-8.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/tools/README.txt +27 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/tools/checksum-icc.c +102 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/tools/chkfmt +144 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/tools/cvtcolor.c +188 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/tools/genpng.c +881 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/tools/intgamma.sh +110 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/tools/makesRGB.c +430 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/tools/png-fix-itxt.c +164 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/tools/pngcp.c +2453 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/tools/pngfix.c +4049 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/tools/reindent +25 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/tools/sRGB.h +48 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/visupng/PngFile.c +455 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/visupng/PngFile.h +30 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/visupng/README.txt +61 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/visupng/VisualPng.c +978 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/visupng/VisualPng.dsp +147 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/visupng/VisualPng.dsw +29 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/visupng/VisualPng.ico +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/visupng/VisualPng.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/visupng/VisualPng.rc +152 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/visupng/cexcept.h +248 -0
- data/vendor/git.code.sf.net/p/libpng/code/contrib/visupng/resource.h +23 -0
- data/vendor/git.code.sf.net/p/libpng/code/example.c +1066 -0
- data/vendor/git.code.sf.net/p/libpng/code/intel/filter_sse2_intrinsics.c +406 -0
- data/vendor/git.code.sf.net/p/libpng/code/intel/intel_init.c +53 -0
- data/vendor/git.code.sf.net/p/libpng/code/libpng-config.in +127 -0
- data/vendor/git.code.sf.net/p/libpng/code/libpng-manual.txt +5464 -0
- data/vendor/git.code.sf.net/p/libpng/code/libpng.3 +6249 -0
- data/vendor/git.code.sf.net/p/libpng/code/libpng.pc.in +12 -0
- data/vendor/git.code.sf.net/p/libpng/code/libpngpf.3 +18 -0
- data/vendor/git.code.sf.net/p/libpng/code/mips/filter_msa_intrinsics.c +807 -0
- data/vendor/git.code.sf.net/p/libpng/code/mips/mips_init.c +129 -0
- data/vendor/git.code.sf.net/p/libpng/code/png.5 +74 -0
- data/vendor/git.code.sf.net/p/libpng/code/png.c +4614 -0
- data/vendor/git.code.sf.net/p/libpng/code/png.h +3278 -0
- data/vendor/git.code.sf.net/p/libpng/code/pngbar.jpg +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/pngbar.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/pngconf.h +622 -0
- data/vendor/git.code.sf.net/p/libpng/code/pngdebug.h +153 -0
- data/vendor/git.code.sf.net/p/libpng/code/pngerror.c +963 -0
- data/vendor/git.code.sf.net/p/libpng/code/pngget.c +1248 -0
- data/vendor/git.code.sf.net/p/libpng/code/pnginfo.h +267 -0
- data/vendor/git.code.sf.net/p/libpng/code/pngmem.c +284 -0
- data/vendor/git.code.sf.net/p/libpng/code/pngnow.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/pngpread.c +1096 -0
- data/vendor/git.code.sf.net/p/libpng/code/pngpriv.h +2120 -0
- data/vendor/git.code.sf.net/p/libpng/code/pngread.c +4219 -0
- data/vendor/git.code.sf.net/p/libpng/code/pngrio.c +120 -0
- data/vendor/git.code.sf.net/p/libpng/code/pngrtran.c +5010 -0
- data/vendor/git.code.sf.net/p/libpng/code/pngrutil.c +4661 -0
- data/vendor/git.code.sf.net/p/libpng/code/pngset.c +1802 -0
- data/vendor/git.code.sf.net/p/libpng/code/pngstruct.h +483 -0
- data/vendor/git.code.sf.net/p/libpng/code/pngtest.c +2156 -0
- data/vendor/git.code.sf.net/p/libpng/code/pngtest.png +0 -0
- data/vendor/git.code.sf.net/p/libpng/code/pngtrans.c +864 -0
- data/vendor/git.code.sf.net/p/libpng/code/pngusr.dfa +14 -0
- data/vendor/git.code.sf.net/p/libpng/code/pngwio.c +168 -0
- data/vendor/git.code.sf.net/p/libpng/code/pngwrite.c +2396 -0
- data/vendor/git.code.sf.net/p/libpng/code/pngwtran.c +576 -0
- data/vendor/git.code.sf.net/p/libpng/code/pngwutil.c +2784 -0
- data/vendor/git.code.sf.net/p/libpng/code/powerpc/filter_vsx_intrinsics.c +767 -0
- data/vendor/git.code.sf.net/p/libpng/code/powerpc/powerpc_init.c +125 -0
- data/vendor/git.code.sf.net/p/libpng/code/projects/owatcom/libpng.tgt +383 -0
- data/vendor/git.code.sf.net/p/libpng/code/projects/owatcom/libpng.wpj +112 -0
- data/vendor/git.code.sf.net/p/libpng/code/projects/owatcom/pngconfig.mak +160 -0
- data/vendor/git.code.sf.net/p/libpng/code/projects/owatcom/pngstest.tgt +219 -0
- data/vendor/git.code.sf.net/p/libpng/code/projects/owatcom/pngtest.tgt +179 -0
- data/vendor/git.code.sf.net/p/libpng/code/projects/owatcom/pngvalid.tgt +210 -0
- data/vendor/git.code.sf.net/p/libpng/code/projects/visualc71/PRJ0041.mak +21 -0
- data/vendor/git.code.sf.net/p/libpng/code/projects/visualc71/README.txt +58 -0
- data/vendor/git.code.sf.net/p/libpng/code/projects/visualc71/README_zlib.txt +44 -0
- data/vendor/git.code.sf.net/p/libpng/code/projects/visualc71/libpng.sln +60 -0
- data/vendor/git.code.sf.net/p/libpng/code/projects/visualc71/libpng.vcproj +419 -0
- data/vendor/git.code.sf.net/p/libpng/code/projects/visualc71/pngtest.vcproj +267 -0
- data/vendor/git.code.sf.net/p/libpng/code/projects/visualc71/zlib.vcproj +391 -0
- data/vendor/git.code.sf.net/p/libpng/code/projects/vstudio/README.txt +97 -0
- data/vendor/git.code.sf.net/p/libpng/code/projects/vstudio/libpng/libpng.vcxproj +234 -0
- data/vendor/git.code.sf.net/p/libpng/code/projects/vstudio/pnglibconf/pnglibconf.vcxproj +61 -0
- data/vendor/git.code.sf.net/p/libpng/code/projects/vstudio/pngstest/pngstest.vcxproj +219 -0
- data/vendor/git.code.sf.net/p/libpng/code/projects/vstudio/pngtest/pngtest.vcxproj +220 -0
- data/vendor/git.code.sf.net/p/libpng/code/projects/vstudio/pngunknown/pngunknown.vcxproj +219 -0
- data/vendor/git.code.sf.net/p/libpng/code/projects/vstudio/pngvalid/pngvalid.vcxproj +219 -0
- data/vendor/git.code.sf.net/p/libpng/code/projects/vstudio/vstudio.sln +109 -0
- data/vendor/git.code.sf.net/p/libpng/code/projects/vstudio/zlib/zlib.vcxproj +175 -0
- data/vendor/git.code.sf.net/p/libpng/code/projects/vstudio/zlib.props +58 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/README.txt +86 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/SCOPTIONS.ppc +7 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/checksym.awk +173 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/def.c +29 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/descrip.mms +52 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/dfn.awk +203 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/genchk.cmake.in +37 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/genout.cmake.in +93 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/gensrc.cmake.in +138 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/intprefix.c +22 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/libpng-config-body.in +96 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/libpng-config-head.in +24 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/libpng.pc.in +10 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/macro.lst +3 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.32sunu +244 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.64sunu +244 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.acorn +57 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.aix +116 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.amiga +58 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.atari +71 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.bc32 +158 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.beos +222 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.bor +170 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.cegcc +116 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.darwin +225 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.dec +210 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.dj2 +72 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.freebsd +69 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.gcc +87 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.hp64 +231 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.hpgcc +234 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.hpux +229 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.ibmc +90 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.intel +115 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.knr +116 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.linux +247 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.linux-opt +265 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.mips +103 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.msc +100 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.msys +201 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.ne12bsd +56 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.netbsd +56 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.openbsd +88 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.sco +226 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.sggcc +236 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.sgi +237 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.so9 +247 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.solaris +244 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.solaris-x86 +243 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.std +134 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.sunos +115 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.tc3 +100 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makefile.vcwin32 +113 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/makevms.com +142 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/options.awk +898 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/pnglibconf.dfa +919 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/pnglibconf.h.prebuilt +220 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/pnglibconf.mak +55 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/pngwin.rc +112 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/prefix.c +24 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/smakefile.ppc +34 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/sym.c +15 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/symbols.c +58 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/symbols.def +256 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/test.cmake.in +31 -0
- data/vendor/git.code.sf.net/p/libpng/code/scripts/vers.c +19 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngimage-full +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngimage-quick +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngstest +54 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngstest-1.8 +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngstest-1.8-alpha +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngstest-linear +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngstest-linear-alpha +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngstest-none +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngstest-none-alpha +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngstest-sRGB +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngstest-sRGB-alpha +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngtest +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngtest-badpngs +13 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngunknown-IDAT +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngunknown-discard +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngunknown-if-safe +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngunknown-sAPI +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngunknown-sTER +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngunknown-save +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngunknown-vpAg +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngvalid-gamma-16-to-8 +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngvalid-gamma-alpha-mode +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngvalid-gamma-background +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngvalid-gamma-expand16-alpha-mode +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngvalid-gamma-expand16-background +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngvalid-gamma-expand16-transform +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngvalid-gamma-sbit +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngvalid-gamma-threshold +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngvalid-gamma-transform +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngvalid-progressive-interlace-standard +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngvalid-progressive-size +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngvalid-progressive-standard +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngvalid-standard +2 -0
- data/vendor/git.code.sf.net/p/libpng/code/tests/pngvalid-transform +2 -0
- metadata +515 -0
@@ -0,0 +1,110 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
#
|
3
|
+
# intgamma.sh
|
4
|
+
#
|
5
|
+
# Last changed in libpng 1.6.0 [February 14, 2013]
|
6
|
+
#
|
7
|
+
# COPYRIGHT: Written by John Cunningham Bowler, 2013.
|
8
|
+
# To the extent possible under law, the author has waived all copyright and
|
9
|
+
# related or neighboring rights to this work. This work is published from:
|
10
|
+
# United States.
|
11
|
+
#
|
12
|
+
# Shell script to generate png.c 8-bit and 16-bit log tables (see the code in
|
13
|
+
# png.c for details).
|
14
|
+
#
|
15
|
+
# This script uses the "bc" arbitrary precision calculator to calculate 32-bit
|
16
|
+
# fixed point values of logarithms appropriate to finding the log of an 8-bit
|
17
|
+
# (0..255) value and a similar table for the exponent calculation.
|
18
|
+
#
|
19
|
+
# "bc" must be on the path when the script is executed, and the math library
|
20
|
+
# (-lm) must be available
|
21
|
+
#
|
22
|
+
# function to print out a list of numbers as integers; the function truncates
|
23
|
+
# the integers which must be one-per-line
|
24
|
+
function print(){
|
25
|
+
awk 'BEGIN{
|
26
|
+
str = ""
|
27
|
+
}
|
28
|
+
{
|
29
|
+
sub("\\.[0-9]*$", "")
|
30
|
+
if ($0 == "")
|
31
|
+
$0 = "0"
|
32
|
+
|
33
|
+
if (str == "")
|
34
|
+
t = " " $0 "U"
|
35
|
+
else
|
36
|
+
t = str ", " $0 "U"
|
37
|
+
|
38
|
+
if (length(t) >= 80) {
|
39
|
+
print str ","
|
40
|
+
str = " " $0 "U"
|
41
|
+
} else
|
42
|
+
str = t
|
43
|
+
}
|
44
|
+
END{
|
45
|
+
print str
|
46
|
+
}'
|
47
|
+
}
|
48
|
+
#
|
49
|
+
# The logarithm table.
|
50
|
+
cat <<END
|
51
|
+
/* 8-bit log table: png_8bit_l2[128]
|
52
|
+
* This is a table of -log(value/255)/log(2) for 'value' in the range 128 to
|
53
|
+
* 255, so it's the base 2 logarithm of a normalized 8-bit floating point
|
54
|
+
* mantissa. The numbers are 32-bit fractions.
|
55
|
+
*/
|
56
|
+
static const png_uint_32
|
57
|
+
png_8bit_l2[128] =
|
58
|
+
{
|
59
|
+
END
|
60
|
+
#
|
61
|
+
bc -lqws <<END | print
|
62
|
+
f=65536*65536/l(2)
|
63
|
+
for (i=128;i<256;++i) { .5 - l(i/255)*f; }
|
64
|
+
END
|
65
|
+
echo '};'
|
66
|
+
echo
|
67
|
+
#
|
68
|
+
# The exponent table.
|
69
|
+
cat <<END
|
70
|
+
/* The 'exp()' case must invert the above, taking a 20-bit fixed point
|
71
|
+
* logarithmic value and returning a 16 or 8-bit number as appropriate. In
|
72
|
+
* each case only the low 16 bits are relevant - the fraction - since the
|
73
|
+
* integer bits (the top 4) simply determine a shift.
|
74
|
+
*
|
75
|
+
* The worst case is the 16-bit distinction between 65535 and 65534; this
|
76
|
+
* requires perhaps spurious accuracy in the decoding of the logarithm to
|
77
|
+
* distinguish log2(65535/65534.5) - 10^-5 or 17 bits. There is little chance
|
78
|
+
* of getting this accuracy in practice.
|
79
|
+
*
|
80
|
+
* To deal with this the following exp() function works out the exponent of the
|
81
|
+
* frational part of the logarithm by using an accurate 32-bit value from the
|
82
|
+
* top four fractional bits then multiplying in the remaining bits.
|
83
|
+
*/
|
84
|
+
static const png_uint_32
|
85
|
+
png_32bit_exp[16] =
|
86
|
+
{
|
87
|
+
END
|
88
|
+
#
|
89
|
+
bc -lqws <<END | print
|
90
|
+
f=l(2)/16
|
91
|
+
for (i=0;i<16;++i) {
|
92
|
+
x = .5 + e(-i*f)*2^32;
|
93
|
+
if (x >= 2^32) x = 2^32-1;
|
94
|
+
x;
|
95
|
+
}
|
96
|
+
END
|
97
|
+
echo '};'
|
98
|
+
echo
|
99
|
+
#
|
100
|
+
# And the table of adjustment values.
|
101
|
+
cat <<END
|
102
|
+
/* Adjustment table; provided to explain the numbers in the code below. */
|
103
|
+
#if 0
|
104
|
+
END
|
105
|
+
bc -lqws <<END | awk '{ printf "%5d %s\n", 12-NR, $0 }'
|
106
|
+
for (i=11;i>=0;--i){
|
107
|
+
(1 - e(-(2^i)/65536*l(2))) * 2^(32-i)
|
108
|
+
}
|
109
|
+
END
|
110
|
+
echo '#endif'
|
@@ -0,0 +1,430 @@
|
|
1
|
+
/* makesRGB.c -- build sRGB-to-linear and linear-to-sRGB conversion tables
|
2
|
+
*
|
3
|
+
* Last changed in libpng 1.6.0 [February 14, 2013]
|
4
|
+
*
|
5
|
+
* COPYRIGHT: Written by John Cunningham Bowler, 2013.
|
6
|
+
* To the extent possible under law, the author has waived all copyright and
|
7
|
+
* related or neighboring rights to this work. This work is published from:
|
8
|
+
* United States.
|
9
|
+
*
|
10
|
+
* Make a table to convert 8-bit sRGB encoding values into the closest 16-bit
|
11
|
+
* linear value.
|
12
|
+
*
|
13
|
+
* Make two tables to take a linear value scaled to 255*65535 and return an
|
14
|
+
* approximation to the 8-bit sRGB encoded value. Calculate the error in these
|
15
|
+
* tables and display it.
|
16
|
+
*/
|
17
|
+
#define _C99_SOURCE 1
|
18
|
+
#include <stdio.h>
|
19
|
+
#include <math.h>
|
20
|
+
#include <stdlib.h>
|
21
|
+
|
22
|
+
/* pngpriv.h includes the definition of 'PNG_sRGB_FROM_LINEAR' which is required
|
23
|
+
* to verify the actual code.
|
24
|
+
*/
|
25
|
+
#include "../../pngpriv.h"
|
26
|
+
|
27
|
+
#include "sRGB.h"
|
28
|
+
|
29
|
+
/* The tables are declared 'const' in pngpriv.h, so this redefines the tables to
|
30
|
+
* be used.
|
31
|
+
*/
|
32
|
+
#define png_sRGB_table sRGB_table
|
33
|
+
#define png_sRGB_base sRGB_base
|
34
|
+
#define png_sRGB_delta sRGB_delta
|
35
|
+
|
36
|
+
static png_uint_16 png_sRGB_table[256];
|
37
|
+
static png_uint_16 png_sRGB_base[512];
|
38
|
+
static png_byte png_sRGB_delta[512];
|
39
|
+
|
40
|
+
static const unsigned int max_input = 255*65535;
|
41
|
+
|
42
|
+
double
|
43
|
+
fsRGB(double l)
|
44
|
+
{
|
45
|
+
return sRGB_from_linear(l/max_input);
|
46
|
+
}
|
47
|
+
|
48
|
+
double
|
49
|
+
sRGB(unsigned int i)
|
50
|
+
{
|
51
|
+
return fsRGB(i);
|
52
|
+
}
|
53
|
+
|
54
|
+
double
|
55
|
+
finvsRGB(unsigned int i)
|
56
|
+
{
|
57
|
+
return 65535 * linear_from_sRGB(i/255.);
|
58
|
+
}
|
59
|
+
|
60
|
+
png_uint_16
|
61
|
+
invsRGB(unsigned int i)
|
62
|
+
{
|
63
|
+
unsigned int x = nearbyint(finvsRGB(i));
|
64
|
+
|
65
|
+
if (x > 65535)
|
66
|
+
{
|
67
|
+
fprintf(stderr, "invsRGB(%u) overflows to %u\n", i, x);
|
68
|
+
exit(1);
|
69
|
+
}
|
70
|
+
|
71
|
+
return (png_uint_16)x;
|
72
|
+
}
|
73
|
+
|
74
|
+
int
|
75
|
+
main(int argc, char **argv)
|
76
|
+
{
|
77
|
+
unsigned int i, i16, ibase;
|
78
|
+
double min_error = 0;
|
79
|
+
double max_error = 0;
|
80
|
+
double min_error16 = 0;
|
81
|
+
double max_error16 = 0;
|
82
|
+
double adjust;
|
83
|
+
double adjust_lo = 0.4, adjust_hi = 0.6, adjust_mid = 0.5;
|
84
|
+
unsigned int ec_lo = 0, ec_hi = 0, ec_mid = 0;
|
85
|
+
unsigned int error_count = 0;
|
86
|
+
unsigned int error_count16 = 0;
|
87
|
+
int test_only = 0;
|
88
|
+
|
89
|
+
if (argc > 1)
|
90
|
+
test_only = strcmp("--test", argv[1]) == 0;
|
91
|
+
|
92
|
+
/* Initialize the encoding table first. */
|
93
|
+
for (i=0; i<256; ++i)
|
94
|
+
{
|
95
|
+
png_sRGB_table[i] = invsRGB(i);
|
96
|
+
}
|
97
|
+
|
98
|
+
/* Now work out the decoding tables (this is where the error comes in because
|
99
|
+
* there are 512 set points and 512 straight lines between them.)
|
100
|
+
*/
|
101
|
+
for (;;)
|
102
|
+
{
|
103
|
+
if (ec_lo == 0)
|
104
|
+
adjust = adjust_lo;
|
105
|
+
|
106
|
+
else if (ec_hi == 0)
|
107
|
+
adjust = adjust_hi;
|
108
|
+
|
109
|
+
else if (ec_mid == 0)
|
110
|
+
adjust = adjust_mid;
|
111
|
+
|
112
|
+
else if (ec_mid < ec_hi)
|
113
|
+
adjust = (adjust_mid + adjust_hi)/2;
|
114
|
+
|
115
|
+
else if (ec_mid < ec_lo)
|
116
|
+
adjust = (adjust_mid + adjust_lo)/2;
|
117
|
+
|
118
|
+
else
|
119
|
+
{
|
120
|
+
fprintf(stderr, "not reached: %u .. %u .. %u\n", ec_lo, ec_mid, ec_hi);
|
121
|
+
exit(1);
|
122
|
+
}
|
123
|
+
|
124
|
+
/* Calculate the table using the current 'adjust' */
|
125
|
+
for (i=0; i<=511; ++i)
|
126
|
+
{
|
127
|
+
double lo = 255 * sRGB(i << 15);
|
128
|
+
double hi = 255 * sRGB((i+1) << 15);
|
129
|
+
unsigned int calc;
|
130
|
+
|
131
|
+
calc = nearbyint((lo+adjust) * 256);
|
132
|
+
if (calc > 65535)
|
133
|
+
{
|
134
|
+
fprintf(stderr, "table[%d][0]: overflow %08x (%d)\n", i, calc,
|
135
|
+
calc);
|
136
|
+
exit(1);
|
137
|
+
}
|
138
|
+
png_sRGB_base[i] = calc;
|
139
|
+
|
140
|
+
calc = nearbyint((hi-lo) * 32);
|
141
|
+
if (calc > 255)
|
142
|
+
{
|
143
|
+
fprintf(stderr, "table[%d][1]: overflow %08x (%d)\n", i, calc,
|
144
|
+
calc);
|
145
|
+
exit(1);
|
146
|
+
}
|
147
|
+
png_sRGB_delta[i] = calc;
|
148
|
+
}
|
149
|
+
|
150
|
+
/* Check the 16-bit linear values alone: */
|
151
|
+
error_count16 = 0;
|
152
|
+
for (i16=0; i16 <= 65535; ++i16)
|
153
|
+
{
|
154
|
+
unsigned int i = 255*i16;
|
155
|
+
unsigned int iexact = nearbyint(255*sRGB(i));
|
156
|
+
unsigned int icalc = PNG_sRGB_FROM_LINEAR(i);
|
157
|
+
|
158
|
+
if (icalc != iexact)
|
159
|
+
++error_count16;
|
160
|
+
}
|
161
|
+
|
162
|
+
/* Now try changing the adjustment. */
|
163
|
+
if (ec_lo == 0)
|
164
|
+
ec_lo = error_count16;
|
165
|
+
|
166
|
+
else if (ec_hi == 0)
|
167
|
+
ec_hi = error_count16;
|
168
|
+
|
169
|
+
else if (ec_mid == 0)
|
170
|
+
{
|
171
|
+
ec_mid = error_count16;
|
172
|
+
printf("/* initial error counts: %u .. %u .. %u */\n", ec_lo, ec_mid,
|
173
|
+
ec_hi);
|
174
|
+
}
|
175
|
+
|
176
|
+
else if (error_count16 < ec_mid)
|
177
|
+
{
|
178
|
+
printf("/* adjust (mid ): %f: %u -> %u */\n", adjust, ec_mid,
|
179
|
+
error_count16);
|
180
|
+
ec_mid = error_count16;
|
181
|
+
adjust_mid = adjust;
|
182
|
+
}
|
183
|
+
|
184
|
+
else if (adjust < adjust_mid && error_count16 < ec_lo)
|
185
|
+
{
|
186
|
+
printf("/* adjust (low ): %f: %u -> %u */\n", adjust, ec_lo,
|
187
|
+
error_count16);
|
188
|
+
ec_lo = error_count16;
|
189
|
+
adjust_lo = adjust;
|
190
|
+
}
|
191
|
+
|
192
|
+
else if (adjust > adjust_mid && error_count16 < ec_hi)
|
193
|
+
{
|
194
|
+
printf("/* adjust (high): %f: %u -> %u */\n", adjust, ec_hi,
|
195
|
+
error_count16);
|
196
|
+
ec_hi = error_count16;
|
197
|
+
adjust_hi = adjust;
|
198
|
+
}
|
199
|
+
|
200
|
+
else
|
201
|
+
{
|
202
|
+
adjust = adjust_mid;
|
203
|
+
printf("/* adjust: %f: %u */\n", adjust, ec_mid);
|
204
|
+
break;
|
205
|
+
}
|
206
|
+
}
|
207
|
+
|
208
|
+
/* For each entry in the table try to adjust it to minimize the error count
|
209
|
+
* in that entry. Each entry corresponds to 128 input values.
|
210
|
+
*/
|
211
|
+
for (ibase=0; ibase<65536; ibase+=128)
|
212
|
+
{
|
213
|
+
png_uint_16 base = png_sRGB_base[ibase >> 7], trybase = base, ob=base;
|
214
|
+
png_byte delta = png_sRGB_delta[ibase >> 7], trydelta = delta, od=delta;
|
215
|
+
unsigned int ecbase = 0, eco;
|
216
|
+
|
217
|
+
for (;;)
|
218
|
+
{
|
219
|
+
png_sRGB_base[ibase >> 7] = trybase;
|
220
|
+
png_sRGB_delta[ibase >> 7] = trydelta;
|
221
|
+
|
222
|
+
/* Check the 16-bit linear values alone: */
|
223
|
+
error_count16 = 0;
|
224
|
+
for (i16=ibase; i16 < ibase+128; ++i16)
|
225
|
+
{
|
226
|
+
unsigned int i = 255*i16;
|
227
|
+
unsigned int iexact = nearbyint(255*sRGB(i));
|
228
|
+
unsigned int icalc = PNG_sRGB_FROM_LINEAR(i);
|
229
|
+
|
230
|
+
if (icalc != iexact)
|
231
|
+
++error_count16;
|
232
|
+
}
|
233
|
+
|
234
|
+
if (error_count16 == 0)
|
235
|
+
break;
|
236
|
+
|
237
|
+
if (ecbase == 0)
|
238
|
+
{
|
239
|
+
eco = ecbase = error_count16;
|
240
|
+
++trybase; /* First test */
|
241
|
+
}
|
242
|
+
|
243
|
+
else if (error_count16 < ecbase)
|
244
|
+
{
|
245
|
+
if (trybase > base)
|
246
|
+
{
|
247
|
+
base = trybase;
|
248
|
+
++trybase;
|
249
|
+
}
|
250
|
+
else if (trybase < base)
|
251
|
+
{
|
252
|
+
base = trybase;
|
253
|
+
--trybase;
|
254
|
+
}
|
255
|
+
else if (trydelta > delta)
|
256
|
+
{
|
257
|
+
delta = trydelta;
|
258
|
+
++trydelta;
|
259
|
+
}
|
260
|
+
else if (trydelta < delta)
|
261
|
+
{
|
262
|
+
delta = trydelta;
|
263
|
+
--trydelta;
|
264
|
+
}
|
265
|
+
else
|
266
|
+
{
|
267
|
+
fprintf(stderr, "makesRGB: impossible\n");
|
268
|
+
exit(1);
|
269
|
+
}
|
270
|
+
ecbase = error_count16;
|
271
|
+
}
|
272
|
+
|
273
|
+
else
|
274
|
+
{
|
275
|
+
if (trybase > base)
|
276
|
+
trybase = base-1;
|
277
|
+
else if (trybase < base)
|
278
|
+
{
|
279
|
+
trybase = base;
|
280
|
+
++trydelta;
|
281
|
+
}
|
282
|
+
else if (trydelta > delta)
|
283
|
+
trydelta = delta-1;
|
284
|
+
else if (trydelta < delta)
|
285
|
+
break; /* end of tests */
|
286
|
+
}
|
287
|
+
}
|
288
|
+
|
289
|
+
png_sRGB_base[ibase >> 7] = base;
|
290
|
+
png_sRGB_delta[ibase >> 7] = delta;
|
291
|
+
if (base != ob || delta != od)
|
292
|
+
{
|
293
|
+
printf("/* table[%u]={%u,%u} -> {%u,%u} %u -> %u errors */\n",
|
294
|
+
ibase>>7, ob, od, base, delta, eco, ecbase);
|
295
|
+
}
|
296
|
+
else if (0)
|
297
|
+
printf("/* table[%u]={%u,%u} %u errors */\n", ibase>>7, ob, od,
|
298
|
+
ecbase);
|
299
|
+
}
|
300
|
+
|
301
|
+
/* Only do the full (slow) test at the end: */
|
302
|
+
min_error = -.4999;
|
303
|
+
max_error = .4999;
|
304
|
+
error_count = 0;
|
305
|
+
|
306
|
+
for (i=0; i <= max_input; ++i)
|
307
|
+
{
|
308
|
+
unsigned int iexact = nearbyint(255*sRGB(i));
|
309
|
+
unsigned int icalc = PNG_sRGB_FROM_LINEAR(i);
|
310
|
+
|
311
|
+
if (icalc != iexact)
|
312
|
+
{
|
313
|
+
double err = 255*sRGB(i) - icalc;
|
314
|
+
|
315
|
+
if (err > (max_error+.001) || err < (min_error-.001))
|
316
|
+
{
|
317
|
+
printf(
|
318
|
+
"/* 0x%08x: exact: %3d, got: %3d [tables: %08x, %08x] (%f) */\n",
|
319
|
+
i, iexact, icalc, png_sRGB_base[i>>15],
|
320
|
+
png_sRGB_delta[i>>15], err);
|
321
|
+
}
|
322
|
+
|
323
|
+
++error_count;
|
324
|
+
if (err > max_error)
|
325
|
+
max_error = err;
|
326
|
+
else if (err < min_error)
|
327
|
+
min_error = err;
|
328
|
+
}
|
329
|
+
}
|
330
|
+
|
331
|
+
/* Re-check the 16-bit cases too, including the warning if there is an error
|
332
|
+
* bigger than 1.
|
333
|
+
*/
|
334
|
+
error_count16 = 0;
|
335
|
+
max_error16 = 0;
|
336
|
+
min_error16 = 0;
|
337
|
+
for (i16=0; i16 <= 65535; ++i16)
|
338
|
+
{
|
339
|
+
unsigned int i = 255*i16;
|
340
|
+
unsigned int iexact = nearbyint(255*sRGB(i));
|
341
|
+
unsigned int icalc = PNG_sRGB_FROM_LINEAR(i);
|
342
|
+
|
343
|
+
if (icalc != iexact)
|
344
|
+
{
|
345
|
+
double err = 255*sRGB(i) - icalc;
|
346
|
+
|
347
|
+
++error_count16;
|
348
|
+
if (err > max_error16)
|
349
|
+
max_error16 = err;
|
350
|
+
else if (err < min_error16)
|
351
|
+
min_error16 = err;
|
352
|
+
|
353
|
+
if (abs(icalc - iexact) > 1)
|
354
|
+
printf(
|
355
|
+
"/* 0x%04x: exact: %3d, got: %3d [tables: %08x, %08x] (%f) */\n",
|
356
|
+
i16, iexact, icalc, png_sRGB_base[i>>15],
|
357
|
+
png_sRGB_delta[i>>15], err);
|
358
|
+
}
|
359
|
+
}
|
360
|
+
|
361
|
+
/* Check the round trip for each 8-bit sRGB value. */
|
362
|
+
for (i16=0; i16 <= 255; ++i16)
|
363
|
+
{
|
364
|
+
unsigned int i = 255 * png_sRGB_table[i16];
|
365
|
+
unsigned int iexact = nearbyint(255*sRGB(i));
|
366
|
+
unsigned int icalc = PNG_sRGB_FROM_LINEAR(i);
|
367
|
+
|
368
|
+
if (i16 != iexact)
|
369
|
+
{
|
370
|
+
fprintf(stderr, "8-bit rounding error: %d -> %d\n", i16, iexact);
|
371
|
+
exit(1);
|
372
|
+
}
|
373
|
+
|
374
|
+
if (icalc != i16)
|
375
|
+
{
|
376
|
+
double finv = finvsRGB(i16);
|
377
|
+
|
378
|
+
printf("/* 8-bit roundtrip error: %d -> %f -> %d(%f) */\n",
|
379
|
+
i16, finv, icalc, fsRGB(255*finv));
|
380
|
+
}
|
381
|
+
}
|
382
|
+
|
383
|
+
|
384
|
+
printf("/* error: %g - %g, %u (%g%%) of readings inexact */\n",
|
385
|
+
min_error, max_error, error_count, (100.*error_count)/max_input);
|
386
|
+
printf("/* 16-bit error: %g - %g, %u (%g%%) of readings inexact */\n",
|
387
|
+
min_error16, max_error16, error_count16, (100.*error_count16)/65535);
|
388
|
+
|
389
|
+
if (!test_only)
|
390
|
+
{
|
391
|
+
printf("PNG_CONST png_uint_16 png_sRGB_table[256] =\n{\n ");
|
392
|
+
for (i=0; i<255; )
|
393
|
+
{
|
394
|
+
do
|
395
|
+
{
|
396
|
+
printf("%d,", png_sRGB_table[i++]);
|
397
|
+
}
|
398
|
+
while ((i & 0x7) != 0 && i<255);
|
399
|
+
if (i<255) printf("\n ");
|
400
|
+
}
|
401
|
+
printf("%d\n};\n\n", png_sRGB_table[i]);
|
402
|
+
|
403
|
+
|
404
|
+
printf("PNG_CONST png_uint_16 png_sRGB_base[512] =\n{\n ");
|
405
|
+
for (i=0; i<511; )
|
406
|
+
{
|
407
|
+
do
|
408
|
+
{
|
409
|
+
printf("%d,", png_sRGB_base[i++]);
|
410
|
+
}
|
411
|
+
while ((i & 0x7) != 0 && i<511);
|
412
|
+
if (i<511) printf("\n ");
|
413
|
+
}
|
414
|
+
printf("%d\n};\n\n", png_sRGB_base[i]);
|
415
|
+
|
416
|
+
printf("PNG_CONST png_byte png_sRGB_delta[512] =\n{\n ");
|
417
|
+
for (i=0; i<511; )
|
418
|
+
{
|
419
|
+
do
|
420
|
+
{
|
421
|
+
printf("%d,", png_sRGB_delta[i++]);
|
422
|
+
}
|
423
|
+
while ((i & 0xf) != 0 && i<511);
|
424
|
+
if (i<511) printf("\n ");
|
425
|
+
}
|
426
|
+
printf("%d\n};\n\n", png_sRGB_delta[i]);
|
427
|
+
}
|
428
|
+
|
429
|
+
return 0;
|
430
|
+
}
|
@@ -0,0 +1,164 @@
|
|
1
|
+
|
2
|
+
/* png-fix-itxt version 1.0.0
|
3
|
+
*
|
4
|
+
* Copyright 2015 Glenn Randers-Pehrson
|
5
|
+
* Last changed in libpng 1.6.18 [July 23, 2015]
|
6
|
+
*
|
7
|
+
* This code is released under the libpng license.
|
8
|
+
* For conditions of distribution and use, see the disclaimer
|
9
|
+
* and license in png.h
|
10
|
+
*
|
11
|
+
* Usage:
|
12
|
+
*
|
13
|
+
* png-fix-itxt.exe < bad.png > good.png
|
14
|
+
*
|
15
|
+
* Fixes a PNG file written with libpng-1.6.0 or 1.6.1 that has one or more
|
16
|
+
* uncompressed iTXt chunks. Assumes that the actual length is greater
|
17
|
+
* than or equal to the value in the length byte, and that the CRC is
|
18
|
+
* correct for the actual length. This program hunts for the CRC and
|
19
|
+
* adjusts the length byte accordingly. It is not an error to process a
|
20
|
+
* PNG file that has no iTXt chunks or one that has valid iTXt chunks;
|
21
|
+
* such files will simply be copied.
|
22
|
+
*
|
23
|
+
* Requires zlib (for crc32 and Z_NULL); build with
|
24
|
+
*
|
25
|
+
* gcc -O -o png-fix-itxt png-fix-itxt.c -lz
|
26
|
+
*
|
27
|
+
* If you need to handle iTXt chunks larger than 500000 kbytes you must
|
28
|
+
* rebuild png-fix-itxt with a larger values of MAX_LENGTH (or a smaller value
|
29
|
+
* if you know you will never encounter such huge iTXt chunks).
|
30
|
+
*/
|
31
|
+
|
32
|
+
#include <stdio.h>
|
33
|
+
#include <zlib.h>
|
34
|
+
|
35
|
+
#define MAX_LENGTH 500000
|
36
|
+
|
37
|
+
/* Read one character (inchar), also return octet (c), break if EOF */
|
38
|
+
#define GETBREAK inchar=getchar(); \
|
39
|
+
c=(inchar & 0xffU);\
|
40
|
+
if (inchar != c) break
|
41
|
+
int
|
42
|
+
main(void)
|
43
|
+
{
|
44
|
+
unsigned int i;
|
45
|
+
unsigned char buf[MAX_LENGTH];
|
46
|
+
unsigned long crc;
|
47
|
+
unsigned char c;
|
48
|
+
int inchar;
|
49
|
+
|
50
|
+
/* Skip 8-byte signature */
|
51
|
+
for (i=8; i; i--)
|
52
|
+
{
|
53
|
+
GETBREAK;
|
54
|
+
putchar(c);
|
55
|
+
}
|
56
|
+
|
57
|
+
if (inchar == c) /* !EOF */
|
58
|
+
for (;;)
|
59
|
+
{
|
60
|
+
/* Read the length */
|
61
|
+
unsigned long length; /* must be 32 bits! */
|
62
|
+
GETBREAK; buf[0] = c; length = c; length <<= 8;
|
63
|
+
GETBREAK; buf[1] = c; length += c; length <<= 8;
|
64
|
+
GETBREAK; buf[2] = c; length += c; length <<= 8;
|
65
|
+
GETBREAK; buf[3] = c; length += c;
|
66
|
+
|
67
|
+
/* Read the chunkname */
|
68
|
+
GETBREAK; buf[4] = c;
|
69
|
+
GETBREAK; buf[5] = c;
|
70
|
+
GETBREAK; buf[6] = c;
|
71
|
+
GETBREAK; buf[7] = c;
|
72
|
+
|
73
|
+
|
74
|
+
/* The iTXt chunk type expressed as integers is (105, 84, 88, 116) */
|
75
|
+
if (buf[4] == 105 && buf[5] == 84 && buf[6] == 88 && buf[7] == 116)
|
76
|
+
{
|
77
|
+
if (length >= MAX_LENGTH-12)
|
78
|
+
break; /* To do: handle this more gracefully */
|
79
|
+
|
80
|
+
/* Initialize the CRC */
|
81
|
+
crc = crc32(0, Z_NULL, 0);
|
82
|
+
|
83
|
+
/* Copy the data bytes */
|
84
|
+
for (i=8; i < length + 12; i++)
|
85
|
+
{
|
86
|
+
GETBREAK; buf[i] = c;
|
87
|
+
}
|
88
|
+
|
89
|
+
if (inchar != c) /* EOF */
|
90
|
+
break;
|
91
|
+
|
92
|
+
/* Calculate the CRC */
|
93
|
+
crc = crc32(crc, buf+4, (uInt)length+4);
|
94
|
+
|
95
|
+
for (;;)
|
96
|
+
{
|
97
|
+
/* Check the CRC */
|
98
|
+
if (((crc >> 24) & 0xffU) == buf[length+8] &&
|
99
|
+
((crc >> 16) & 0xffU) == buf[length+9] &&
|
100
|
+
((crc >> 8) & 0xffU) == buf[length+10] &&
|
101
|
+
((crc ) & 0xffU) == buf[length+11])
|
102
|
+
break;
|
103
|
+
|
104
|
+
length++;
|
105
|
+
|
106
|
+
if (length >= MAX_LENGTH-12)
|
107
|
+
break;
|
108
|
+
|
109
|
+
GETBREAK;
|
110
|
+
buf[length+11] = c;
|
111
|
+
|
112
|
+
/* Update the CRC */
|
113
|
+
crc = crc32(crc, buf+7+length, 1);
|
114
|
+
}
|
115
|
+
|
116
|
+
if (inchar != c) /* EOF */
|
117
|
+
break;
|
118
|
+
|
119
|
+
/* Update length bytes */
|
120
|
+
buf[0] = (unsigned char)((length >> 24) & 0xffU);
|
121
|
+
buf[1] = (unsigned char)((length >> 16) & 0xffU);
|
122
|
+
buf[2] = (unsigned char)((length >> 8) & 0xffU);
|
123
|
+
buf[3] = (unsigned char)((length ) & 0xffU);
|
124
|
+
|
125
|
+
/* Write the fixed iTXt chunk (length, name, data, crc) */
|
126
|
+
for (i=0; i<length+12; i++)
|
127
|
+
putchar(buf[i]);
|
128
|
+
}
|
129
|
+
|
130
|
+
else
|
131
|
+
{
|
132
|
+
if (inchar != c) /* EOF */
|
133
|
+
break;
|
134
|
+
|
135
|
+
/* Copy bytes that were already read (length and chunk name) */
|
136
|
+
for (i=0; i<8; i++)
|
137
|
+
putchar(buf[i]);
|
138
|
+
|
139
|
+
/* Copy data bytes and CRC */
|
140
|
+
for (i=8; i< length+12; i++)
|
141
|
+
{
|
142
|
+
GETBREAK;
|
143
|
+
putchar(c);
|
144
|
+
}
|
145
|
+
|
146
|
+
if (inchar != c) /* EOF */
|
147
|
+
{
|
148
|
+
break;
|
149
|
+
}
|
150
|
+
|
151
|
+
/* The IEND chunk type expressed as integers is (73, 69, 78, 68) */
|
152
|
+
if (buf[4] == 73 && buf[5] == 69 && buf[6] == 78 && buf[7] == 68)
|
153
|
+
break;
|
154
|
+
}
|
155
|
+
|
156
|
+
if (inchar != c) /* EOF */
|
157
|
+
break;
|
158
|
+
|
159
|
+
if (buf[4] == 73 && buf[5] == 69 && buf[6] == 78 && buf[7] == 68)
|
160
|
+
break;
|
161
|
+
}
|
162
|
+
|
163
|
+
return 0;
|
164
|
+
}
|