Compare commits
61 Commits
coverity_s
...
v2.1.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1f1e968269 | ||
|
|
54941adbee | ||
|
|
4142ac60d6 | ||
|
|
ac927f2eee | ||
|
|
1be0128fab | ||
|
|
f053508f6f | ||
|
|
7a5fb35b8d | ||
|
|
39f9934a70 | ||
|
|
04a00aab65 | ||
|
|
b7d73d7b25 | ||
|
|
25966346f7 | ||
|
|
d8ae42d808 | ||
|
|
43557dcd3b | ||
|
|
0b7aad3231 | ||
|
|
5e58b30b8b | ||
|
|
ee458b5fd0 | ||
|
|
21a02aa5be | ||
|
|
bf845a3892 | ||
|
|
b75acb3bb9 | ||
|
|
2978541ea2 | ||
|
|
53b4bf29ca | ||
|
|
5196bda0b9 | ||
|
|
3547402709 | ||
|
|
d60b7aa130 | ||
|
|
98a97cef6b | ||
|
|
c8fbf0f516 | ||
|
|
4d2527aa61 | ||
|
|
f62b810892 | ||
|
|
4daf9a8d88 | ||
|
|
f31c327213 | ||
|
|
eebd59a6d6 | ||
|
|
ae2095ef14 | ||
|
|
37b1679a27 | ||
|
|
0fac6e4222 | ||
|
|
76fa5c5639 | ||
|
|
6221641a2c | ||
|
|
0a2178fa27 | ||
|
|
53f25200ed | ||
|
|
788dff0a36 | ||
|
|
5a0620026f | ||
|
|
620b06f566 | ||
|
|
b3a8a69503 | ||
|
|
5b9bf39408 | ||
|
|
65e214efd3 | ||
|
|
e0d2a7bd8c | ||
|
|
177fdd94c0 | ||
|
|
a091186825 | ||
|
|
517d57ef1f | ||
|
|
7c41a1e393 | ||
|
|
7269c8f7a6 | ||
|
|
a66c391519 | ||
|
|
9c8ab8bd2e | ||
|
|
595f0e1b2b | ||
|
|
7219854639 | ||
|
|
9466d3100e | ||
|
|
58320d2f3b | ||
|
|
5611209f12 | ||
|
|
5ce71e1ec9 | ||
|
|
9701c19323 | ||
|
|
c84747e580 | ||
|
|
cf77ede84c |
97
.travis.yml
97
.travis.yml
@@ -1,21 +1,90 @@
|
|||||||
language: c
|
language: c
|
||||||
|
|
||||||
env:
|
matrix:
|
||||||
global:
|
include:
|
||||||
- secure: "Tx8C7AkTwGDiPEzEaS6t3emevQMYzlcDGilbGWXT7vnSKbftH6lr/9djoKhD2Y2xA62XEfHr9fho9FzUGYuuTADz05qYIdc5m1lILRWok8SFwDt27DS0CpaSpvDYzzCPe70zBdEq1VZ05U+kXA2a4bS+R0xDA8q8vRx4jOl9LjpHvt8R2K7qHkx9LH5YmBz42PjbXdmxJPdFTY8SgWUy7dOMsnPMq0UzTLS54DMlOxSRaCrVw6qv15uIBrgTQiy+XtNft2qe5J+61w6WEhaWhbofuaxuc86jiryA8XUv04WuafoYxaErgf5+nw2/CfMAP2k5TFsNDN/F07xlCj/0aL/kVJGmVsKHUlDBbzEDhkQjw8C6hANOfagBSfRgWvko0E5o0bo0sRrIsbg1feVby7zkfX2a73fTDNC30Z3SSkzTWz37VNJLUMF14LmRDaq4/0DtIAjJDy4qaUwh4RCLcCPlbAf9nmBZn8asIFswPLd4gnktk9n42AyPHNDLExKCwe3+LsVO8ruAlejlnZyEU91vpVMF14j6WeQm2mnYb9CBdOVsBmrskyuTZ4oENDAx14CoxgL6lvxhf+gnZMhvIft1ybM+wQTdfBIl6cqlOMmU9uC8IecQx1Rz/ek17cR3PQXOWQu/jNiU2nJt1WGpBfzYSBjg/e1cVzRvIi+eI5k="
|
- os: osx
|
||||||
|
compiler: clang
|
||||||
|
env: OPJ_CI_ARCH=x86_64 OPJ_CI_BUILD_CONFIGURATION=Release OPJ_CI_INCLUDE_IF_DEPLOY=1
|
||||||
|
- os: linux
|
||||||
|
compiler: gcc
|
||||||
|
env: OPJ_CI_ARCH=x86_64 OPJ_CI_BUILD_CONFIGURATION=Release OPJ_CI_INCLUDE_IF_DEPLOY=1
|
||||||
|
- os: linux
|
||||||
|
compiler: gcc
|
||||||
|
env: OPJ_CI_ARCH=i386 OPJ_CI_BUILD_CONFIGURATION=Release
|
||||||
addons:
|
addons:
|
||||||
coverity_scan:
|
apt:
|
||||||
project:
|
packages:
|
||||||
name: "uclouvain/openjpeg"
|
- gcc-multilib
|
||||||
description: "Build submitted via Travis CI"
|
- os: linux
|
||||||
notification_email: info@openjpeg.org
|
compiler: gcc
|
||||||
build_command_prepend: "mkdir build && cd build && cmake -G 'Unix Makefiles' -DBUILD_CODEC=ON -DBUILD_THIRDPARTY=ON .."
|
env: OPJ_CI_ARCH=x86_64 OPJ_CI_BUILD_CONFIGURATION=Debug
|
||||||
build_command: "make -j 4"
|
- os: linux
|
||||||
branch_pattern: coverity_scan
|
compiler: clang
|
||||||
|
env: OPJ_CI_ARCH=x86_64 OPJ_CI_BUILD_CONFIGURATION=Debug OPJ_CI_ASAN=1
|
||||||
|
- os: linux
|
||||||
|
compiler: clang-3.8
|
||||||
|
env: OPJ_CI_ARCH=x86_64 OPJ_CI_BUILD_CONFIGURATION=Release
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- llvm-toolchain-precise-3.8
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- clang-3.8
|
||||||
|
- os: linux
|
||||||
|
compiler: x86_64-w64-mingw32-gcc
|
||||||
|
env: OPJ_CI_ARCH=x86_64 OPJ_CI_BUILD_CONFIGURATION=Release
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- gcc-mingw-w64-base
|
||||||
|
- binutils-mingw-w64-x86-64
|
||||||
|
- gcc-mingw-w64-x86-64
|
||||||
|
- gcc-mingw-w64
|
||||||
|
- os: linux
|
||||||
|
compiler: x86_64-w64-mingw32-gcc
|
||||||
|
env: OPJ_CI_ARCH=i386 OPJ_CI_BUILD_CONFIGURATION=Release
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- gcc-mingw-w64-base
|
||||||
|
- binutils-mingw-w64-i686
|
||||||
|
- gcc-mingw-w64-i686
|
||||||
|
- gcc-mingw-w64
|
||||||
|
- os: linux
|
||||||
|
compiler: gcc-4.8
|
||||||
|
env: OPJ_CI_ABI_CHECK=1
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- gcc-4.8
|
||||||
|
- libelf-dev
|
||||||
|
- elfutils
|
||||||
|
- texinfo
|
||||||
|
- exuberant-ctags
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- echo "Coverity scan build"
|
- ./tools/travis-ci/install.sh
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- echo "Coverity scan build"
|
- ./tools/travis-ci/run.sh
|
||||||
|
- ./tools/travis-ci/abi-check.sh
|
||||||
|
|
||||||
|
before_deploy:
|
||||||
|
- export OPJ_RELEASE_PKG_FILE=$(ls build/openjpeg-${TRAVIS_TAG}*)
|
||||||
|
- echo "deploying $OPJ_RELEASE_PKG_FILE to GitHub releases"
|
||||||
|
|
||||||
|
deploy:
|
||||||
|
provider: releases
|
||||||
|
api_key:
|
||||||
|
secure: Npi13uOffALCVNwea4p4q8v85Lo/WsRqaeZQcWrAkt8MxRnfvWQtmnuwmHnVB6Cig+T1lVUHrklOaJIApIb6nkGq3CS/9bD8+SCS2NEdAAP/QYWnBi0ubWXVMRyDLypmwRpzLNSZ0xLYGFUl2PjieZYKRcz1dd/J7S+FnXhPtdjXweq0FS63zTcMe7ggjfmzSOWUCEFmMjZPaM0Be+3PweieCO1dxlHuy7ugCkx2S7d+5hNsicIhQmTADjqtJAkHoMhYqu6/yLFxhjO/+f938PATFULdODTvjCsUwdN/ySWi1Oj4uPAntfytZP7H6YrzLh8dS73QCsdkhhDJIgJskHIBSbRyyEVUnOvQgD9VaBVGHtc1KtZQTwc41OUO3BGPHl97s3oX6bqWqo/L53dB3TPHGx+1+2HL/F0zaDZuHhAKMkPwe8LFPMPB/ur65zXMHjnWb2ZTVVdoIvkbQ7nu8ApI60ejxocYBsEyAuC2CPXU2ki4jdEhm0E1hIziWNE9/LTuM17ziQuJ6WpXOSMrfP4o5aVDmLp5ZGBSocrspOksgyI9XogHaO/r+Y6N3exy+giObFfMHkZVUpsKrKmtOJ7TC1Vg5HsYGlWW8RN8dkJV47bUXm9K4sMos9eYMUt/czykPAs+132cogpII3QxXpFZQqZg6SEPVfOiyqQzTUI=
|
||||||
|
file_glob: true
|
||||||
|
file: "${OPJ_RELEASE_PKG_FILE}"
|
||||||
|
skip_cleanup: true
|
||||||
|
on:
|
||||||
|
repo: uclouvain/openjpeg
|
||||||
|
tags: true
|
||||||
|
condition: "$OPJ_CI_INCLUDE_IF_DEPLOY = 1"
|
||||||
|
|
||||||
|
|||||||
55
CHANGELOG.md
55
CHANGELOG.md
@@ -1,5 +1,60 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [v2.1.2](https://github.com/uclouvain/openjpeg/releases/v2.1.2) (2016-09-28)
|
||||||
|
[Full Changelog](https://github.com/uclouvain/openjpeg/compare/v2.1.1...v2.1.2)
|
||||||
|
|
||||||
|
**Closed issues:**
|
||||||
|
|
||||||
|
- null ptr dereference in convert.c:1331 [\#843](https://github.com/uclouvain/openjpeg/issues/843)
|
||||||
|
- Out-of-Bounds Read in function bmp24toimage of convertbmp.c [\#833](https://github.com/uclouvain/openjpeg/issues/833)
|
||||||
|
- Disable automatic compilation of t1\_generate\_luts in CMakeLists.txt [\#831](https://github.com/uclouvain/openjpeg/issues/831)
|
||||||
|
- CVE-2016-7163 Integer overflow in opj\_pi\_create\_decode [\#826](https://github.com/uclouvain/openjpeg/issues/826)
|
||||||
|
- Security Advisory for OpenJPEG [\#810](https://github.com/uclouvain/openjpeg/issues/810)
|
||||||
|
- Add dashboard with static lib [\#804](https://github.com/uclouvain/openjpeg/issues/804)
|
||||||
|
- hidden visibility for the static library / building with -DOPJ\_STATIC against shared lib [\#802](https://github.com/uclouvain/openjpeg/issues/802)
|
||||||
|
- Optimization when building library from source [\#799](https://github.com/uclouvain/openjpeg/issues/799)
|
||||||
|
- unsigned int16 on Solaris 11.2/sparc [\#796](https://github.com/uclouvain/openjpeg/issues/796)
|
||||||
|
- appveyor [\#793](https://github.com/uclouvain/openjpeg/issues/793)
|
||||||
|
- Please make a new release [\#782](https://github.com/uclouvain/openjpeg/issues/782)
|
||||||
|
- FFMpeg will not link to 2.1.1 release built as shared library [\#766](https://github.com/uclouvain/openjpeg/issues/766)
|
||||||
|
- API change since v2: opj\_event\_mgr\_t not available [\#754](https://github.com/uclouvain/openjpeg/issues/754)
|
||||||
|
- openjpeg.h needs dependencies [\#673](https://github.com/uclouvain/openjpeg/issues/673)
|
||||||
|
- "master" does not build on ubuntu [\#658](https://github.com/uclouvain/openjpeg/issues/658)
|
||||||
|
- Package 'openjp2', required by 'libopenjpip', not found [\#594](https://github.com/uclouvain/openjpeg/issues/594)
|
||||||
|
|
||||||
|
**Merged pull requests:**
|
||||||
|
|
||||||
|
- Fix PNM file reading [\#847](https://github.com/uclouvain/openjpeg/pull/847) ([mayeut](https://github.com/mayeut))
|
||||||
|
- Fix some issues reported by Coverity Scan [\#846](https://github.com/uclouvain/openjpeg/pull/846) ([stweil](https://github.com/stweil))
|
||||||
|
- Fix potential out-of-bounds read \(coverity\) [\#844](https://github.com/uclouvain/openjpeg/pull/844) ([stweil](https://github.com/stweil))
|
||||||
|
- Remove TODO for overflow check [\#842](https://github.com/uclouvain/openjpeg/pull/842) ([mayeut](https://github.com/mayeut))
|
||||||
|
- Add overflow checks for opj\_aligned\_malloc [\#841](https://github.com/uclouvain/openjpeg/pull/841) ([mayeut](https://github.com/mayeut))
|
||||||
|
- Flags in T1 shall be unsigned [\#840](https://github.com/uclouvain/openjpeg/pull/840) ([mayeut](https://github.com/mayeut))
|
||||||
|
- Fix some warnings [\#838](https://github.com/uclouvain/openjpeg/pull/838) ([mayeut](https://github.com/mayeut))
|
||||||
|
- Fix issue 833. [\#834](https://github.com/uclouvain/openjpeg/pull/834) ([trylab](https://github.com/trylab))
|
||||||
|
- Add overflow checks for opj\_aligned\_malloc [\#832](https://github.com/uclouvain/openjpeg/pull/832) ([mayeut](https://github.com/mayeut))
|
||||||
|
- Add test for issue 820 [\#829](https://github.com/uclouvain/openjpeg/pull/829) ([mayeut](https://github.com/mayeut))
|
||||||
|
- Add test for issue 826 [\#827](https://github.com/uclouvain/openjpeg/pull/827) ([mayeut](https://github.com/mayeut))
|
||||||
|
- Fix coverity 113065 \(CWE-484\) [\#824](https://github.com/uclouvain/openjpeg/pull/824) ([mayeut](https://github.com/mayeut))
|
||||||
|
- Add sanity check for tile coordinates [\#823](https://github.com/uclouvain/openjpeg/pull/823) ([mayeut](https://github.com/mayeut))
|
||||||
|
- Add test for PR 818 [\#822](https://github.com/uclouvain/openjpeg/pull/822) ([mayeut](https://github.com/mayeut))
|
||||||
|
- Update to libpng 1.6.25 [\#821](https://github.com/uclouvain/openjpeg/pull/821) ([mayeut](https://github.com/mayeut))
|
||||||
|
- fix incrementing of "l\_tcp-\>m\_nb\_mcc\_records" in opj\_j2k\_read\_mcc [\#820](https://github.com/uclouvain/openjpeg/pull/820) ([mayeut](https://github.com/mayeut))
|
||||||
|
- Add overflow check in opj\_tcd\_init\_tile [\#819](https://github.com/uclouvain/openjpeg/pull/819) ([mayeut](https://github.com/mayeut))
|
||||||
|
- Fix leak & invalid behavior of opj\_jp2\_read\_ihdr [\#818](https://github.com/uclouvain/openjpeg/pull/818) ([mayeut](https://github.com/mayeut))
|
||||||
|
- Add overflow check in opj\_j2k\_update\_image\_data [\#817](https://github.com/uclouvain/openjpeg/pull/817) ([mayeut](https://github.com/mayeut))
|
||||||
|
- Change 'restrict' define to 'OPJ\_RESTRICT' [\#816](https://github.com/uclouvain/openjpeg/pull/816) ([mayeut](https://github.com/mayeut))
|
||||||
|
- Switch to clang 3.8 [\#814](https://github.com/uclouvain/openjpeg/pull/814) ([mayeut](https://github.com/mayeut))
|
||||||
|
- Fix an integer overflow issue [\#809](https://github.com/uclouvain/openjpeg/pull/809) ([trylab](https://github.com/trylab))
|
||||||
|
- Update to lcms 2.8 [\#808](https://github.com/uclouvain/openjpeg/pull/808) ([mayeut](https://github.com/mayeut))
|
||||||
|
- Update to libpng 1.6.24 [\#807](https://github.com/uclouvain/openjpeg/pull/807) ([mayeut](https://github.com/mayeut))
|
||||||
|
- Reenable clang-3.9 build on travis [\#806](https://github.com/uclouvain/openjpeg/pull/806) ([mayeut](https://github.com/mayeut))
|
||||||
|
- Bit fields type [\#805](https://github.com/uclouvain/openjpeg/pull/805) ([smuehlst](https://github.com/smuehlst))
|
||||||
|
- Add compilation test for standalone inclusion of openjpeg.h [\#798](https://github.com/uclouvain/openjpeg/pull/798) ([mayeut](https://github.com/mayeut))
|
||||||
|
- jpwl: Remove non-portable data type u\_int16\_t \(fix issue \#796\) [\#797](https://github.com/uclouvain/openjpeg/pull/797) ([stweil](https://github.com/stweil))
|
||||||
|
- Fix dependency for pkg-config \(issue \#594\) [\#795](https://github.com/uclouvain/openjpeg/pull/795) ([stweil](https://github.com/stweil))
|
||||||
|
- Add .gitignore [\#787](https://github.com/uclouvain/openjpeg/pull/787) ([stweil](https://github.com/stweil))
|
||||||
|
|
||||||
## [v2.1.1](https://github.com/uclouvain/openjpeg/releases/tag/v2.1.1) (2016-07-05)
|
## [v2.1.1](https://github.com/uclouvain/openjpeg/releases/tag/v2.1.1) (2016-07-05)
|
||||||
[Full Changelog](https://github.com/uclouvain/openjpeg/compare/version.2.1...v2.1.1)
|
[Full Changelog](https://github.com/uclouvain/openjpeg/compare/version.2.1...v2.1.1)
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ include_regular_expression("^.*$")
|
|||||||
# OPENJPEG version number, useful for packaging and doxygen doc:
|
# OPENJPEG version number, useful for packaging and doxygen doc:
|
||||||
set(OPENJPEG_VERSION_MAJOR 2)
|
set(OPENJPEG_VERSION_MAJOR 2)
|
||||||
set(OPENJPEG_VERSION_MINOR 1)
|
set(OPENJPEG_VERSION_MINOR 1)
|
||||||
set(OPENJPEG_VERSION_BUILD 1)
|
set(OPENJPEG_VERSION_BUILD 2)
|
||||||
set(OPENJPEG_VERSION
|
set(OPENJPEG_VERSION
|
||||||
"${OPENJPEG_VERSION_MAJOR}.${OPENJPEG_VERSION_MINOR}.${OPENJPEG_VERSION_BUILD}")
|
"${OPENJPEG_VERSION_MAJOR}.${OPENJPEG_VERSION_MINOR}.${OPENJPEG_VERSION_BUILD}")
|
||||||
set(PACKAGE_VERSION
|
set(PACKAGE_VERSION
|
||||||
@@ -53,6 +53,7 @@ set(PACKAGE_VERSION
|
|||||||
# 2.0.1 | 6
|
# 2.0.1 | 6
|
||||||
# 2.1 | 7
|
# 2.1 | 7
|
||||||
# 2.1.1 | 7
|
# 2.1.1 | 7
|
||||||
|
# 2.1.2 | 7
|
||||||
# above is the recommendation by the OPJ team. If you really need to override this default,
|
# above is the recommendation by the OPJ team. If you really need to override this default,
|
||||||
# you can specify your own OPENJPEG_SOVERSION at cmake configuration time:
|
# you can specify your own OPENJPEG_SOVERSION at cmake configuration time:
|
||||||
# cmake -DOPENJPEG_SOVERSION:STRING=42 /path/to/openjpeg
|
# cmake -DOPENJPEG_SOVERSION:STRING=42 /path/to/openjpeg
|
||||||
@@ -67,7 +68,7 @@ set(OPENJPEG_LIBRARY_PROPERTIES
|
|||||||
# --------------------------------------------------------------------------
|
# --------------------------------------------------------------------------
|
||||||
# Path to additional CMake modules
|
# Path to additional CMake modules
|
||||||
set(CMAKE_MODULE_PATH
|
set(CMAKE_MODULE_PATH
|
||||||
${CMAKE_SOURCE_DIR}/cmake
|
${${OPENJPEG_NAMESPACE}_SOURCE_DIR}/cmake
|
||||||
${CMAKE_MODULE_PATH})
|
${CMAKE_MODULE_PATH})
|
||||||
|
|
||||||
# --------------------------------------------------------------------------
|
# --------------------------------------------------------------------------
|
||||||
@@ -163,8 +164,8 @@ TEST_BIG_ENDIAN(OPJ_BIG_ENDIAN)
|
|||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
# Setup file for setting custom ctest vars
|
# Setup file for setting custom ctest vars
|
||||||
configure_file(
|
configure_file(
|
||||||
${CMAKE_SOURCE_DIR}/cmake/CTestCustom.cmake.in
|
${${OPENJPEG_NAMESPACE}_SOURCE_DIR}/cmake/CTestCustom.cmake.in
|
||||||
${CMAKE_BINARY_DIR}/CTestCustom.cmake
|
${${OPENJPEG_NAMESPACE}_BINARY_DIR}/CTestCustom.cmake
|
||||||
@ONLY
|
@ONLY
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -226,7 +227,7 @@ CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H)
|
|||||||
include(TestLargeFiles)
|
include(TestLargeFiles)
|
||||||
OPJ_TEST_LARGE_FILES(OPJ_HAVE_LARGEFILES)
|
OPJ_TEST_LARGE_FILES(OPJ_HAVE_LARGEFILES)
|
||||||
|
|
||||||
# Allocating Aligned Memory Blocks
|
# Allocating Aligned Memory Blocks
|
||||||
include(CheckIncludeFiles)
|
include(CheckIncludeFiles)
|
||||||
check_include_files(malloc.h OPJ_HAVE_MALLOC_H)
|
check_include_files(malloc.h OPJ_HAVE_MALLOC_H)
|
||||||
include(CheckSymbolExists)
|
include(CheckSymbolExists)
|
||||||
@@ -249,6 +250,7 @@ if(BUILD_JPIP_SERVER)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
add_subdirectory(src/lib)
|
add_subdirectory(src/lib)
|
||||||
|
option(BUILD_LUTS_GENERATOR "Build utility to generate t1_luts.h" OFF)
|
||||||
|
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
# Build Applications
|
# Build Applications
|
||||||
@@ -322,8 +324,8 @@ endif()
|
|||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
# install all targets referenced as OPENJPEGTargets
|
# install all targets referenced as OPENJPEGTargets
|
||||||
install(EXPORT OpenJPEGTargets DESTINATION ${OPENJPEG_INSTALL_PACKAGE_DIR})
|
install(EXPORT OpenJPEGTargets DESTINATION ${OPENJPEG_INSTALL_PACKAGE_DIR})
|
||||||
configure_file( ${OPENJPEG_SOURCE_DIR}/cmake/OpenJPEGConfig.cmake.in
|
configure_file( ${${OPENJPEG_NAMESPACE}_SOURCE_DIR}/cmake/OpenJPEGConfig.cmake.in
|
||||||
${OPENJPEG_BINARY_DIR}/OpenJPEGConfig.cmake
|
${${OPENJPEG_NAMESPACE}_BINARY_DIR}/OpenJPEGConfig.cmake
|
||||||
@ONLY
|
@ONLY
|
||||||
)
|
)
|
||||||
install( FILES ${OPENJPEG_BINARY_DIR}/OpenJPEGConfig.cmake
|
install( FILES ${OPENJPEG_BINARY_DIR}/OpenJPEGConfig.cmake
|
||||||
|
|||||||
5
NEWS.md
5
NEWS.md
@@ -2,6 +2,11 @@
|
|||||||
|
|
||||||
More details in the [Changelog](https://github.com/uclouvain/openjpeg/blob/master/CHANGELOG.md)
|
More details in the [Changelog](https://github.com/uclouvain/openjpeg/blob/master/CHANGELOG.md)
|
||||||
|
|
||||||
|
## OpenJPEG 2.1.2
|
||||||
|
|
||||||
|
* Bug fixes (including security fixes)
|
||||||
|
* No API/ABI break compared to v2.1.1
|
||||||
|
|
||||||
## OpenJPEG 2.1.1
|
## OpenJPEG 2.1.1
|
||||||
|
|
||||||
* Huge amount of critical bugfixes
|
* Huge amount of critical bugfixes
|
||||||
|
|||||||
@@ -73,10 +73,10 @@ API available is the one supported by OpenJPEG.
|
|||||||
[comment-license]: https://img.shields.io/github/license/uclouvain/openjpeg.svg "https://img.shields.io/badge/license-BSD--2--Clause-blue.svg"
|
[comment-license]: https://img.shields.io/github/license/uclouvain/openjpeg.svg "https://img.shields.io/badge/license-BSD--2--Clause-blue.svg"
|
||||||
[badge-license]: https://img.shields.io/badge/license-BSD--2--Clause-blue.svg "BSD 2-clause "Simplified" License"
|
[badge-license]: https://img.shields.io/badge/license-BSD--2--Clause-blue.svg "BSD 2-clause "Simplified" License"
|
||||||
[link-license]: https://github.com/uclouvain/openjpeg/blob/master/LICENSE "BSD 2-clause "Simplified" License"
|
[link-license]: https://github.com/uclouvain/openjpeg/blob/master/LICENSE "BSD 2-clause "Simplified" License"
|
||||||
[badge-build]: https://travis-ci.org/uclouvain/openjpeg.svg?branch=master "Build Status"
|
[badge-build]: https://travis-ci.org/uclouvain/openjpeg.svg?branch=openjpeg-2.1 "Build Status"
|
||||||
[link-build]: https://travis-ci.org/uclouvain/openjpeg "Build Status"
|
[link-build]: https://travis-ci.org/uclouvain/openjpeg "Build Status"
|
||||||
[badge-msvc-build]: https://ci.appveyor.com/api/projects/status/github/uclouvain/openjpeg?branch=master&svg=true "Windows Build Status"
|
[badge-msvc-build]: https://ci.appveyor.com/api/projects/status/github/uclouvain/openjpeg?branch=openjpeg-2.1&svg=true "Windows Build Status"
|
||||||
[link-msvc-build]: https://ci.appveyor.com/project/detonin/openjpeg/branch/master "Windows Build Status"
|
[link-msvc-build]: https://ci.appveyor.com/project/detonin/openjpeg/branch/openjpeg-2.1 "Windows Build Status"
|
||||||
[badge-coverity]: https://scan.coverity.com/projects/6383/badge.svg "Coverity Scan Build Status"
|
[badge-coverity]: https://scan.coverity.com/projects/6383/badge.svg "Coverity Scan Build Status"
|
||||||
[link-coverity]: https://scan.coverity.com/projects/uclouvain-openjpeg "Coverity Scan Build Status"
|
[link-coverity]: https://scan.coverity.com/projects/uclouvain-openjpeg "Coverity Scan Build Status"
|
||||||
[link-api-timeline]: http://www.openjpeg.org/abi-check/timeline/openjpeg "OpenJPEG API/ABI timeline"
|
[link-api-timeline]: http://www.openjpeg.org/abi-check/timeline/openjpeg "OpenJPEG API/ABI timeline"
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
.TH opj_compress 1 "Version 2.1.1" "opj_compress" "converts to jpeg2000 files"
|
.TH opj_compress 1 "Version 2.1.1" "opj_compress" "converts to jpeg2000 files"
|
||||||
.P
|
.P
|
||||||
.SH NAME
|
.SH NAME
|
||||||
opj_compress -
|
opj_compress \-
|
||||||
This program reads in an image of a certain type and converts it to a
|
This program reads in an image of a certain type and converts it to a
|
||||||
jpeg2000 file. It is part of the OpenJPEG library.
|
jpeg2000 file. It is part of the OpenJPEG library.
|
||||||
.SP
|
.SP
|
||||||
@@ -43,20 +43,20 @@ Valid output image extensions are
|
|||||||
.B .j2k, .jp2
|
.B .j2k, .jp2
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.P
|
.P
|
||||||
.B opj_compress -i \fRinfile.bmp \fB-o \fRoutfile.j2k
|
.B opj_compress \-i \fRinfile.bmp \fB-o \fRoutfile.j2k
|
||||||
.P
|
.P
|
||||||
.B opj_compress -ImgDir \fRdirectory_name \fB-OutFor \fRjp2
|
.B opj_compress \-ImgDir \fRdirectory_name \fB-OutFor \fRjp2
|
||||||
.P
|
.P
|
||||||
.B opj_compress -h \fRPrint a help message and exit.
|
.B opj_compress \-h \fRPrint a help message and exit.
|
||||||
.P
|
.P
|
||||||
.R See JPWL OPTIONS for special options
|
.R See JPWL OPTIONS for special options
|
||||||
.SH OPTIONS
|
.SH OPTIONS
|
||||||
.TP
|
.TP
|
||||||
.B \-\^b " n,n"
|
.B \-\^b " n,n"
|
||||||
(Size of code block (e.g. -b 32,32). Default: 64 x 64)
|
(Size of code block (e.g. \-b 32,32). Default: 64 x 64)
|
||||||
.TP
|
.TP
|
||||||
.B \-\^c " n"
|
.B \-\^c " n"
|
||||||
(Size of precinct (e.g. -c 128,128). Default: 2^15 x 2^15)
|
(Size of precinct (e.g. \-c 128,128). Default: 2^15 x 2^15)
|
||||||
.TP
|
.TP
|
||||||
.B \-\^cinema2K " fps"
|
.B \-\^cinema2K " fps"
|
||||||
Digital Cinema 2K profile compliant codestream. Valid \fBfps\fR values are 24 or 48.
|
Digital Cinema 2K profile compliant codestream. Valid \fBfps\fR values are 24 or 48.
|
||||||
@@ -65,7 +65,7 @@ Digital Cinema 2K profile compliant codestream. Valid \fBfps\fR values are 24 or
|
|||||||
Digital Cinema 4K profile compliant codestream. Does not need an fps: default is 24 fps.
|
Digital Cinema 4K profile compliant codestream. Does not need an fps: default is 24 fps.
|
||||||
.TP
|
.TP
|
||||||
.B \-\^d " X,Y"
|
.B \-\^d " X,Y"
|
||||||
(Offset of image origin (e.g. -d 150,300))
|
(Offset of image origin (e.g. \-d 150,300))
|
||||||
.TP
|
.TP
|
||||||
.B \-\^h
|
.B \-\^h
|
||||||
Print a help message and exit.
|
Print a help message and exit.
|
||||||
@@ -85,20 +85,20 @@ Progression order. \fBname\fR can be one out of:LRCP, RLCP, RPCL, PCRL, CPRL. De
|
|||||||
.B \-\^q " n"
|
.B \-\^q " n"
|
||||||
different psnr for successive layers
|
different psnr for successive layers
|
||||||
.br
|
.br
|
||||||
.B Note: \fR(options -r and -q cannot be used together)
|
.B Note: \fR(options \-r and \-q cannot be used together)
|
||||||
.TP
|
.TP
|
||||||
.B \-\^r " n"
|
.B \-\^r " n"
|
||||||
different compression ratio(s) for successive layers. The rate specified for each quality level is the desired compression factor.
|
different compression ratio(s) for successive layers. The rate specified for each quality level is the desired compression factor.
|
||||||
.br
|
.br
|
||||||
.B Note: \fR(options -r and -q cannot be used together)
|
.B Note: \fR(options \-r and \-q cannot be used together)
|
||||||
.TP
|
.TP
|
||||||
.B \-\^s " X,Y"
|
.B \-\^s " X,Y"
|
||||||
sub-sampling factor (e.g. -s 2,2). Default: No sub-sampling in x or y direction.
|
sub-sampling factor (e.g. \-s 2,2). Default: No sub-sampling in x or y direction.
|
||||||
.br
|
.br
|
||||||
.B Remark: \fRsub-sampling bigger than 2 can produce errors.
|
.B Remark: \fRsub-sampling bigger than 2 can produce errors.
|
||||||
.TP
|
.TP
|
||||||
.B \-\^t " W,H"
|
.B \-\^t " W,H"
|
||||||
(Size of tile (e.g. -t 512,512) )
|
(Size of tile (e.g. \-t 512,512) )
|
||||||
.TP
|
.TP
|
||||||
.B \-\^x " name"
|
.B \-\^x " name"
|
||||||
(Create index file and fill it. Default: no index file)
|
(Create index file and fill it. Default: no index file)
|
||||||
@@ -132,7 +132,7 @@ ERTERM(16)
|
|||||||
.br
|
.br
|
||||||
SEGMARK(32)
|
SEGMARK(32)
|
||||||
.br
|
.br
|
||||||
Values can be added: RESTART(4) + RESET(2) + SEGMARK(32) = -M 38
|
Values can be added: RESTART(4) + RESET(2) + SEGMARK(32) = \-M 38
|
||||||
.TP
|
.TP
|
||||||
.B \-\^OutFor "ext"
|
.B \-\^OutFor "ext"
|
||||||
(extension for output files)
|
(extension for output files)
|
||||||
@@ -149,7 +149,7 @@ e.g. \fB-ROI c=0,U=25\fR
|
|||||||
(Write SOP marker before each packet. Default: No SOP marker in the codestream.)
|
(Write SOP marker before each packet. Default: No SOP marker in the codestream.)
|
||||||
.TP
|
.TP
|
||||||
.B \-\^T "X,Y"
|
.B \-\^T "X,Y"
|
||||||
(Offset of the origin of the tiles (e.g. -T 100,75) )
|
(Offset of the origin of the tiles (e.g. \-T 100,75) )
|
||||||
.TP
|
.TP
|
||||||
.B \-\^W
|
.B \-\^W
|
||||||
(see JPWL OPTIONS)
|
(see JPWL OPTIONS)
|
||||||
@@ -157,7 +157,7 @@ e.g. \fB-ROI c=0,U=25\fR
|
|||||||
.SH JPWL OPTIONS
|
.SH JPWL OPTIONS
|
||||||
Options usable only if the library has been compiled with \fB-DUSE_JPWL\fR
|
Options usable only if the library has been compiled with \fB-DUSE_JPWL\fR
|
||||||
.P
|
.P
|
||||||
.B -W h<tilepart><=type>, s<tilepart><=method>, a=<addr>, z=<size>, g=<range>, p<tilepart:pack><=type>
|
.B \-W h<tilepart><=type>, s<tilepart><=method>, a=<addr>, z=<size>, g=<range>, p<tilepart:pack><=type>
|
||||||
.P
|
.P
|
||||||
.B h\fR selects the header error protection (EPB): \fBtype\fR can be
|
.B h\fR selects the header error protection (EPB): \fBtype\fR can be
|
||||||
[0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS]
|
[0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS]
|
||||||
@@ -176,7 +176,7 @@ Options usable only if the library has been compiled with \fB-DUSE_JPWL\fR
|
|||||||
(max. 16 specs)
|
(max. 16 specs)
|
||||||
.P
|
.P
|
||||||
.B s \fRenables sensitivity data insertion (ESD): \fBmethod\fR can be
|
.B s \fRenables sensitivity data insertion (ESD): \fBmethod\fR can be
|
||||||
[-1=NO ESD 0=RELATIVE ERROR 1=MSE 2=MSE REDUCTION 3=PSNR
|
[\-1=NO ESD 0=RELATIVE ERROR 1=MSE 2=MSE REDUCTION 3=PSNR
|
||||||
4=PSNR INCREMENT 5=MAXERR 6=TSE 7=RESERVED]
|
4=PSNR INCREMENT 5=MAXERR 6=TSE 7=RESERVED]
|
||||||
if \fBtilepart\fR is absent, it is for main header only
|
if \fBtilepart\fR is absent, it is for main header only
|
||||||
if \fBtilepart\fR is present, it applies from that tile
|
if \fBtilepart\fR is present, it applies from that tile
|
||||||
@@ -194,13 +194,13 @@ Options usable only if the library has been compiled with \fB-DUSE_JPWL\fR
|
|||||||
.P
|
.P
|
||||||
.SH EXAMPLES
|
.SH EXAMPLES
|
||||||
.P
|
.P
|
||||||
.B opj_compress -i \fRfile.bmp \fB-o \fRfile.j2k \fB-r \fR20,10,1 (compress 20x, then 10x, then lossless).
|
.B opj_compress \-i \fRfile.bmp \fB-o \fRfile.j2k \fB-r \fR20,10,1 (compress 20x, then 10x, then lossless).
|
||||||
.P
|
.P
|
||||||
.B opj_compress -i \fRfile.ppm \fB-o \fRfile.j2k \fB-q \fR30,40,50
|
.B opj_compress \-i \fRfile.ppm \fB-o \fRfile.j2k \fB-q \fR30,40,50
|
||||||
.P
|
.P
|
||||||
.B opj_compress -i \fRfile.pgx \fB-o \fRfile.j2k \fB-POC \fRT1=0,0,1,5,3,CPRL
|
.B opj_compress \-i \fRfile.pgx \fB-o \fRfile.j2k \fB-POC \fRT1=0,0,1,5,3,CPRL
|
||||||
.P
|
.P
|
||||||
.B opj_compress -i \fRlena.raw \fB-o \fRlena.j2k \fB-F \fR512,512,3,8,u
|
.B opj_compress \-i \fRlena.raw \fB-o \fRlena.j2k \fB-F \fR512,512,3,8,u
|
||||||
.P
|
.P
|
||||||
.SH AUTHORS
|
.SH AUTHORS
|
||||||
Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
|
Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
.TH opj_decompress 1 "Version 2.1.1" "opj_decompress" "converts jpeg2000 files"
|
.TH opj_decompress 1 "Version 2.1.1" "opj_decompress" "converts jpeg2000 files"
|
||||||
.P
|
.P
|
||||||
.SH NAME
|
.SH NAME
|
||||||
opj_decompress -
|
opj_decompress \-
|
||||||
This program reads in a jpeg2000 image and converts it to another
|
This program reads in a jpeg2000 image and converts it to another
|
||||||
image type. It is part of the OpenJPEG library.
|
image type. It is part of the OpenJPEG library.
|
||||||
.SP
|
.SP
|
||||||
@@ -43,11 +43,11 @@ Valid output image extensions are
|
|||||||
.B .bmp, .pgm, .pgx, .png, .pnm, .ppm, .raw, .tga, .tif \fR. For PNG resp. TIF it needs libpng resp. libtiff .
|
.B .bmp, .pgm, .pgx, .png, .pnm, .ppm, .raw, .tga, .tif \fR. For PNG resp. TIF it needs libpng resp. libtiff .
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.P
|
.P
|
||||||
.B opj_decompress -i \fRinfile.j2k \fB-o \fRoutfile.png
|
.B opj_decompress \-i \fRinfile.j2k \fB-o \fRoutfile.png
|
||||||
.P
|
.P
|
||||||
.B opj_decompress -ImgDir \fRimages/ \fB-OutFor \fRbmp
|
.B opj_decompress \-ImgDir \fRimages/ \fB-OutFor \fRbmp
|
||||||
.P
|
.P
|
||||||
.B opj_decompress -h \fRPrint help message and exit
|
.B opj_decompress \-h \fRPrint help message and exit
|
||||||
.P
|
.P
|
||||||
.R See JPWL OPTIONS for special options
|
.R See JPWL OPTIONS for special options
|
||||||
.SH OPTIONS
|
.SH OPTIONS
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
.TH opj_dump 1 "Version 2.1.1" "opj_dump" "dumps jpeg2000 files"
|
.TH opj_dump 1 "Version 2.1.1" "opj_dump" "dumps jpeg2000 files"
|
||||||
.P
|
.P
|
||||||
.SH NAME
|
.SH NAME
|
||||||
opj_dump -
|
opj_dump \-
|
||||||
This program reads in a jpeg2000 image and dumps the contents to stdout. It is part of the OpenJPEG library.
|
This program reads in a jpeg2000 image and dumps the contents to stdout. It is part of the OpenJPEG library.
|
||||||
.SP
|
.SP
|
||||||
Valid input image extensions are
|
Valid input image extensions are
|
||||||
@@ -40,11 +40,11 @@ Valid input image extensions are
|
|||||||
.SP
|
.SP
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.P
|
.P
|
||||||
.B opj_dump -i \fRinfile.j2k
|
.B opj_dump \-i \fRinfile.j2k
|
||||||
.P
|
.P
|
||||||
.B opj_dump -ImgDir \fRimages/ \fRDump all files in images/
|
.B opj_dump \-ImgDir \fRimages/ \fRDump all files in images/
|
||||||
.P
|
.P
|
||||||
.B opj_dump -h \fRPrint help message and exit
|
.B opj_dump \-h \fRPrint help message and exit
|
||||||
.P
|
.P
|
||||||
.SH OPTIONS
|
.SH OPTIONS
|
||||||
.TP
|
.TP
|
||||||
|
|||||||
@@ -1327,6 +1327,8 @@ struct pnm_header
|
|||||||
};
|
};
|
||||||
|
|
||||||
static char *skip_white(char *s)
|
static char *skip_white(char *s)
|
||||||
|
{
|
||||||
|
if (s != NULL)
|
||||||
{
|
{
|
||||||
while(*s)
|
while(*s)
|
||||||
{
|
{
|
||||||
@@ -1334,6 +1336,7 @@ static char *skip_white(char *s)
|
|||||||
if(isspace(*s)) { ++s; continue; }
|
if(isspace(*s)) { ++s; continue; }
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1377,7 +1380,7 @@ static char *skip_idf(char *start, char out_idf[256])
|
|||||||
|
|
||||||
static void read_pnm_header(FILE *reader, struct pnm_header *ph)
|
static void read_pnm_header(FILE *reader, struct pnm_header *ph)
|
||||||
{
|
{
|
||||||
int format, have_wh, end, ttype;
|
int format, end, ttype;
|
||||||
char idf[256], type[256];
|
char idf[256], type[256];
|
||||||
char line[256];
|
char line[256];
|
||||||
|
|
||||||
@@ -1398,11 +1401,12 @@ static void read_pnm_header(FILE *reader, struct pnm_header *ph)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ph->format = format;
|
ph->format = format;
|
||||||
ttype = end = have_wh = 0;
|
ttype = end = 0;
|
||||||
|
|
||||||
while(fgets(line, 250, reader))
|
while(fgets(line, 250, reader))
|
||||||
{
|
{
|
||||||
char *s;
|
char *s;
|
||||||
|
int allow_null = 0;
|
||||||
|
|
||||||
if(*line == '#') continue;
|
if(*line == '#') continue;
|
||||||
|
|
||||||
@@ -1478,36 +1482,25 @@ static void read_pnm_header(FILE *reader, struct pnm_header *ph)
|
|||||||
return;
|
return;
|
||||||
} /* if(format == 7) */
|
} /* if(format == 7) */
|
||||||
|
|
||||||
if( !have_wh)
|
/* Here format is in range [1,6] */
|
||||||
{
|
if (ph->width == 0) {
|
||||||
s = skip_int(s, &ph->width);
|
s = skip_int(s, &ph->width);
|
||||||
|
if ((s == NULL) || (*s == 0) || (ph->width < 1)) return;
|
||||||
s = skip_int(s, &ph->height);
|
allow_null = 1;
|
||||||
|
|
||||||
have_wh = 1;
|
|
||||||
|
|
||||||
if(format == 1 || format == 4) break;
|
|
||||||
|
|
||||||
if(format == 2 || format == 3 || format == 5 || format == 6)
|
|
||||||
{
|
|
||||||
if (skip_int(s, &ph->maxval) != NULL) {
|
|
||||||
if(ph->maxval > 65535) {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
else {
|
if (ph->height == 0) {
|
||||||
|
s = skip_int(s, &ph->height);
|
||||||
|
if ((s == NULL) && allow_null) continue;
|
||||||
|
if ((s == NULL) || (*s == 0) || (ph->height < 1)) return;
|
||||||
|
if(format == 1 || format == 4) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
allow_null = 1;
|
||||||
}
|
}
|
||||||
}
|
/* here, format is in P2, P3, P5, P6 */
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if(format == 2 || format == 3 || format == 5 || format == 6)
|
|
||||||
{
|
|
||||||
/* P2, P3, P5, P6: */
|
|
||||||
s = skip_int(s, &ph->maxval);
|
s = skip_int(s, &ph->maxval);
|
||||||
|
if ((s == NULL) && allow_null) continue;
|
||||||
if(ph->maxval > 65535) return;
|
if ((s == NULL) || (*s == 0)) return;
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}/* while(fgets( ) */
|
}/* while(fgets( ) */
|
||||||
if(format == 2 || format == 3 || format > 4)
|
if(format == 2 || format == 3 || format > 4)
|
||||||
@@ -1524,18 +1517,14 @@ static void read_pnm_header(FILE *reader, struct pnm_header *ph)
|
|||||||
}
|
}
|
||||||
if(ph->depth < 1 || ph->depth > 4) return;
|
if(ph->depth < 1 || ph->depth > 4) return;
|
||||||
|
|
||||||
if(ph->width && ph->height && ph->depth && ph->maxval && ttype)
|
if (ttype)
|
||||||
ph->ok = 1;
|
ph->ok = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(format != 1 && format != 4)
|
ph->ok = 1;
|
||||||
|
if(format == 1 || format == 4)
|
||||||
{
|
{
|
||||||
if(ph->width && ph->height && ph->maxval) ph->ok = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if(ph->width && ph->height) ph->ok = 1;
|
|
||||||
ph->maxval = 255;
|
ph->maxval = 255;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -675,10 +675,28 @@ opj_image_t* bmptoimage(const char *filename, opj_cparameters_t *parameters)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Info_h.biWidth == 0 || Info_h.biHeight == 0) {
|
||||||
|
fclose(IN);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Info_h.biBitCount > (((OPJ_UINT32)-1) - 31) / Info_h.biWidth) {
|
||||||
|
fclose(IN);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
stride = ((Info_h.biWidth * Info_h.biBitCount + 31U) / 32U) * 4U; /* rows are aligned on 32bits */
|
stride = ((Info_h.biWidth * Info_h.biBitCount + 31U) / 32U) * 4U; /* rows are aligned on 32bits */
|
||||||
if (Info_h.biBitCount == 4 && Info_h.biCompression == 2) { /* RLE 4 gets decoded as 8 bits data for now... */
|
if (Info_h.biBitCount == 4 && Info_h.biCompression == 2) { /* RLE 4 gets decoded as 8 bits data for now... */
|
||||||
|
if (8 > (((OPJ_UINT32)-1) - 31) / Info_h.biWidth) {
|
||||||
|
fclose(IN);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
stride = ((Info_h.biWidth * 8U + 31U) / 32U) * 4U;
|
stride = ((Info_h.biWidth * 8U + 31U) / 32U) * 4U;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (stride > ((OPJ_UINT32)-1) / sizeof(OPJ_UINT8) / Info_h.biHeight) {
|
||||||
|
fclose(IN);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
pData = (OPJ_UINT8 *) calloc(1, stride * Info_h.biHeight * sizeof(OPJ_UINT8));
|
pData = (OPJ_UINT8 *) calloc(1, stride * Info_h.biHeight * sizeof(OPJ_UINT8));
|
||||||
if (pData == NULL) {
|
if (pData == NULL) {
|
||||||
fclose(IN);
|
fclose(IN);
|
||||||
|
|||||||
@@ -236,7 +236,7 @@ static void encode_help_display(void) {
|
|||||||
fprintf(stdout,"-I\n");
|
fprintf(stdout,"-I\n");
|
||||||
fprintf(stdout," Use the irreversible DWT 9-7.\n");
|
fprintf(stdout," Use the irreversible DWT 9-7.\n");
|
||||||
fprintf(stdout,"-mct <0|1|2>\n");
|
fprintf(stdout,"-mct <0|1|2>\n");
|
||||||
fprintf(stdout," Explicitely specifies if a Multiple Component Transform has to be used.\n");
|
fprintf(stdout," Explicitly specifies if a Multiple Component Transform has to be used.\n");
|
||||||
fprintf(stdout," 0: no MCT ; 1: RGB->YCC conversion ; 2: custom MCT.\n");
|
fprintf(stdout," 0: no MCT ; 1: RGB->YCC conversion ; 2: custom MCT.\n");
|
||||||
fprintf(stdout," If custom MCT, \"-m\" option has to be used (see hereunder).\n");
|
fprintf(stdout," If custom MCT, \"-m\" option has to be used (see hereunder).\n");
|
||||||
fprintf(stdout," By default, RGB->YCC conversion is used if there are 3 components or more,\n");
|
fprintf(stdout," By default, RGB->YCC conversion is used if there are 3 components or more,\n");
|
||||||
@@ -1029,7 +1029,7 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
fprintf(stdout,"CINEMA 2K profile activated\n"
|
fprintf(stdout,"CINEMA 2K profile activated\n"
|
||||||
"Other options specified could be overriden\n");
|
"Other options specified could be overridden\n");
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -1040,7 +1040,7 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
|
|||||||
{
|
{
|
||||||
parameters->rsiz = OPJ_PROFILE_CINEMA_4K;
|
parameters->rsiz = OPJ_PROFILE_CINEMA_4K;
|
||||||
fprintf(stdout,"CINEMA 4K profile activated\n"
|
fprintf(stdout,"CINEMA 4K profile activated\n"
|
||||||
"Other options specified could be overriden\n");
|
"Other options specified could be overridden\n");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ install( FILES ${CMAKE_CURRENT_BINARY_DIR}/opj_config.h
|
|||||||
DESTINATION ${OPENJPEG_INSTALL_INCLUDE_DIR} COMPONENT Headers)
|
DESTINATION ${OPENJPEG_INSTALL_INCLUDE_DIR} COMPONENT Headers)
|
||||||
|
|
||||||
include_directories(
|
include_directories(
|
||||||
${OPENJPEG_BINARY_DIR}/src/lib/openjp2 # opj_config.h and opj_config_private.h
|
${${OPENJPEG_NAMESPACE}_BINARY_DIR}/src/lib/openjp2 # opj_config.h and opj_config_private.h
|
||||||
)
|
)
|
||||||
# Defines the source code for the library
|
# Defines the source code for the library
|
||||||
set(OPENJPEG_SRCS
|
set(OPENJPEG_SRCS
|
||||||
@@ -110,12 +110,14 @@ install(
|
|||||||
DESTINATION ${OPENJPEG_INSTALL_MAN_DIR}/man3)
|
DESTINATION ${OPENJPEG_INSTALL_MAN_DIR}/man3)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# internal utilities to generate t1_luts.h (part of the jp2 lib)
|
if(BUILD_LUTS_GENERATOR)
|
||||||
|
# internal utility to generate t1_luts.h (part of the jp2 lib)
|
||||||
# no need to install:
|
# no need to install:
|
||||||
add_executable(t1_generate_luts t1_generate_luts.c)
|
add_executable(t1_generate_luts t1_generate_luts.c)
|
||||||
if(UNIX)
|
if(UNIX)
|
||||||
target_link_libraries(t1_generate_luts m)
|
target_link_libraries(t1_generate_luts m)
|
||||||
endif()
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
# Experimental option; let's how cppcheck performs
|
# Experimental option; let's how cppcheck performs
|
||||||
# Implementation details:
|
# Implementation details:
|
||||||
|
|||||||
@@ -395,7 +395,7 @@ static INLINE OPJ_BOOL opj_dwt_encode_procedure(opj_tcd_tilecomp_t * tilec,void
|
|||||||
|
|
||||||
OPJ_INT32 rw; /* width of the resolution level computed */
|
OPJ_INT32 rw; /* width of the resolution level computed */
|
||||||
OPJ_INT32 rh; /* height of the resolution level computed */
|
OPJ_INT32 rh; /* height of the resolution level computed */
|
||||||
OPJ_UINT32 l_data_size;
|
size_t l_data_size;
|
||||||
|
|
||||||
opj_tcd_resolution_t * l_cur_res = 0;
|
opj_tcd_resolution_t * l_cur_res = 0;
|
||||||
opj_tcd_resolution_t * l_last_res = 0;
|
opj_tcd_resolution_t * l_last_res = 0;
|
||||||
@@ -407,11 +407,20 @@ static INLINE OPJ_BOOL opj_dwt_encode_procedure(opj_tcd_tilecomp_t * tilec,void
|
|||||||
l_cur_res = tilec->resolutions + l;
|
l_cur_res = tilec->resolutions + l;
|
||||||
l_last_res = l_cur_res - 1;
|
l_last_res = l_cur_res - 1;
|
||||||
|
|
||||||
l_data_size = opj_dwt_max_resolution( tilec->resolutions,tilec->numresolutions) * (OPJ_UINT32)sizeof(OPJ_INT32);
|
l_data_size = opj_dwt_max_resolution(tilec->resolutions, tilec->numresolutions);
|
||||||
bj = (OPJ_INT32*)opj_malloc((size_t)l_data_size);
|
|
||||||
|
/* overflow check */
|
||||||
|
if (l_data_size > (SIZE_MAX / sizeof(OPJ_INT32))) {
|
||||||
|
/* FIXME event manager error callback */
|
||||||
|
return OPJ_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
l_data_size *= sizeof(OPJ_INT32);
|
||||||
|
bj = (OPJ_INT32*)opj_malloc(l_data_size);
|
||||||
/* l_data_size is equal to 0 when numresolutions == 1 but bj is not used */
|
/* l_data_size is equal to 0 when numresolutions == 1 but bj is not used */
|
||||||
/* in that case, so do not error out */
|
/* in that case, so do not error out */
|
||||||
if (l_data_size != 0 && ! bj) {
|
if (l_data_size != 0 && ! bj) {
|
||||||
|
/* FIXME event manager error callback */
|
||||||
return OPJ_FALSE;
|
return OPJ_FALSE;
|
||||||
}
|
}
|
||||||
i = l;
|
i = l;
|
||||||
@@ -570,10 +579,22 @@ static OPJ_BOOL opj_dwt_decode_tile(opj_tcd_tilecomp_t* tilec, OPJ_UINT32 numres
|
|||||||
|
|
||||||
OPJ_UINT32 w = (OPJ_UINT32)(tilec->x1 - tilec->x0);
|
OPJ_UINT32 w = (OPJ_UINT32)(tilec->x1 - tilec->x0);
|
||||||
|
|
||||||
|
size_t mr; /* max resolution */
|
||||||
|
|
||||||
if (numres == 1U) {
|
if (numres == 1U) {
|
||||||
return OPJ_TRUE;
|
return OPJ_TRUE;
|
||||||
}
|
}
|
||||||
h.mem = (OPJ_INT32*)opj_aligned_malloc(opj_dwt_max_resolution(tr, numres) * sizeof(OPJ_INT32));
|
|
||||||
|
mr = opj_dwt_max_resolution(tr, numres);
|
||||||
|
|
||||||
|
/* overflow check */
|
||||||
|
if (mr > (SIZE_MAX / sizeof(OPJ_INT32))) {
|
||||||
|
/* FIXME event manager error callback */
|
||||||
|
return OPJ_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
mr *= sizeof(OPJ_INT32);
|
||||||
|
h.mem = (OPJ_INT32*)opj_aligned_malloc(mr);
|
||||||
if (! h.mem){
|
if (! h.mem){
|
||||||
/* FIXME event manager error callback */
|
/* FIXME event manager error callback */
|
||||||
return OPJ_FALSE;
|
return OPJ_FALSE;
|
||||||
@@ -846,7 +867,24 @@ OPJ_BOOL opj_dwt_decode_real(opj_tcd_tilecomp_t* OPJ_RESTRICT tilec, OPJ_UINT32
|
|||||||
|
|
||||||
OPJ_UINT32 w = (OPJ_UINT32)(tilec->x1 - tilec->x0);
|
OPJ_UINT32 w = (OPJ_UINT32)(tilec->x1 - tilec->x0);
|
||||||
|
|
||||||
h.wavelet = (opj_v4_t*) opj_aligned_malloc((opj_dwt_max_resolution(res, numres)+5) * sizeof(opj_v4_t));
|
size_t mr; /* max resolution */
|
||||||
|
|
||||||
|
mr = opj_dwt_max_resolution(res, numres);
|
||||||
|
|
||||||
|
/* overflow check */
|
||||||
|
if (mr > (0xFFFFFFFFU /* UINT32_MAX */ - 5U)) {
|
||||||
|
/* FIXME event manager error callback */
|
||||||
|
return OPJ_FALSE;
|
||||||
|
}
|
||||||
|
mr += 5U;
|
||||||
|
|
||||||
|
if (mr > (SIZE_MAX / sizeof(opj_v4_t))) {
|
||||||
|
/* FIXME event manager error callback */
|
||||||
|
return OPJ_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
mr *= sizeof(opj_v4_t);
|
||||||
|
h.wavelet = (opj_v4_t*) opj_aligned_malloc(mr);
|
||||||
if (!h.wavelet) {
|
if (!h.wavelet) {
|
||||||
/* FIXME event manager error callback */
|
/* FIXME event manager error callback */
|
||||||
return OPJ_FALSE;
|
return OPJ_FALSE;
|
||||||
|
|||||||
@@ -1238,14 +1238,14 @@ opj_pi_iterator_t *opj_pi_create_decode(opj_image_t *p_image,
|
|||||||
|
|
||||||
/* memory allocation for include */
|
/* memory allocation for include */
|
||||||
/* prevent an integer overflow issue */
|
/* prevent an integer overflow issue */
|
||||||
|
/* 0 < l_tcp->numlayers < 65536 c.f. opj_j2k_read_cod in j2k.c */
|
||||||
l_current_pi->include = 00;
|
l_current_pi->include = 00;
|
||||||
if (l_step_l <= (SIZE_MAX / (l_tcp->numlayers + 1U)))
|
if (l_step_l <= (SIZE_MAX / (l_tcp->numlayers + 1U)))
|
||||||
{
|
{
|
||||||
l_current_pi->include = (OPJ_INT16*) opj_calloc((size_t)(l_tcp->numlayers + 1U) * l_step_l, sizeof(OPJ_INT16));
|
l_current_pi->include = (OPJ_INT16*) opj_calloc((size_t)(l_tcp->numlayers + 1U) * l_step_l, sizeof(OPJ_INT16));
|
||||||
}
|
}
|
||||||
|
|
||||||
if
|
if (!l_current_pi->include)
|
||||||
(!l_current_pi->include)
|
|
||||||
{
|
{
|
||||||
opj_free(l_tmp_data);
|
opj_free(l_tmp_data);
|
||||||
opj_free(l_tmp_ptr);
|
opj_free(l_tmp_ptr);
|
||||||
|
|||||||
@@ -1166,36 +1166,66 @@ static OPJ_BOOL opj_t1_allocate_buffers(
|
|||||||
OPJ_UINT32 w,
|
OPJ_UINT32 w,
|
||||||
OPJ_UINT32 h)
|
OPJ_UINT32 h)
|
||||||
{
|
{
|
||||||
OPJ_UINT32 datasize=w * h;
|
size_t flagssize;
|
||||||
OPJ_UINT32 flagssize;
|
|
||||||
|
|
||||||
/* encoder uses tile buffer, so no need to allocate */
|
/* encoder uses tile buffer, so no need to allocate */
|
||||||
if (!t1->encoder) {
|
if (!t1->encoder) {
|
||||||
if(datasize > t1->datasize){
|
size_t datasize;
|
||||||
|
|
||||||
|
/* Overflow check */
|
||||||
|
if ((w > 0U) && (h > (0xFFFFFFFFU /* UINT32_MAX */ / w))) {
|
||||||
|
/* FIXME event manager error callback */
|
||||||
|
return OPJ_FALSE;
|
||||||
|
}
|
||||||
|
datasize = (size_t) w * h;
|
||||||
|
|
||||||
|
/* Overflow check */
|
||||||
|
if (datasize > (SIZE_MAX / sizeof(OPJ_INT32))) {
|
||||||
|
/* FIXME event manager error callback */
|
||||||
|
return OPJ_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(datasize > (size_t) t1->datasize){
|
||||||
opj_aligned_free(t1->data);
|
opj_aligned_free(t1->data);
|
||||||
t1->data = (OPJ_INT32*) opj_aligned_malloc(datasize * sizeof(OPJ_INT32));
|
t1->data = (OPJ_INT32*) opj_aligned_malloc(datasize * sizeof(OPJ_INT32));
|
||||||
if(!t1->data){
|
if(!t1->data){
|
||||||
/* FIXME event manager error callback */
|
/* FIXME event manager error callback */
|
||||||
return OPJ_FALSE;
|
return OPJ_FALSE;
|
||||||
}
|
}
|
||||||
t1->datasize=datasize;
|
t1->datasize = (OPJ_UINT32) datasize;
|
||||||
}
|
}
|
||||||
/* memset first arg is declared to never be null by gcc */
|
/* memset first arg is declared to never be null by gcc */
|
||||||
if (t1->data != NULL) {
|
if (t1->data != NULL) {
|
||||||
memset(t1->data, 0, datasize * sizeof(OPJ_INT32));
|
memset(t1->data, 0, datasize * sizeof(OPJ_INT32));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
t1->flags_stride=w+2;
|
|
||||||
flagssize=t1->flags_stride * (h+2);
|
|
||||||
|
|
||||||
if(flagssize > t1->flagssize){
|
if ((w > (0xFFFFFFFFU /* UINT32_MAX */ - 2U)) || (h > (0xFFFFFFFFU /* UINT32_MAX */ - 2U))) {
|
||||||
|
/* FIXME event manager error callback */
|
||||||
|
return OPJ_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
t1->flags_stride = w + 2U; /* can't be 0U */
|
||||||
|
if ((h + 2U) > (0xFFFFFFFFU /* UINT32_MAX */ / t1->flags_stride)) {
|
||||||
|
/* FIXME event manager error callback */
|
||||||
|
return OPJ_FALSE;
|
||||||
|
}
|
||||||
|
flagssize = (size_t) t1->flags_stride * (h + 2U);
|
||||||
|
|
||||||
|
/* Overflow check */
|
||||||
|
if (flagssize > (SIZE_MAX / sizeof(opj_flag_t))) {
|
||||||
|
/* FIXME event manager error callback */
|
||||||
|
return OPJ_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(flagssize > (size_t) t1->flagssize){
|
||||||
opj_aligned_free(t1->flags);
|
opj_aligned_free(t1->flags);
|
||||||
t1->flags = (opj_flag_t*) opj_aligned_malloc(flagssize * sizeof(opj_flag_t));
|
t1->flags = (opj_flag_t*) opj_aligned_malloc(flagssize * sizeof(opj_flag_t));
|
||||||
if(!t1->flags){
|
if(!t1->flags){
|
||||||
/* FIXME event manager error callback */
|
/* FIXME event manager error callback */
|
||||||
return OPJ_FALSE;
|
return OPJ_FALSE;
|
||||||
}
|
}
|
||||||
t1->flagssize=flagssize;
|
t1->flagssize = (OPJ_UINT32) flagssize;
|
||||||
}
|
}
|
||||||
memset(t1->flags, 0, flagssize * sizeof(opj_flag_t));
|
memset(t1->flags, 0, flagssize * sizeof(opj_flag_t));
|
||||||
|
|
||||||
|
|||||||
@@ -117,6 +117,7 @@ CODmarker_param_t get_CODmkrdata_from_j2kstream( Byte_t *CODstream)
|
|||||||
|
|
||||||
if( *CODstream++ != 0xff || *CODstream++ != 0x52){
|
if( *CODstream++ != 0xff || *CODstream++ != 0x52){
|
||||||
fprintf( FCGI_stderr, "Error, COD marker not found in the reconstructed j2kstream\n");
|
fprintf( FCGI_stderr, "Error, COD marker not found in the reconstructed j2kstream\n");
|
||||||
|
memset(&COD, 0, sizeof(COD));
|
||||||
return COD;
|
return COD;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -438,7 +438,7 @@ void enqueue_allprecincts( int tile_id, int level, int lastcomp, OPJ_BOOL *comps
|
|||||||
OPJ_BOOL enqueue_metabins( query_param_t query_param, metadatalist_param_t *metadatalist, msgqueue_param_t *msgqueue)
|
OPJ_BOOL enqueue_metabins( query_param_t query_param, metadatalist_param_t *metadatalist, msgqueue_param_t *msgqueue)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for( i=0; query_param.box_type[i][0]!=0 && i<MAX_NUMOFBOX; i++){
|
for( i=0; i<MAX_NUMOFBOX && query_param.box_type[i][0]!=0; i++){
|
||||||
if( query_param.box_type[i][0] == '*'){
|
if( query_param.box_type[i][0] == '*'){
|
||||||
fprintf( FCGI_stdout, "Status: 501\r\n");
|
fprintf( FCGI_stdout, "Status: 501\r\n");
|
||||||
fprintf( FCGI_stdout, "Reason: metareq with all box-property * not implemented\r\n");
|
fprintf( FCGI_stdout, "Reason: metareq with all box-property * not implemented\r\n");
|
||||||
|
|||||||
@@ -264,7 +264,7 @@ void print_queryparam( query_param_t query_param)
|
|||||||
}
|
}
|
||||||
|
|
||||||
fprintf( logstream, "\t req-box-prop\n");
|
fprintf( logstream, "\t req-box-prop\n");
|
||||||
for( i=0; query_param.box_type[i][0]!=0 && i<MAX_NUMOFBOX; i++){
|
for( i=0; i<MAX_NUMOFBOX && query_param.box_type[i][0]!=0; i++){
|
||||||
fprintf( logstream, "\t\t box_type: %.4s limit: %d w:%d s:%d g:%d a:%d priority:%d\n", query_param.box_type[i], query_param.limit[i], query_param.w[i], query_param.s[i], query_param.g[i], query_param.a[i], query_param.priority[i]);
|
fprintf( logstream, "\t\t box_type: %.4s limit: %d w:%d s:%d g:%d a:%d priority:%d\n", query_param.box_type[i], query_param.limit[i], query_param.w[i], query_param.s[i], query_param.g[i], query_param.a[i], query_param.priority[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ set(BLACKLIST_JPEG2000_TMP
|
|||||||
issue427-null-image-size.jp2
|
issue427-null-image-size.jp2
|
||||||
issue427-illegal-tile-offset.jp2
|
issue427-illegal-tile-offset.jp2
|
||||||
issue495.jp2
|
issue495.jp2
|
||||||
|
issue820.jp2
|
||||||
)
|
)
|
||||||
|
|
||||||
# Define a list of file which should be gracefully rejected:
|
# Define a list of file which should be gracefully rejected:
|
||||||
|
|||||||
@@ -146,6 +146,8 @@ opj_compress -i @INPUT_NR_PATH@/flower-minisblack-11.tif -o @TEMP_PATH@/flower-m
|
|||||||
opj_compress -i @INPUT_NR_PATH@/flower-minisblack-13.tif -o @TEMP_PATH@/flower-minisblack-13.tif.jp2
|
opj_compress -i @INPUT_NR_PATH@/flower-minisblack-13.tif -o @TEMP_PATH@/flower-minisblack-13.tif.jp2
|
||||||
opj_compress -i @INPUT_NR_PATH@/flower-minisblack-15.tif -o @TEMP_PATH@/flower-minisblack-15.tif.jp2
|
opj_compress -i @INPUT_NR_PATH@/flower-minisblack-15.tif -o @TEMP_PATH@/flower-minisblack-15.tif.jp2
|
||||||
|
|
||||||
|
# issue 843 Crash with invalid ppm file
|
||||||
|
!opj_compress -i @INPUT_NR_PATH@/issue843.ppm -o @TEMP_PATH@/issue843.ppm.jp2
|
||||||
|
|
||||||
# DECODER TEST SUITE
|
# DECODER TEST SUITE
|
||||||
opj_decompress -i @INPUT_NR_PATH@/Bretagne2.j2k -o @TEMP_PATH@/Bretagne2.j2k.pgx
|
opj_decompress -i @INPUT_NR_PATH@/Bretagne2.j2k -o @TEMP_PATH@/Bretagne2.j2k.pgx
|
||||||
@@ -566,6 +568,9 @@ opj_decompress -i @INPUT_NR_PATH@/issue726.j2k -o @TEMP_PATH@/issue726.png
|
|||||||
!opj_decompress -i @INPUT_NR_PATH@/issue775-2.j2k -o @TEMP_PATH@/issue775-2.png
|
!opj_decompress -i @INPUT_NR_PATH@/issue775-2.j2k -o @TEMP_PATH@/issue775-2.png
|
||||||
# issue 818
|
# issue 818
|
||||||
opj_decompress -i @INPUT_NR_PATH@/issue818.jp2 -o @TEMP_PATH@/issue818.png
|
opj_decompress -i @INPUT_NR_PATH@/issue818.jp2 -o @TEMP_PATH@/issue818.png
|
||||||
# issue 823 (yes, not a typo, test image is issue822)
|
# issue 823
|
||||||
!opj_decompress -i @INPUT_NR_PATH@/issue822.jp2 -o @TEMP_PATH@/issue822.png
|
!opj_decompress -i @INPUT_NR_PATH@/issue823.jp2 -o @TEMP_PATH@/issue823.png
|
||||||
|
# issue 826
|
||||||
|
!opj_decompress -i @INPUT_NR_PATH@/issue826.jp2 -o @TEMP_PATH@/issue826.png
|
||||||
|
# issue 820
|
||||||
|
!opj_decompress -i @INPUT_NR_PATH@/issue820.jp2 -o @TEMP_PATH@/issue820.png
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ int main (int argc, char *argv[])
|
|||||||
int da_y0=0;
|
int da_y0=0;
|
||||||
int da_x1=1000;
|
int da_x1=1000;
|
||||||
int da_y1=1000;
|
int da_y1=1000;
|
||||||
char input_file[64];
|
const char *input_file;
|
||||||
|
|
||||||
/* should be test_tile_decoder 0 0 1000 1000 tte1.j2k */
|
/* should be test_tile_decoder 0 0 1000 1000 tte1.j2k */
|
||||||
if( argc == 6 )
|
if( argc == 6 )
|
||||||
@@ -187,7 +187,7 @@ int main (int argc, char *argv[])
|
|||||||
da_y0=atoi(argv[2]);
|
da_y0=atoi(argv[2]);
|
||||||
da_x1=atoi(argv[3]);
|
da_x1=atoi(argv[3]);
|
||||||
da_y1=atoi(argv[4]);
|
da_y1=atoi(argv[4]);
|
||||||
strcpy(input_file,argv[5]);
|
input_file = argv[5];
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -196,7 +196,7 @@ int main (int argc, char *argv[])
|
|||||||
da_y0=0;
|
da_y0=0;
|
||||||
da_x1=1000;
|
da_x1=1000;
|
||||||
da_y1=1000;
|
da_y1=1000;
|
||||||
strcpy(input_file,"test.j2k");
|
input_file = "test.j2k";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! l_data) {
|
if (! l_data) {
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ int main (int argc, char *argv[])
|
|||||||
opj_stream_t * l_stream;
|
opj_stream_t * l_stream;
|
||||||
OPJ_UINT32 l_nb_tiles;
|
OPJ_UINT32 l_nb_tiles;
|
||||||
OPJ_UINT32 l_data_size;
|
OPJ_UINT32 l_data_size;
|
||||||
unsigned char len;
|
size_t len;
|
||||||
|
|
||||||
#ifdef USING_MCT
|
#ifdef USING_MCT
|
||||||
const OPJ_FLOAT32 l_mct [] =
|
const OPJ_FLOAT32 l_mct [] =
|
||||||
@@ -96,7 +96,7 @@ int main (int argc, char *argv[])
|
|||||||
int tile_height;
|
int tile_height;
|
||||||
int comp_prec;
|
int comp_prec;
|
||||||
int irreversible;
|
int irreversible;
|
||||||
char output_file[64];
|
const char *output_file;
|
||||||
|
|
||||||
/* should be test_tile_encoder 3 2000 2000 1000 1000 8 tte1.j2k */
|
/* should be test_tile_encoder 3 2000 2000 1000 1000 8 tte1.j2k */
|
||||||
if( argc == 9 )
|
if( argc == 9 )
|
||||||
@@ -108,7 +108,7 @@ int main (int argc, char *argv[])
|
|||||||
tile_height = atoi( argv[5] );
|
tile_height = atoi( argv[5] );
|
||||||
comp_prec = atoi( argv[6] );
|
comp_prec = atoi( argv[6] );
|
||||||
irreversible = atoi( argv[7] );
|
irreversible = atoi( argv[7] );
|
||||||
strcpy(output_file, argv[8] );
|
output_file = argv[8];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -119,7 +119,7 @@ int main (int argc, char *argv[])
|
|||||||
tile_height = 1000;
|
tile_height = 1000;
|
||||||
comp_prec = 8;
|
comp_prec = 8;
|
||||||
irreversible = 1;
|
irreversible = 1;
|
||||||
strcpy(output_file, "test.j2k" );
|
output_file = "test.j2k";
|
||||||
}
|
}
|
||||||
if( num_comps > NUM_COMPS_MAX )
|
if( num_comps > NUM_COMPS_MAX )
|
||||||
{
|
{
|
||||||
@@ -228,7 +228,7 @@ int main (int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* should we do j2k or jp2 ?*/
|
/* should we do j2k or jp2 ?*/
|
||||||
len = (unsigned char)strlen( output_file );
|
len = strlen( output_file );
|
||||||
if( strcmp( output_file + len - 4, ".jp2" ) == 0 )
|
if( strcmp( output_file + len - 4, ".jp2" ) == 0 )
|
||||||
{
|
{
|
||||||
l_codec = opj_create_compress(OPJ_CODEC_JP2);
|
l_codec = opj_create_compress(OPJ_CODEC_JP2);
|
||||||
|
|||||||
6
thirdparty/liblcms2/include/lcms2.h
vendored
6
thirdparty/liblcms2/include/lcms2.h
vendored
@@ -23,7 +23,7 @@
|
|||||||
//
|
//
|
||||||
//---------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// Version 2.8
|
// Version 2.8beta0
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef _lcms2_H
|
#ifndef _lcms2_H
|
||||||
@@ -656,7 +656,7 @@ typedef void* cmsHTRANSFORM;
|
|||||||
// T: Pixeltype
|
// T: Pixeltype
|
||||||
// F: Flavor 0=MinIsBlack(Chocolate) 1=MinIsWhite(Vanilla)
|
// F: Flavor 0=MinIsBlack(Chocolate) 1=MinIsWhite(Vanilla)
|
||||||
// P: Planar? 0=Chunky, 1=Planar
|
// P: Planar? 0=Chunky, 1=Planar
|
||||||
// X: swap 16 bps endianness?
|
// X: swap 16 bps endianess?
|
||||||
// S: Do swap? ie, BGR, KYMC
|
// S: Do swap? ie, BGR, KYMC
|
||||||
// E: Extra samples
|
// E: Extra samples
|
||||||
// C: Channels (Samples per pixel)
|
// C: Channels (Samples per pixel)
|
||||||
@@ -1016,7 +1016,7 @@ CMSAPI long int CMSEXPORT cmsfilelength(FILE* f);
|
|||||||
// Context handling --------------------------------------------------------------------------------------------------------
|
// Context handling --------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
// Each context holds its owns globals and its own plug-ins. There is a global context with the id = 0 for lecacy compatibility
|
// Each context holds its owns globals and its own plug-ins. There is a global context with the id = 0 for lecacy compatibility
|
||||||
// though using the global context is not recommended. Proper context handling makes lcms more thread-safe.
|
// though using the global context is not recomended. Proper context handling makes lcms more thread-safe.
|
||||||
|
|
||||||
typedef struct _cmsContext_struct* cmsContext;
|
typedef struct _cmsContext_struct* cmsContext;
|
||||||
|
|
||||||
|
|||||||
2
thirdparty/liblcms2/include/lcms2_plugin.h
vendored
2
thirdparty/liblcms2/include/lcms2_plugin.h
vendored
@@ -128,7 +128,7 @@ struct _cms_io_handler {
|
|||||||
const void* Buffer);
|
const void* Buffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Endianness adjust functions
|
// Endianess adjust functions
|
||||||
CMSAPI cmsUInt16Number CMSEXPORT _cmsAdjustEndianess16(cmsUInt16Number Word);
|
CMSAPI cmsUInt16Number CMSEXPORT _cmsAdjustEndianess16(cmsUInt16Number Word);
|
||||||
CMSAPI cmsUInt32Number CMSEXPORT _cmsAdjustEndianess32(cmsUInt32Number Value);
|
CMSAPI cmsUInt32Number CMSEXPORT _cmsAdjustEndianess32(cmsUInt32Number Value);
|
||||||
CMSAPI void CMSEXPORT _cmsAdjustEndianess64(cmsUInt64Number* Result, cmsUInt64Number* QWord);
|
CMSAPI void CMSEXPORT _cmsAdjustEndianess64(cmsUInt64Number* Result, cmsUInt64Number* QWord);
|
||||||
|
|||||||
49
thirdparty/liblcms2/src/cmsalpha.c
vendored
49
thirdparty/liblcms2/src/cmsalpha.c
vendored
@@ -413,12 +413,17 @@ void _cmsHandleExtraChannels(_cmsTRANSFORM* p, const void* in,
|
|||||||
cmsUInt32Number LineCount,
|
cmsUInt32Number LineCount,
|
||||||
const cmsStride* Stride)
|
const cmsStride* Stride)
|
||||||
{
|
{
|
||||||
cmsUInt32Number i, j, k;
|
size_t i, j, k;
|
||||||
cmsUInt32Number nExtra;
|
cmsUInt32Number nExtra;
|
||||||
cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS];
|
cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS];
|
||||||
cmsUInt32Number SourceIncrements[cmsMAXCHANNELS];
|
cmsUInt32Number SourceIncrements[cmsMAXCHANNELS];
|
||||||
cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS];
|
cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS];
|
||||||
cmsUInt32Number DestIncrements[cmsMAXCHANNELS];
|
cmsUInt32Number DestIncrements[cmsMAXCHANNELS];
|
||||||
|
cmsUInt32Number SourceStrideIncrements[cmsMAXCHANNELS];
|
||||||
|
cmsUInt32Number DestStrideIncrements[cmsMAXCHANNELS];
|
||||||
|
|
||||||
|
cmsUInt8Number* SourcePtr[cmsMAXCHANNELS];
|
||||||
|
cmsUInt8Number* DestPtr[cmsMAXCHANNELS];
|
||||||
|
|
||||||
cmsFormatterAlphaFn copyValueFn;
|
cmsFormatterAlphaFn copyValueFn;
|
||||||
|
|
||||||
@@ -426,10 +431,6 @@ void _cmsHandleExtraChannels(_cmsTRANSFORM* p, const void* in,
|
|||||||
if (!(p->dwOriginalFlags & cmsFLAGS_COPY_ALPHA))
|
if (!(p->dwOriginalFlags & cmsFLAGS_COPY_ALPHA))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Exit early if in-place color-management is occurring - no need to copy extra channels to themselves.
|
|
||||||
if (p->InputFormat == p->OutputFormat && in == out)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Make sure we have same number of alpha channels. If not, just return as this should be checked at transform creation time.
|
// Make sure we have same number of alpha channels. If not, just return as this should be checked at transform creation time.
|
||||||
nExtra = T_EXTRA(p->InputFormat);
|
nExtra = T_EXTRA(p->InputFormat);
|
||||||
if (nExtra != T_EXTRA(p->OutputFormat))
|
if (nExtra != T_EXTRA(p->OutputFormat))
|
||||||
@@ -446,42 +447,6 @@ void _cmsHandleExtraChannels(_cmsTRANSFORM* p, const void* in,
|
|||||||
// Check for conversions 8, 16, half, float, dbl
|
// Check for conversions 8, 16, half, float, dbl
|
||||||
copyValueFn = _cmsGetFormatterAlpha(p->ContextID, p->InputFormat, p->OutputFormat);
|
copyValueFn = _cmsGetFormatterAlpha(p->ContextID, p->InputFormat, p->OutputFormat);
|
||||||
|
|
||||||
if (nExtra == 1) { // Optimized routine for copying a single extra channel quickly
|
|
||||||
|
|
||||||
cmsUInt8Number* SourcePtr;
|
|
||||||
cmsUInt8Number* DestPtr;
|
|
||||||
|
|
||||||
cmsUInt32Number SourceStrideIncrement = 0;
|
|
||||||
cmsUInt32Number DestStrideIncrement = 0;
|
|
||||||
|
|
||||||
// The loop itself
|
|
||||||
for (i = 0; i < LineCount; i++) {
|
|
||||||
|
|
||||||
// Prepare pointers for the loop
|
|
||||||
SourcePtr = (cmsUInt8Number*)in + SourceStartingOrder[0] + SourceStrideIncrement;
|
|
||||||
DestPtr = (cmsUInt8Number*)out + DestStartingOrder[0] + DestStrideIncrement;
|
|
||||||
|
|
||||||
for (j = 0; j < PixelsPerLine; j++) {
|
|
||||||
|
|
||||||
copyValueFn(DestPtr, SourcePtr);
|
|
||||||
|
|
||||||
SourcePtr += SourceIncrements[0];
|
|
||||||
DestPtr += DestIncrements[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
SourceStrideIncrement += Stride->BytesPerLineIn;
|
|
||||||
DestStrideIncrement += Stride->BytesPerLineOut;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else { // General case with more than one extra channel
|
|
||||||
|
|
||||||
cmsUInt8Number* SourcePtr[cmsMAXCHANNELS];
|
|
||||||
cmsUInt8Number* DestPtr[cmsMAXCHANNELS];
|
|
||||||
|
|
||||||
cmsUInt32Number SourceStrideIncrements[cmsMAXCHANNELS];
|
|
||||||
cmsUInt32Number DestStrideIncrements[cmsMAXCHANNELS];
|
|
||||||
|
|
||||||
memset(SourceStrideIncrements, 0, sizeof(SourceStrideIncrements));
|
memset(SourceStrideIncrements, 0, sizeof(SourceStrideIncrements));
|
||||||
memset(DestStrideIncrements, 0, sizeof(DestStrideIncrements));
|
memset(DestStrideIncrements, 0, sizeof(DestStrideIncrements));
|
||||||
|
|
||||||
@@ -513,6 +478,4 @@ void _cmsHandleExtraChannels(_cmsTRANSFORM* p, const void* in,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
6
thirdparty/liblcms2/src/cmscgats.c
vendored
6
thirdparty/liblcms2/src/cmscgats.c
vendored
@@ -596,7 +596,7 @@ void ReadReal(cmsIT8* it8, int inum)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Parses a float number
|
// Parses a float number
|
||||||
// This can not call directly atof because it uses locale dependent
|
// This can not call directly atof because it uses locale dependant
|
||||||
// parsing, while CCMX files always use . as decimal separator
|
// parsing, while CCMX files always use . as decimal separator
|
||||||
static
|
static
|
||||||
cmsFloat64Number ParseFloatNumber(const char *Buffer)
|
cmsFloat64Number ParseFloatNumber(const char *Buffer)
|
||||||
@@ -1817,7 +1817,7 @@ cmsBool CMSEXPORT cmsIT8SaveToMem(cmsHANDLE hIT8, void *MemPtr, cmsUInt32Number*
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------- Higher level parsing
|
// -------------------------------------------------------------- Higer level parsing
|
||||||
|
|
||||||
static
|
static
|
||||||
cmsBool DataFormatSection(cmsIT8* it8)
|
cmsBool DataFormatSection(cmsIT8* it8)
|
||||||
@@ -2120,7 +2120,7 @@ cmsBool ParseIT8(cmsIT8* it8, cmsBool nosheet)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Init useful pointers
|
// Init usefull pointers
|
||||||
|
|
||||||
static
|
static
|
||||||
void CookPointers(cmsIT8* it8)
|
void CookPointers(cmsIT8* it8)
|
||||||
|
|||||||
6
thirdparty/liblcms2/src/cmscnvrt.c
vendored
6
thirdparty/liblcms2/src/cmscnvrt.c
vendored
@@ -107,7 +107,7 @@ static cmsIntentsList DefaultIntents[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// A pointer to the beginning of the list
|
// A pointer to the begining of the list
|
||||||
_cmsIntentsPluginChunkType _cmsIntentsPluginChunk = { NULL };
|
_cmsIntentsPluginChunkType _cmsIntentsPluginChunk = { NULL };
|
||||||
|
|
||||||
// Duplicates the zone of memory used by the plug-in in the new context
|
// Duplicates the zone of memory used by the plug-in in the new context
|
||||||
@@ -889,7 +889,7 @@ int BlackPreservingSampler(register const cmsUInt16Number In[], register cmsUInt
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure to pass through K (which now is fixed)
|
// Make sure to pass thru K (which now is fixed)
|
||||||
Outf[3] = LabK[3];
|
Outf[3] = LabK[3];
|
||||||
|
|
||||||
// Apply TAC if needed
|
// Apply TAC if needed
|
||||||
@@ -957,7 +957,7 @@ cmsPipeline* BlackPreservingKPlaneIntents(cmsContext ContextID,
|
|||||||
memset(&bp, 0, sizeof(bp));
|
memset(&bp, 0, sizeof(bp));
|
||||||
|
|
||||||
// We need the input LUT of the last profile, assuming this one is responsible of
|
// We need the input LUT of the last profile, assuming this one is responsible of
|
||||||
// black generation. This LUT will be searched in inverse order.
|
// black generation. This LUT will be seached in inverse order.
|
||||||
bp.LabK2cmyk = _cmsReadInputLUT(hProfiles[nProfiles-1], INTENT_RELATIVE_COLORIMETRIC);
|
bp.LabK2cmyk = _cmsReadInputLUT(hProfiles[nProfiles-1], INTENT_RELATIVE_COLORIMETRIC);
|
||||||
if (bp.LabK2cmyk == NULL) goto Cleanup;
|
if (bp.LabK2cmyk == NULL) goto Cleanup;
|
||||||
|
|
||||||
|
|||||||
6
thirdparty/liblcms2/src/cmserr.c
vendored
6
thirdparty/liblcms2/src/cmserr.c
vendored
@@ -198,7 +198,7 @@ void _cmsAllocMemPluginChunk(struct _cmsContext_struct* ctx, const struct _cmsCo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Auxiliary to fill memory management functions from plugin (or context 0 defaults)
|
// Auxiliar to fill memory management functions from plugin (or context 0 defaults)
|
||||||
void _cmsInstallAllocFunctions(cmsPluginMemHandler* Plugin, _cmsMemPluginChunkType* ptr)
|
void _cmsInstallAllocFunctions(cmsPluginMemHandler* Plugin, _cmsMemPluginChunkType* ptr)
|
||||||
{
|
{
|
||||||
if (Plugin == NULL) {
|
if (Plugin == NULL) {
|
||||||
@@ -430,14 +430,14 @@ void* _cmsSubAllocDup(_cmsSubAllocator* s, const void *ptr, cmsUInt32Number size
|
|||||||
|
|
||||||
// Error logging ******************************************************************
|
// Error logging ******************************************************************
|
||||||
|
|
||||||
// There is no error handling at all. When a function fails, it returns proper value.
|
// There is no error handling at all. When a funtion fails, it returns proper value.
|
||||||
// For example, all create functions does return NULL on failure. Other return FALSE
|
// For example, all create functions does return NULL on failure. Other return FALSE
|
||||||
// It may be interesting, for the developer, to know why the function is failing.
|
// It may be interesting, for the developer, to know why the function is failing.
|
||||||
// for that reason, lcms2 does offer a logging function. This function does recive
|
// for that reason, lcms2 does offer a logging function. This function does recive
|
||||||
// a ENGLISH string with some clues on what is going wrong. You can show this
|
// a ENGLISH string with some clues on what is going wrong. You can show this
|
||||||
// info to the end user, or just create some sort of log.
|
// info to the end user, or just create some sort of log.
|
||||||
// The logging function should NOT terminate the program, as this obviously can leave
|
// The logging function should NOT terminate the program, as this obviously can leave
|
||||||
// resources. It is the programmer's responsibility to check each function return code
|
// resources. It is the programmer's responsability to check each function return code
|
||||||
// to make sure it didn't fail.
|
// to make sure it didn't fail.
|
||||||
|
|
||||||
// Error messages are limited to MAX_ERROR_MESSAGE_LEN
|
// Error messages are limited to MAX_ERROR_MESSAGE_LEN
|
||||||
|
|||||||
2
thirdparty/liblcms2/src/cmsgamma.c
vendored
2
thirdparty/liblcms2/src/cmsgamma.c
vendored
@@ -567,7 +567,7 @@ cmsFloat64Number DefaultEvalParametricFn(cmsInt32Number Type, const cmsFloat64Nu
|
|||||||
return Val;
|
return Val;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Evaluate a segmented function for a single value. Return -1 if no valid segment found .
|
// Evaluate a segmented funtion for a single value. Return -1 if no valid segment found .
|
||||||
// If fn type is 0, perform an interpolation on the table
|
// If fn type is 0, perform an interpolation on the table
|
||||||
static
|
static
|
||||||
cmsFloat64Number EvalSegmentedFn(const cmsToneCurve *g, cmsFloat64Number R)
|
cmsFloat64Number EvalSegmentedFn(const cmsToneCurve *g, cmsFloat64Number R)
|
||||||
|
|||||||
6
thirdparty/liblcms2/src/cmsgmt.c
vendored
6
thirdparty/liblcms2/src/cmsgmt.c
vendored
@@ -27,7 +27,7 @@
|
|||||||
#include "lcms2_internal.h"
|
#include "lcms2_internal.h"
|
||||||
|
|
||||||
|
|
||||||
// Auxiliary: append a Lab identity after the given sequence of profiles
|
// Auxiliar: append a Lab identity after the given sequence of profiles
|
||||||
// and return the transform. Lab profile is closed, rest of profiles are kept open.
|
// and return the transform. Lab profile is closed, rest of profiles are kept open.
|
||||||
cmsHTRANSFORM _cmsChain2Lab(cmsContext ContextID,
|
cmsHTRANSFORM _cmsChain2Lab(cmsContext ContextID,
|
||||||
cmsUInt32Number nProfiles,
|
cmsUInt32Number nProfiles,
|
||||||
@@ -172,7 +172,7 @@ cmsToneCurve* _cmsBuildKToneCurve(cmsContext ContextID,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Build the relationship. This effectively limits the maximum accuracy to 16 bits, but
|
// Build the relationship. This effectively limits the maximum accuracy to 16 bits, but
|
||||||
// since this is used on black-preserving LUTs, we are not losing accuracy in any case
|
// since this is used on black-preserving LUTs, we are not loosing accuracy in any case
|
||||||
KTone = cmsJoinToneCurve(ContextID, in, out, nPoints);
|
KTone = cmsJoinToneCurve(ContextID, in, out, nPoints);
|
||||||
|
|
||||||
// Get rid of components
|
// Get rid of components
|
||||||
@@ -278,7 +278,7 @@ int GamutSampler(register const cmsUInt16Number In[], register cmsUInt16Number O
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Does compute a gamut LUT going back and forth across pcs -> relativ. colorimetric intent -> pcs
|
// Does compute a gamut LUT going back and forth across pcs -> relativ. colorimetric intent -> pcs
|
||||||
// the dE obtained is then annotated on the LUT. Values truly out of gamut are clipped to dE = 0xFFFE
|
// the dE obtained is then annotated on the LUT. Values truely out of gamut are clipped to dE = 0xFFFE
|
||||||
// and values changed are supposed to be handled by any gamut remapping, so, are out of gamut as well.
|
// and values changed are supposed to be handled by any gamut remapping, so, are out of gamut as well.
|
||||||
//
|
//
|
||||||
// **WARNING: This algorithm does assume that gamut remapping algorithms does NOT move in-gamut colors,
|
// **WARNING: This algorithm does assume that gamut remapping algorithms does NOT move in-gamut colors,
|
||||||
|
|||||||
2
thirdparty/liblcms2/src/cmsintrp.c
vendored
2
thirdparty/liblcms2/src/cmsintrp.c
vendored
@@ -156,7 +156,7 @@ cmsInterpParams* _cmsComputeInterpParams(cmsContext ContextID, int nSamples, int
|
|||||||
int i;
|
int i;
|
||||||
cmsUInt32Number Samples[MAX_INPUT_DIMENSIONS];
|
cmsUInt32Number Samples[MAX_INPUT_DIMENSIONS];
|
||||||
|
|
||||||
// Fill the auxiliary array
|
// Fill the auxiliar array
|
||||||
for (i=0; i < MAX_INPUT_DIMENSIONS; i++)
|
for (i=0; i < MAX_INPUT_DIMENSIONS; i++)
|
||||||
Samples[i] = nSamples;
|
Samples[i] = nSamples;
|
||||||
|
|
||||||
|
|||||||
32
thirdparty/liblcms2/src/cmsio0.c
vendored
32
thirdparty/liblcms2/src/cmsio0.c
vendored
@@ -324,7 +324,7 @@ cmsUInt32Number FileRead(cmsIOHANDLER* iohandler, void *Buffer, cmsUInt32Number
|
|||||||
return nReaded;
|
return nReaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Position file pointer in the file
|
// Postion file pointer in the file
|
||||||
static
|
static
|
||||||
cmsBool FileSeek(cmsIOHANDLER* iohandler, cmsUInt32Number offset)
|
cmsBool FileSeek(cmsIOHANDLER* iohandler, cmsUInt32Number offset)
|
||||||
{
|
{
|
||||||
@@ -368,7 +368,6 @@ cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromFile(cmsContext ContextID, const cha
|
|||||||
{
|
{
|
||||||
cmsIOHANDLER* iohandler = NULL;
|
cmsIOHANDLER* iohandler = NULL;
|
||||||
FILE* fm = NULL;
|
FILE* fm = NULL;
|
||||||
cmsInt32Number fileLen;
|
|
||||||
|
|
||||||
_cmsAssert(FileName != NULL);
|
_cmsAssert(FileName != NULL);
|
||||||
_cmsAssert(AccessMode != NULL);
|
_cmsAssert(AccessMode != NULL);
|
||||||
@@ -385,16 +384,7 @@ cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromFile(cmsContext ContextID, const cha
|
|||||||
cmsSignalError(ContextID, cmsERROR_FILE, "File '%s' not found", FileName);
|
cmsSignalError(ContextID, cmsERROR_FILE, "File '%s' not found", FileName);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
fileLen = cmsfilelength(fm);
|
iohandler -> ReportedSize = (cmsUInt32Number) cmsfilelength(fm);
|
||||||
if (fileLen < 0)
|
|
||||||
{
|
|
||||||
fclose(fm);
|
|
||||||
_cmsFree(ContextID, iohandler);
|
|
||||||
cmsSignalError(ContextID, cmsERROR_FILE, "Cannot get size of file '%s'", FileName);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
iohandler -> ReportedSize = (cmsUInt32Number) fileLen;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'w':
|
case 'w':
|
||||||
@@ -434,14 +424,6 @@ cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromFile(cmsContext ContextID, const cha
|
|||||||
cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromStream(cmsContext ContextID, FILE* Stream)
|
cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromStream(cmsContext ContextID, FILE* Stream)
|
||||||
{
|
{
|
||||||
cmsIOHANDLER* iohandler = NULL;
|
cmsIOHANDLER* iohandler = NULL;
|
||||||
cmsInt32Number fileSize;
|
|
||||||
|
|
||||||
fileSize = cmsfilelength(Stream);
|
|
||||||
if (fileSize < 0)
|
|
||||||
{
|
|
||||||
cmsSignalError(ContextID, cmsERROR_FILE, "Cannot get size of stream");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
iohandler = (cmsIOHANDLER*) _cmsMallocZero(ContextID, sizeof(cmsIOHANDLER));
|
iohandler = (cmsIOHANDLER*) _cmsMallocZero(ContextID, sizeof(cmsIOHANDLER));
|
||||||
if (iohandler == NULL) return NULL;
|
if (iohandler == NULL) return NULL;
|
||||||
@@ -449,7 +431,7 @@ cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromStream(cmsContext ContextID, FILE* S
|
|||||||
iohandler -> ContextID = ContextID;
|
iohandler -> ContextID = ContextID;
|
||||||
iohandler -> stream = (void*) Stream;
|
iohandler -> stream = (void*) Stream;
|
||||||
iohandler -> UsedSpace = 0;
|
iohandler -> UsedSpace = 0;
|
||||||
iohandler -> ReportedSize = (cmsUInt32Number) fileSize;
|
iohandler -> ReportedSize = (cmsUInt32Number) cmsfilelength(Stream);
|
||||||
iohandler -> PhysicalFile[0] = 0;
|
iohandler -> PhysicalFile[0] = 0;
|
||||||
|
|
||||||
iohandler ->Read = FileRead;
|
iohandler ->Read = FileRead;
|
||||||
@@ -641,7 +623,7 @@ cmsBool _cmsNewTag(_cmsICCPROFILE* Icc, cmsTagSignature sig, int* NewPos)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Check existence
|
// Check existance
|
||||||
cmsBool CMSEXPORT cmsIsTag(cmsHPROFILE hProfile, cmsTagSignature sig)
|
cmsBool CMSEXPORT cmsIsTag(cmsHPROFILE hProfile, cmsTagSignature sig)
|
||||||
{
|
{
|
||||||
_cmsICCPROFILE* Icc = (_cmsICCPROFILE*) (void*) hProfile;
|
_cmsICCPROFILE* Icc = (_cmsICCPROFILE*) (void*) hProfile;
|
||||||
@@ -697,7 +679,7 @@ cmsBool _cmsReadHeader(_cmsICCPROFILE* Icc)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Adjust endianness of the used parameters
|
// Adjust endianess of the used parameters
|
||||||
Icc -> DeviceClass = (cmsProfileClassSignature) _cmsAdjustEndianess32(Header.deviceClass);
|
Icc -> DeviceClass = (cmsProfileClassSignature) _cmsAdjustEndianess32(Header.deviceClass);
|
||||||
Icc -> ColorSpace = (cmsColorSpaceSignature) _cmsAdjustEndianess32(Header.colorSpace);
|
Icc -> ColorSpace = (cmsColorSpaceSignature) _cmsAdjustEndianess32(Header.colorSpace);
|
||||||
Icc -> PCS = (cmsColorSpaceSignature) _cmsAdjustEndianess32(Header.pcs);
|
Icc -> PCS = (cmsColorSpaceSignature) _cmsAdjustEndianess32(Header.pcs);
|
||||||
@@ -815,7 +797,7 @@ cmsBool _cmsWriteHeader(_cmsICCPROFILE* Icc, cmsUInt32Number UsedSpace)
|
|||||||
|
|
||||||
memset(&Header.reserved, 0, sizeof(Header.reserved));
|
memset(&Header.reserved, 0, sizeof(Header.reserved));
|
||||||
|
|
||||||
// Set profile ID. Endianness is always big endian
|
// Set profile ID. Endianess is always big endian
|
||||||
memmove(&Header.profileID, &Icc ->ProfileID, 16);
|
memmove(&Header.profileID, &Icc ->ProfileID, 16);
|
||||||
|
|
||||||
// Dump the header
|
// Dump the header
|
||||||
@@ -1562,7 +1544,7 @@ void* CMSEXPORT cmsReadTag(cmsHPROFILE hProfile, cmsTagSignature sig)
|
|||||||
LocalTypeHandler.ICCVersion = Icc ->Version;
|
LocalTypeHandler.ICCVersion = Icc ->Version;
|
||||||
Icc -> TagPtrs[n] = LocalTypeHandler.ReadPtr(&LocalTypeHandler, io, &ElemCount, TagSize);
|
Icc -> TagPtrs[n] = LocalTypeHandler.ReadPtr(&LocalTypeHandler, io, &ElemCount, TagSize);
|
||||||
|
|
||||||
// The tag type is supported, but something wrong happened and we cannot read the tag.
|
// The tag type is supported, but something wrong happend and we cannot read the tag.
|
||||||
// let know the user about this (although it is just a warning)
|
// let know the user about this (although it is just a warning)
|
||||||
if (Icc -> TagPtrs[n] == NULL) {
|
if (Icc -> TagPtrs[n] == NULL) {
|
||||||
|
|
||||||
|
|||||||
31
thirdparty/liblcms2/src/cmsio1.c
vendored
31
thirdparty/liblcms2/src/cmsio1.c
vendored
@@ -128,7 +128,7 @@ cmsBool _cmsReadCHAD(cmsMAT3* Dest, cmsHPROFILE hProfile)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Auxiliary, read colorants as a MAT3 structure. Used by any function that needs a matrix-shaper
|
// Auxiliar, read colorants as a MAT3 structure. Used by any function that needs a matrix-shaper
|
||||||
static
|
static
|
||||||
cmsBool ReadICCMatrixRGB2XYZ(cmsMAT3* r, cmsHPROFILE hProfile)
|
cmsBool ReadICCMatrixRGB2XYZ(cmsMAT3* r, cmsHPROFILE hProfile)
|
||||||
{
|
{
|
||||||
@@ -314,7 +314,7 @@ cmsPipeline* _cmsReadInputLUT(cmsHPROFILE hProfile, int Intent)
|
|||||||
cmsTagSignature tagFloat;
|
cmsTagSignature tagFloat;
|
||||||
cmsContext ContextID = cmsGetProfileContextID(hProfile);
|
cmsContext ContextID = cmsGetProfileContextID(hProfile);
|
||||||
|
|
||||||
// On named color, take the appropriate tag
|
// On named color, take the appropiate tag
|
||||||
if (cmsGetDeviceClass(hProfile) == cmsSigNamedColorClass) {
|
if (cmsGetDeviceClass(hProfile) == cmsSigNamedColorClass) {
|
||||||
|
|
||||||
cmsPipeline* Lut;
|
cmsPipeline* Lut;
|
||||||
@@ -336,9 +336,9 @@ cmsPipeline* _cmsReadInputLUT(cmsHPROFILE hProfile, int Intent)
|
|||||||
return Lut;
|
return Lut;
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is an attempt to reuse this function to retrieve the matrix-shaper as pipeline no
|
// This is an attempt to reuse this funtion to retrieve the matrix-shaper as pipeline no
|
||||||
// matter other LUT are present and have precedence. Intent = -1 means just this.
|
// matter other LUT are present and have precedence. Intent = -1 means just this.
|
||||||
if (Intent >= INTENT_PERCEPTUAL && Intent <= INTENT_ABSOLUTE_COLORIMETRIC) {
|
if (Intent != -1) {
|
||||||
|
|
||||||
tag16 = Device2PCS16[Intent];
|
tag16 = Device2PCS16[Intent];
|
||||||
tagFloat = Device2PCSFloat[Intent];
|
tagFloat = Device2PCSFloat[Intent];
|
||||||
@@ -394,7 +394,7 @@ Error:
|
|||||||
// Check if this is a grayscale profile.
|
// Check if this is a grayscale profile.
|
||||||
if (cmsGetColorSpace(hProfile) == cmsSigGrayData) {
|
if (cmsGetColorSpace(hProfile) == cmsSigGrayData) {
|
||||||
|
|
||||||
// if so, build appropriate conversion tables.
|
// if so, build appropiate conversion tables.
|
||||||
// The tables are the PCS iluminant, scaled across GrayTRC
|
// The tables are the PCS iluminant, scaled across GrayTRC
|
||||||
return BuildGrayInputMatrixPipeline(hProfile);
|
return BuildGrayInputMatrixPipeline(hProfile);
|
||||||
}
|
}
|
||||||
@@ -549,7 +549,7 @@ cmsPipeline* _cmsReadFloatOutputTag(cmsHPROFILE hProfile, cmsTagSignature tagFlo
|
|||||||
if (Lut == NULL) return NULL;
|
if (Lut == NULL) return NULL;
|
||||||
|
|
||||||
// If PCS is Lab or XYZ, the floating point tag is accepting data in the space encoding,
|
// If PCS is Lab or XYZ, the floating point tag is accepting data in the space encoding,
|
||||||
// and since the formatter has already accommodated to 0..1.0, we should undo this change
|
// and since the formatter has already accomodated to 0..1.0, we should undo this change
|
||||||
if ( PCS == cmsSigLabData)
|
if ( PCS == cmsSigLabData)
|
||||||
{
|
{
|
||||||
if (!cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageNormalizeToLabFloat(ContextID)))
|
if (!cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageNormalizeToLabFloat(ContextID)))
|
||||||
@@ -590,7 +590,7 @@ cmsPipeline* _cmsReadOutputLUT(cmsHPROFILE hProfile, int Intent)
|
|||||||
cmsContext ContextID = cmsGetProfileContextID(hProfile);
|
cmsContext ContextID = cmsGetProfileContextID(hProfile);
|
||||||
|
|
||||||
|
|
||||||
if (Intent >= INTENT_PERCEPTUAL && Intent <= INTENT_ABSOLUTE_COLORIMETRIC) {
|
if (Intent != -1) {
|
||||||
|
|
||||||
tag16 = PCS2Device16[Intent];
|
tag16 = PCS2Device16[Intent];
|
||||||
tagFloat = PCS2DeviceFloat[Intent];
|
tagFloat = PCS2DeviceFloat[Intent];
|
||||||
@@ -651,7 +651,7 @@ Error:
|
|||||||
// Check if this is a grayscale profile.
|
// Check if this is a grayscale profile.
|
||||||
if (cmsGetColorSpace(hProfile) == cmsSigGrayData) {
|
if (cmsGetColorSpace(hProfile) == cmsSigGrayData) {
|
||||||
|
|
||||||
// if so, build appropriate conversion tables.
|
// if so, build appropiate conversion tables.
|
||||||
// The tables are the PCS iluminant, scaled across GrayTRC
|
// The tables are the PCS iluminant, scaled across GrayTRC
|
||||||
return BuildGrayOutputPipeline(hProfile);
|
return BuildGrayOutputPipeline(hProfile);
|
||||||
}
|
}
|
||||||
@@ -709,18 +709,12 @@ cmsPipeline* _cmsReadDevicelinkLUT(cmsHPROFILE hProfile, int Intent)
|
|||||||
{
|
{
|
||||||
cmsPipeline* Lut;
|
cmsPipeline* Lut;
|
||||||
cmsTagTypeSignature OriginalType;
|
cmsTagTypeSignature OriginalType;
|
||||||
cmsTagSignature tag16;
|
cmsTagSignature tag16 = Device2PCS16[Intent];
|
||||||
cmsTagSignature tagFloat;
|
cmsTagSignature tagFloat = Device2PCSFloat[Intent];
|
||||||
cmsContext ContextID = cmsGetProfileContextID(hProfile);
|
cmsContext ContextID = cmsGetProfileContextID(hProfile);
|
||||||
|
|
||||||
|
|
||||||
if (Intent < INTENT_PERCEPTUAL || Intent > INTENT_ABSOLUTE_COLORIMETRIC)
|
// On named color, take the appropiate tag
|
||||||
return NULL;
|
|
||||||
|
|
||||||
tag16 = Device2PCS16[Intent];
|
|
||||||
tagFloat = Device2PCSFloat[Intent];
|
|
||||||
|
|
||||||
// On named color, take the appropriate tag
|
|
||||||
if (cmsGetDeviceClass(hProfile) == cmsSigNamedColorClass) {
|
if (cmsGetDeviceClass(hProfile) == cmsSigNamedColorClass) {
|
||||||
|
|
||||||
cmsNAMEDCOLORLIST* nc = (cmsNAMEDCOLORLIST*) cmsReadTag(hProfile, cmsSigNamedColor2Tag);
|
cmsNAMEDCOLORLIST* nc = (cmsNAMEDCOLORLIST*) cmsReadTag(hProfile, cmsSigNamedColor2Tag);
|
||||||
@@ -745,7 +739,6 @@ cmsPipeline* _cmsReadDevicelinkLUT(cmsHPROFILE hProfile, int Intent)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (cmsIsTag(hProfile, tagFloat)) { // Float tag takes precedence
|
if (cmsIsTag(hProfile, tagFloat)) { // Float tag takes precedence
|
||||||
|
|
||||||
// Floating point LUT are always V
|
// Floating point LUT are always V
|
||||||
@@ -928,7 +921,7 @@ cmsBool _cmsWriteProfileSequence(cmsHPROFILE hProfile, const cmsSEQ* seq)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Auxiliary, read and duplicate a MLU if found.
|
// Auxiliar, read and duplicate a MLU if found.
|
||||||
static
|
static
|
||||||
cmsMLU* GetMLUFromProfile(cmsHPROFILE h, cmsTagSignature sig)
|
cmsMLU* GetMLUFromProfile(cmsHPROFILE h, cmsTagSignature sig)
|
||||||
{
|
{
|
||||||
|
|||||||
2
thirdparty/liblcms2/src/cmsmtrx.c
vendored
2
thirdparty/liblcms2/src/cmsmtrx.c
vendored
@@ -38,7 +38,7 @@ void CMSEXPORT _cmsVEC3init(cmsVEC3* r, cmsFloat64Number x, cmsFloat64Number y,
|
|||||||
r -> n[VZ] = z;
|
r -> n[VZ] = z;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Vector subtraction
|
// Vector substraction
|
||||||
void CMSEXPORT _cmsVEC3minus(cmsVEC3* r, const cmsVEC3* a, const cmsVEC3* b)
|
void CMSEXPORT _cmsVEC3minus(cmsVEC3* r, const cmsVEC3* a, const cmsVEC3* b)
|
||||||
{
|
{
|
||||||
r -> n[VX] = a -> n[VX] - b -> n[VX];
|
r -> n[VX] = a -> n[VX] - b -> n[VX];
|
||||||
|
|||||||
9
thirdparty/liblcms2/src/cmsnamed.c
vendored
9
thirdparty/liblcms2/src/cmsnamed.c
vendored
@@ -206,10 +206,10 @@ void strFrom16(char str[3], cmsUInt16Number n)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add an ASCII entry. Do not add any \0 termination (ICC1v43_2010-12.pdf page 61)
|
// Add an ASCII entry.
|
||||||
cmsBool CMSEXPORT cmsMLUsetASCII(cmsMLU* mlu, const char LanguageCode[3], const char CountryCode[3], const char* ASCIIString)
|
cmsBool CMSEXPORT cmsMLUsetASCII(cmsMLU* mlu, const char LanguageCode[3], const char CountryCode[3], const char* ASCIIString)
|
||||||
{
|
{
|
||||||
cmsUInt32Number i, len = (cmsUInt32Number) strlen(ASCIIString);
|
cmsUInt32Number i, len = (cmsUInt32Number) strlen(ASCIIString)+1;
|
||||||
wchar_t* WStr;
|
wchar_t* WStr;
|
||||||
cmsBool rc;
|
cmsBool rc;
|
||||||
cmsUInt16Number Lang = strTo16(LanguageCode);
|
cmsUInt16Number Lang = strTo16(LanguageCode);
|
||||||
@@ -243,7 +243,8 @@ cmsUInt32Number mywcslen(const wchar_t *s)
|
|||||||
return (cmsUInt32Number)(p - s);
|
return (cmsUInt32Number)(p - s);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add a wide entry. Do not add any \0 terminator (ICC1v43_2010-12.pdf page 61)
|
|
||||||
|
// Add a wide entry
|
||||||
cmsBool CMSEXPORT cmsMLUsetWide(cmsMLU* mlu, const char Language[3], const char Country[3], const wchar_t* WideString)
|
cmsBool CMSEXPORT cmsMLUsetWide(cmsMLU* mlu, const char Language[3], const char Country[3], const wchar_t* WideString)
|
||||||
{
|
{
|
||||||
cmsUInt16Number Lang = strTo16(Language);
|
cmsUInt16Number Lang = strTo16(Language);
|
||||||
@@ -253,7 +254,7 @@ cmsBool CMSEXPORT cmsMLUsetWide(cmsMLU* mlu, const char Language[3], const char
|
|||||||
if (mlu == NULL) return FALSE;
|
if (mlu == NULL) return FALSE;
|
||||||
if (WideString == NULL) return FALSE;
|
if (WideString == NULL) return FALSE;
|
||||||
|
|
||||||
len = (cmsUInt32Number) (mywcslen(WideString)) * sizeof(wchar_t);
|
len = (cmsUInt32Number) (mywcslen(WideString) + 1) * sizeof(wchar_t);
|
||||||
return AddMLUBlock(mlu, len, WideString, Lang, Cntry);
|
return AddMLUBlock(mlu, len, WideString, Lang, Cntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
4
thirdparty/liblcms2/src/cmsopt.c
vendored
4
thirdparty/liblcms2/src/cmsopt.c
vendored
@@ -529,7 +529,7 @@ cmsBool PatchLUT(cmsStage* CLUT, cmsUInt16Number At[], cmsUInt16Number Value[],
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Auxiliary, to see if two values are equal or very different
|
// Auxiliar, to see if two values are equal or very different
|
||||||
static
|
static
|
||||||
cmsBool WhitesAreEqual(int n, cmsUInt16Number White1[], cmsUInt16Number White2[] )
|
cmsBool WhitesAreEqual(int n, cmsUInt16Number White1[], cmsUInt16Number White2[] )
|
||||||
{
|
{
|
||||||
@@ -537,7 +537,7 @@ cmsBool WhitesAreEqual(int n, cmsUInt16Number White1[], cmsUInt16Number White2[]
|
|||||||
|
|
||||||
for (i=0; i < n; i++) {
|
for (i=0; i < n; i++) {
|
||||||
|
|
||||||
if (abs(White1[i] - White2[i]) > 0xf000) return TRUE; // Values are so extremely different that the fixup should be avoided
|
if (abs(White1[i] - White2[i]) > 0xf000) return TRUE; // Values are so extremly different that the fixup should be avoided
|
||||||
if (White1[i] != White2[i]) return FALSE;
|
if (White1[i] != White2[i]) return FALSE;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|||||||
2
thirdparty/liblcms2/src/cmspack.c
vendored
2
thirdparty/liblcms2/src/cmspack.c
vendored
@@ -81,7 +81,7 @@ typedef struct {
|
|||||||
#define ANYFLAVOR FLAVOR_SH(1)
|
#define ANYFLAVOR FLAVOR_SH(1)
|
||||||
|
|
||||||
|
|
||||||
// Suppress waning about info never being used
|
// Supress waning about info never being used
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
#pragma warning(disable : 4100)
|
#pragma warning(disable : 4100)
|
||||||
|
|||||||
6
thirdparty/liblcms2/src/cmspcs.c
vendored
6
thirdparty/liblcms2/src/cmspcs.c
vendored
@@ -308,7 +308,7 @@ void CMSEXPORT cmsFloat2LabEncoded(cmsUInt16Number wLab[3], const cmsCIELab* fLa
|
|||||||
wLab[2] = ab2Fix4(Lab.b);
|
wLab[2] = ab2Fix4(Lab.b);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Auxiliary: convert to Radians
|
// Auxiliar: convert to Radians
|
||||||
static
|
static
|
||||||
cmsFloat64Number RADIANS(cmsFloat64Number deg)
|
cmsFloat64Number RADIANS(cmsFloat64Number deg)
|
||||||
{
|
{
|
||||||
@@ -316,7 +316,7 @@ cmsFloat64Number RADIANS(cmsFloat64Number deg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Auxiliary: atan2 but operating in degrees and returning 0 if a==b==0
|
// Auxiliar: atan2 but operating in degrees and returning 0 if a==b==0
|
||||||
static
|
static
|
||||||
cmsFloat64Number atan2deg(cmsFloat64Number a, cmsFloat64Number b)
|
cmsFloat64Number atan2deg(cmsFloat64Number a, cmsFloat64Number b)
|
||||||
{
|
{
|
||||||
@@ -339,7 +339,7 @@ cmsFloat64Number atan2deg(cmsFloat64Number a, cmsFloat64Number b)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Auxiliary: Square
|
// Auxiliar: Square
|
||||||
static
|
static
|
||||||
cmsFloat64Number Sqr(cmsFloat64Number v)
|
cmsFloat64Number Sqr(cmsFloat64Number v)
|
||||||
{
|
{
|
||||||
|
|||||||
13
thirdparty/liblcms2/src/cmsplugin.c
vendored
13
thirdparty/liblcms2/src/cmsplugin.c
vendored
@@ -107,7 +107,7 @@ void CMSEXPORT _cmsAdjustEndianess64(cmsUInt64Number* Result, cmsUInt64Number*
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// Auxiliary -- read 8, 16 and 32-bit numbers
|
// Auxiliar -- read 8, 16 and 32-bit numbers
|
||||||
cmsBool CMSEXPORT _cmsReadUInt8Number(cmsIOHANDLER* io, cmsUInt8Number* n)
|
cmsBool CMSEXPORT _cmsReadUInt8Number(cmsIOHANDLER* io, cmsUInt8Number* n)
|
||||||
{
|
{
|
||||||
cmsUInt8Number tmp;
|
cmsUInt8Number tmp;
|
||||||
@@ -172,13 +172,13 @@ cmsBool CMSEXPORT _cmsReadFloat32Number(cmsIOHANDLER* io, cmsFloat32Number* n)
|
|||||||
|
|
||||||
_cmsAssert(io != NULL);
|
_cmsAssert(io != NULL);
|
||||||
|
|
||||||
if (io -> Read(io, &tmp, sizeof(cmsUInt32Number), 1) != 1)
|
if (io -> Read(io, &tmp, sizeof(cmsFloat32Number), 1) != 1)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (n != NULL) {
|
if (n != NULL) {
|
||||||
|
|
||||||
tmp = _cmsAdjustEndianess32(tmp);
|
tmp = _cmsAdjustEndianess32(tmp);
|
||||||
*n = *(cmsFloat32Number*) (void*) &tmp;
|
*n = *(cmsFloat32Number*) &tmp;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@@ -289,7 +289,7 @@ cmsBool CMSEXPORT _cmsWriteFloat32Number(cmsIOHANDLER* io, cmsFloat32Number n)
|
|||||||
|
|
||||||
_cmsAssert(io != NULL);
|
_cmsAssert(io != NULL);
|
||||||
|
|
||||||
tmp = *(cmsUInt32Number*) (void*) &n;
|
tmp = *(cmsUInt32Number*) &n;
|
||||||
tmp = _cmsAdjustEndianess32(tmp);
|
tmp = _cmsAdjustEndianess32(tmp);
|
||||||
if (io -> Write(io, sizeof(cmsUInt32Number), &tmp) != 1)
|
if (io -> Write(io, sizeof(cmsUInt32Number), &tmp) != 1)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@@ -485,10 +485,7 @@ cmsBool CMSEXPORT _cmsIOPrintf(cmsIOHANDLER* io, const char* frm, ...)
|
|||||||
va_start(args, frm);
|
va_start(args, frm);
|
||||||
|
|
||||||
len = vsnprintf((char*) Buffer, 2047, frm, args);
|
len = vsnprintf((char*) Buffer, 2047, frm, args);
|
||||||
if (len < 0) {
|
if (len < 0) return FALSE; // Truncated, which is a fatal error for us
|
||||||
va_end(args);
|
|
||||||
return FALSE; // Truncated, which is a fatal error for us
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = io ->Write(io, len, Buffer);
|
rc = io ->Write(io, len, Buffer);
|
||||||
|
|
||||||
|
|||||||
2
thirdparty/liblcms2/src/cmsps2.c
vendored
2
thirdparty/liblcms2/src/cmsps2.c
vendored
@@ -579,7 +579,7 @@ void EmitNGamma(cmsIOHANDLER* m, int n, cmsToneCurve* g[])
|
|||||||
//
|
//
|
||||||
// Each row contains Pipeline values for all but first component. So, I
|
// Each row contains Pipeline values for all but first component. So, I
|
||||||
// detect row changing by keeping a copy of last value of first
|
// detect row changing by keeping a copy of last value of first
|
||||||
// component. -1 is used to mark beginning of whole block.
|
// component. -1 is used to mark begining of whole block.
|
||||||
|
|
||||||
static
|
static
|
||||||
int OutputValueSampler(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo)
|
int OutputValueSampler(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo)
|
||||||
|
|||||||
4
thirdparty/liblcms2/src/cmssm.c
vendored
4
thirdparty/liblcms2/src/cmssm.c
vendored
@@ -318,7 +318,7 @@ void CMSEXPORT cmsGBDFree(cmsHANDLE hGBD)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Auxiliary to retrieve a pointer to the segmentr containing the Lab value
|
// Auxiliar to retrieve a pointer to the segmentr containing the Lab value
|
||||||
static
|
static
|
||||||
cmsGDBPoint* GetPoint(cmsGDB* gbd, const cmsCIELab* Lab, cmsSpherical* sp)
|
cmsGDBPoint* GetPoint(cmsGDB* gbd, const cmsCIELab* Lab, cmsSpherical* sp)
|
||||||
{
|
{
|
||||||
@@ -330,7 +330,7 @@ cmsGDBPoint* GetPoint(cmsGDB* gbd, const cmsCIELab* Lab, cmsSpherical* sp)
|
|||||||
_cmsAssert(Lab != NULL);
|
_cmsAssert(Lab != NULL);
|
||||||
_cmsAssert(sp != NULL);
|
_cmsAssert(sp != NULL);
|
||||||
|
|
||||||
// Center L* by subtracting half of its domain, that's 50
|
// Center L* by substracting half of its domain, that's 50
|
||||||
_cmsVEC3init(&v, Lab ->L - 50.0, Lab ->a, Lab ->b);
|
_cmsVEC3init(&v, Lab ->L - 50.0, Lab ->a, Lab ->b);
|
||||||
|
|
||||||
// Convert to spherical coordinates
|
// Convert to spherical coordinates
|
||||||
|
|||||||
20
thirdparty/liblcms2/src/cmstypes.c
vendored
20
thirdparty/liblcms2/src/cmstypes.c
vendored
@@ -30,7 +30,7 @@
|
|||||||
// This file implements every single tag and tag type as described in the ICC spec. Some types
|
// This file implements every single tag and tag type as described in the ICC spec. Some types
|
||||||
// have been deprecated, like ncl and Data. There is no implementation for those types as there
|
// have been deprecated, like ncl and Data. There is no implementation for those types as there
|
||||||
// are no profiles holding them. The programmer can also extend this list by defining his own types
|
// are no profiles holding them. The programmer can also extend this list by defining his own types
|
||||||
// by using the appropriate plug-in. There are three types of plug ins regarding that. First type
|
// by using the appropiate plug-in. There are three types of plug ins regarding that. First type
|
||||||
// allows to define new tags using any existing type. Next plug-in type allows to define new types
|
// allows to define new tags using any existing type. Next plug-in type allows to define new types
|
||||||
// and the third one is very specific: allows to extend the number of elements in the multiprocessing
|
// and the third one is very specific: allows to extend the number of elements in the multiprocessing
|
||||||
// elements special type.
|
// elements special type.
|
||||||
@@ -113,7 +113,7 @@ cmsTagTypeHandler* GetHandler(cmsTagTypeSignature sig, _cmsTagTypeLinkedList* Pl
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Auxiliary to convert UTF-32 to UTF-16 in some cases
|
// Auxiliar to convert UTF-32 to UTF-16 in some cases
|
||||||
static
|
static
|
||||||
cmsBool _cmsWriteWCharArray(cmsIOHANDLER* io, cmsUInt32Number n, const wchar_t* Array)
|
cmsBool _cmsWriteWCharArray(cmsIOHANDLER* io, cmsUInt32Number n, const wchar_t* Array)
|
||||||
{
|
{
|
||||||
@@ -129,7 +129,7 @@ cmsBool _cmsWriteWCharArray(cmsIOHANDLER* io, cmsUInt32Number n, const wchar_t*
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Auxiliary to read an array of wchar_t
|
// Auxiliar to read an array of wchar_t
|
||||||
static
|
static
|
||||||
cmsBool _cmsReadWCharArray(cmsIOHANDLER* io, cmsUInt32Number n, wchar_t* Array)
|
cmsBool _cmsReadWCharArray(cmsIOHANDLER* io, cmsUInt32Number n, wchar_t* Array)
|
||||||
{
|
{
|
||||||
@@ -160,7 +160,7 @@ typedef cmsBool (* PositionTableEntryFn)(struct _cms_typehandler_struct* self,
|
|||||||
cmsUInt32Number n,
|
cmsUInt32Number n,
|
||||||
cmsUInt32Number SizeOfTag);
|
cmsUInt32Number SizeOfTag);
|
||||||
|
|
||||||
// Helper function to deal with position tables as described in ICC spec 4.3
|
// Helper function to deal with position tables as decribed in ICC spec 4.3
|
||||||
// A table of n elements is readed, where first comes n records containing offsets and sizes and
|
// A table of n elements is readed, where first comes n records containing offsets and sizes and
|
||||||
// then a block containing the data itself. This allows to reuse same data in more than one entry
|
// then a block containing the data itself. This allows to reuse same data in more than one entry
|
||||||
static
|
static
|
||||||
@@ -994,7 +994,7 @@ cmsBool Type_Text_Description_Write(struct _cms_typehandler_struct* self, cmsIO
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Tell the real text len including the null terminator and padding
|
// Tell the real text len including the null terminator and padding
|
||||||
len_text = (cmsUInt32Number) strlen(Text) + 1;
|
len_text = strlen(Text) + 1;
|
||||||
// Compute an total tag size requirement
|
// Compute an total tag size requirement
|
||||||
len_tag_requirement = (8+4+len_text+4+4+2*len_text+2+1+67);
|
len_tag_requirement = (8+4+len_text+4+4+2*len_text+2+1+67);
|
||||||
len_aligned = _cmsALIGNLONG(len_tag_requirement);
|
len_aligned = _cmsALIGNLONG(len_tag_requirement);
|
||||||
@@ -1474,7 +1474,7 @@ void *Type_MLU_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsU
|
|||||||
LargestPosition = EndOfThisString;
|
LargestPosition = EndOfThisString;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now read the remaining of tag and fill all strings. Subtract the directory
|
// Now read the remaining of tag and fill all strings. Substract the directory
|
||||||
SizeOfTag = (LargestPosition * sizeof(wchar_t)) / sizeof(cmsUInt16Number);
|
SizeOfTag = (LargestPosition * sizeof(wchar_t)) / sizeof(cmsUInt16Number);
|
||||||
if (SizeOfTag == 0)
|
if (SizeOfTag == 0)
|
||||||
{
|
{
|
||||||
@@ -3609,7 +3609,7 @@ country varies for each element:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Auxiliary, read an string specified as count + string
|
// Auxiliar, read an string specified as count + string
|
||||||
static
|
static
|
||||||
cmsBool ReadCountAndSting(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsMLU* mlu, cmsUInt32Number* SizeOfTag, const char* Section)
|
cmsBool ReadCountAndSting(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsMLU* mlu, cmsUInt32Number* SizeOfTag, const char* Section)
|
||||||
{
|
{
|
||||||
@@ -4312,13 +4312,13 @@ Error:
|
|||||||
static
|
static
|
||||||
cmsBool Type_MPEclut_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems)
|
cmsBool Type_MPEclut_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems)
|
||||||
{
|
{
|
||||||
cmsUInt8Number Dimensions8[16]; // 16 because the spec says 16 and not max number of channels
|
cmsUInt8Number Dimensions8[16];
|
||||||
cmsUInt32Number i;
|
cmsUInt32Number i;
|
||||||
cmsStage* mpe = (cmsStage*) Ptr;
|
cmsStage* mpe = (cmsStage*) Ptr;
|
||||||
_cmsStageCLutData* clut = (_cmsStageCLutData*) mpe ->Data;
|
_cmsStageCLutData* clut = (_cmsStageCLutData*) mpe ->Data;
|
||||||
|
|
||||||
// Check for maximum number of channels supported by lcms
|
// Check for maximum number of channels
|
||||||
if (mpe -> InputChannels > MAX_INPUT_DIMENSIONS) return FALSE;
|
if (mpe -> InputChannels > 15) return FALSE;
|
||||||
|
|
||||||
// Only floats are supported in MPE
|
// Only floats are supported in MPE
|
||||||
if (clut ->HasFloatValues == FALSE) return FALSE;
|
if (clut ->HasFloatValues == FALSE) return FALSE;
|
||||||
|
|||||||
9
thirdparty/liblcms2/src/cmsvirt.c
vendored
9
thirdparty/liblcms2/src/cmsvirt.c
vendored
@@ -1138,20 +1138,15 @@ cmsHPROFILE CMSEXPORT cmsTransform2DeviceLink(cmsHTRANSFORM hTransform, cmsFloat
|
|||||||
// If no way, then force CLUT that for sure can be written
|
// If no way, then force CLUT that for sure can be written
|
||||||
if (AllowedLUT == NULL) {
|
if (AllowedLUT == NULL) {
|
||||||
|
|
||||||
cmsStage* FirstStage;
|
|
||||||
cmsStage* LastStage;
|
|
||||||
|
|
||||||
dwFlags |= cmsFLAGS_FORCE_CLUT;
|
dwFlags |= cmsFLAGS_FORCE_CLUT;
|
||||||
_cmsOptimizePipeline(ContextID, &LUT, xform ->RenderingIntent, &FrmIn, &FrmOut, &dwFlags);
|
_cmsOptimizePipeline(ContextID, &LUT, xform ->RenderingIntent, &FrmIn, &FrmOut, &dwFlags);
|
||||||
|
|
||||||
// Put identity curves if needed
|
// Put identity curves if needed
|
||||||
FirstStage = cmsPipelineGetPtrToFirstStage(LUT);
|
if (cmsPipelineGetPtrToFirstStage(LUT) ->Type != cmsSigCurveSetElemType)
|
||||||
if (FirstStage != NULL && FirstStage ->Type != cmsSigCurveSetElemType)
|
|
||||||
if (!cmsPipelineInsertStage(LUT, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(ContextID, ChansIn)))
|
if (!cmsPipelineInsertStage(LUT, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(ContextID, ChansIn)))
|
||||||
goto Error;
|
goto Error;
|
||||||
|
|
||||||
LastStage = cmsPipelineGetPtrToLastStage(LUT);
|
if (cmsPipelineGetPtrToLastStage(LUT) ->Type != cmsSigCurveSetElemType)
|
||||||
if (LastStage != NULL && LastStage ->Type != cmsSigCurveSetElemType)
|
|
||||||
if (!cmsPipelineInsertStage(LUT, cmsAT_END, _cmsStageAllocIdentityCurves(ContextID, ChansOut)))
|
if (!cmsPipelineInsertStage(LUT, cmsAT_END, _cmsStageAllocIdentityCurves(ContextID, ChansOut)))
|
||||||
goto Error;
|
goto Error;
|
||||||
|
|
||||||
|
|||||||
2
thirdparty/liblcms2/src/cmsxform.c
vendored
2
thirdparty/liblcms2/src/cmsxform.c
vendored
@@ -413,7 +413,7 @@ void PrecalculatedXFORM(_cmsTRANSFORM* p,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Auxiliary: Handle precalculated gamut check. The retrieval of context may be alittle bit slow, but this function is not critical.
|
// Auxiliar: Handle precalculated gamut check. The retrieval of context may be alittle bit slow, but this function is not critical.
|
||||||
static
|
static
|
||||||
void TransformOnePixelWithGamutCheck(_cmsTRANSFORM* p,
|
void TransformOnePixelWithGamutCheck(_cmsTRANSFORM* p,
|
||||||
const cmsUInt16Number wIn[],
|
const cmsUInt16Number wIn[],
|
||||||
|
|||||||
2
thirdparty/liblcms2/src/lcms2_internal.h
vendored
2
thirdparty/liblcms2/src/lcms2_internal.h
vendored
@@ -739,7 +739,7 @@ typedef struct _cms_iccprofile_struct {
|
|||||||
// Dictionary
|
// Dictionary
|
||||||
cmsUInt32Number TagCount;
|
cmsUInt32Number TagCount;
|
||||||
cmsTagSignature TagNames[MAX_TABLE_TAG];
|
cmsTagSignature TagNames[MAX_TABLE_TAG];
|
||||||
cmsTagSignature TagLinked[MAX_TABLE_TAG]; // The tag to which is linked (0=none)
|
cmsTagSignature TagLinked[MAX_TABLE_TAG]; // The tag to wich is linked (0=none)
|
||||||
cmsUInt32Number TagSizes[MAX_TABLE_TAG]; // Size on disk
|
cmsUInt32Number TagSizes[MAX_TABLE_TAG]; // Size on disk
|
||||||
cmsUInt32Number TagOffsets[MAX_TABLE_TAG];
|
cmsUInt32Number TagOffsets[MAX_TABLE_TAG];
|
||||||
cmsBool TagSaveAsRaw[MAX_TABLE_TAG]; // True to write uncooked
|
cmsBool TagSaveAsRaw[MAX_TABLE_TAG]; // True to write uncooked
|
||||||
|
|||||||
32
thirdparty/libpng/LICENSE
vendored
32
thirdparty/libpng/LICENSE
vendored
@@ -10,7 +10,7 @@ this sentence.
|
|||||||
|
|
||||||
This code is released under the libpng license.
|
This code is released under the libpng license.
|
||||||
|
|
||||||
libpng versions 1.0.7, July 1, 2000 through 1.6.25, September 1, 2016 are
|
libpng versions 1.0.7, July 1, 2000, through 1.6.21, January 15, 2016, are
|
||||||
Copyright (c) 2000-2002, 2004, 2006-2016 Glenn Randers-Pehrson, are
|
Copyright (c) 2000-2002, 2004, 2006-2016 Glenn Randers-Pehrson, are
|
||||||
derived from libpng-1.0.6, and are distributed according to the same
|
derived from libpng-1.0.6, and are distributed according to the same
|
||||||
disclaimer and license as libpng-1.0.6 with the following individuals
|
disclaimer and license as libpng-1.0.6 with the following individuals
|
||||||
@@ -32,10 +32,6 @@ and with the following additions to the disclaimer:
|
|||||||
risk of satisfactory quality, performance, accuracy, and effort is with
|
risk of satisfactory quality, performance, accuracy, and effort is with
|
||||||
the user.
|
the user.
|
||||||
|
|
||||||
Some files in the "contrib" directory and some configure-generated
|
|
||||||
files that are distributed with libpng have other copyright owners and
|
|
||||||
are released under other open source licenses.
|
|
||||||
|
|
||||||
libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
|
libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
|
||||||
Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
|
Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
|
||||||
libpng-0.96, and are distributed according to the same disclaimer and
|
libpng-0.96, and are distributed according to the same disclaimer and
|
||||||
@@ -59,9 +55,6 @@ Contributing Authors:
|
|||||||
Greg Roelofs
|
Greg Roelofs
|
||||||
Tom Tanner
|
Tom Tanner
|
||||||
|
|
||||||
Some files in the "scripts" directory have other copyright owners
|
|
||||||
but are released under this license.
|
|
||||||
|
|
||||||
libpng versions 0.5, May 1995, through 0.88, January 1996, are
|
libpng versions 0.5, May 1995, through 0.88, January 1996, are
|
||||||
Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
|
Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
|
||||||
@@ -102,29 +95,18 @@ appreciated.
|
|||||||
|
|
||||||
END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.
|
END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.
|
||||||
|
|
||||||
TRADEMARK:
|
A "png_get_copyright" function is available, for convenient use in "about"
|
||||||
|
boxes and the like:
|
||||||
|
|
||||||
The name "libpng" has not been registered by the Copyright owner
|
printf("%s", png_get_copyright(NULL));
|
||||||
as a trademark in any jurisdiction. However, because libpng has
|
|
||||||
been distributed and maintained world-wide, continually since 1995,
|
|
||||||
the Copyright owner claims "common-law trademark protection" in any
|
|
||||||
jurisdiction where common-law trademark is recognized.
|
|
||||||
|
|
||||||
OSI CERTIFICATION:
|
Also, the PNG logo (in PNG format, of course) is supplied in the
|
||||||
|
files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
|
||||||
|
|
||||||
Libpng is OSI Certified Open Source Software. OSI Certified Open Source is
|
Libpng is OSI Certified Open Source Software. OSI Certified Open Source is
|
||||||
a certification mark of the Open Source Initiative. OSI has not addressed
|
a certification mark of the Open Source Initiative. OSI has not addressed
|
||||||
the additional disclaimers inserted at version 1.0.7.
|
the additional disclaimers inserted at version 1.0.7.
|
||||||
|
|
||||||
EXPORT CONTROL:
|
|
||||||
|
|
||||||
The Copyright owner believes that the Export Control Classification
|
|
||||||
Number (ECCN) for libpng is EAR99, which means not subject to export
|
|
||||||
controls or International Traffic in Arms Regulations (ITAR) because
|
|
||||||
it is open source, publicly available software, that does not contain
|
|
||||||
any encryption software. See the EAR, paragraphs 734.3(b)(3) and
|
|
||||||
734.7(b).
|
|
||||||
|
|
||||||
Glenn Randers-Pehrson
|
Glenn Randers-Pehrson
|
||||||
glennrp at users.sourceforge.net
|
glennrp at users.sourceforge.net
|
||||||
September 1, 2016
|
January 15, 2016
|
||||||
|
|||||||
76
thirdparty/libpng/png.c
vendored
76
thirdparty/libpng/png.c
vendored
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* png.c - location for general purpose libpng functions
|
/* png.c - location for general purpose libpng functions
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.25 [September 1, 2016]
|
* Last changed in libpng 1.6.19 [November 12, 2015]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
#include "pngpriv.h"
|
#include "pngpriv.h"
|
||||||
|
|
||||||
/* Generate a compiler error if there is an old png.h in the search path. */
|
/* Generate a compiler error if there is an old png.h in the search path. */
|
||||||
typedef png_libpng_version_1_6_25 Your_png_h_is_not_version_1_6_25;
|
typedef png_libpng_version_1_6_21 Your_png_h_is_not_version_1_6_21;
|
||||||
|
|
||||||
/* Tells libpng that we have already handled the first "num_bytes" bytes
|
/* Tells libpng that we have already handled the first "num_bytes" bytes
|
||||||
* of the PNG file signature. If the PNG data is embedded into another
|
* of the PNG file signature. If the PNG data is embedded into another
|
||||||
@@ -775,14 +775,14 @@ png_get_copyright(png_const_structrp png_ptr)
|
|||||||
#else
|
#else
|
||||||
# ifdef __STDC__
|
# ifdef __STDC__
|
||||||
return PNG_STRING_NEWLINE \
|
return PNG_STRING_NEWLINE \
|
||||||
"libpng version 1.6.25 - September 1, 2016" PNG_STRING_NEWLINE \
|
"libpng version 1.6.21 - January 15, 2016" PNG_STRING_NEWLINE \
|
||||||
"Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson" \
|
"Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson" \
|
||||||
PNG_STRING_NEWLINE \
|
PNG_STRING_NEWLINE \
|
||||||
"Copyright (c) 1996-1997 Andreas Dilger" PNG_STRING_NEWLINE \
|
"Copyright (c) 1996-1997 Andreas Dilger" PNG_STRING_NEWLINE \
|
||||||
"Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc." \
|
"Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc." \
|
||||||
PNG_STRING_NEWLINE;
|
PNG_STRING_NEWLINE;
|
||||||
# else
|
# else
|
||||||
return "libpng version 1.6.25 - September 1, 2016\
|
return "libpng version 1.6.21 - January 15, 2016\
|
||||||
Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson\
|
Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson\
|
||||||
Copyright (c) 1996-1997 Andreas Dilger\
|
Copyright (c) 1996-1997 Andreas Dilger\
|
||||||
Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.";
|
Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.";
|
||||||
@@ -1931,8 +1931,8 @@ png_colorspace_set_sRGB(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||||||
static const png_byte D50_nCIEXYZ[12] =
|
static const png_byte D50_nCIEXYZ[12] =
|
||||||
{ 0x00, 0x00, 0xf6, 0xd6, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x2d };
|
{ 0x00, 0x00, 0xf6, 0xd6, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x2d };
|
||||||
|
|
||||||
static int /* bool */
|
int /* PRIVATE */
|
||||||
icc_check_length(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
png_icc_check_length(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
||||||
png_const_charp name, png_uint_32 profile_length)
|
png_const_charp name, png_uint_32 profile_length)
|
||||||
{
|
{
|
||||||
if (profile_length < 132)
|
if (profile_length < 132)
|
||||||
@@ -1942,40 +1942,6 @@ icc_check_length(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PNG_READ_iCCP_SUPPORTED
|
|
||||||
int /* PRIVATE */
|
|
||||||
png_icc_check_length(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|
||||||
png_const_charp name, png_uint_32 profile_length)
|
|
||||||
{
|
|
||||||
if (!icc_check_length(png_ptr, colorspace, name, profile_length))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* This needs to be here because the 'normal' check is in
|
|
||||||
* png_decompress_chunk, yet this happens after the attempt to
|
|
||||||
* png_malloc_base the required data. We only need this on read; on write
|
|
||||||
* the caller supplies the profile buffer so libpng doesn't allocate it. See
|
|
||||||
* the call to icc_check_length below (the write case).
|
|
||||||
*/
|
|
||||||
# ifdef PNG_SET_USER_LIMITS_SUPPORTED
|
|
||||||
else if (png_ptr->user_chunk_malloc_max > 0 &&
|
|
||||||
png_ptr->user_chunk_malloc_max < profile_length)
|
|
||||||
return png_icc_profile_error(png_ptr, colorspace, name, profile_length,
|
|
||||||
"exceeds application limits");
|
|
||||||
# elif PNG_USER_CHUNK_MALLOC_MAX > 0
|
|
||||||
else if (PNG_USER_CHUNK_MALLOC_MAX < profile_length)
|
|
||||||
return png_icc_profile_error(png_ptr, colorspace, name, profile_length,
|
|
||||||
"exceeds libpng limits");
|
|
||||||
# else /* !SET_USER_LIMITS */
|
|
||||||
/* This will get compiled out on all 32-bit and better systems. */
|
|
||||||
else if (PNG_SIZE_MAX < profile_length)
|
|
||||||
return png_icc_profile_error(png_ptr, colorspace, name, profile_length,
|
|
||||||
"exceeds system limits");
|
|
||||||
# endif /* !SET_USER_LIMITS */
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
#endif /* READ_iCCP */
|
|
||||||
|
|
||||||
int /* PRIVATE */
|
int /* PRIVATE */
|
||||||
png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
||||||
png_const_charp name, png_uint_32 profile_length,
|
png_const_charp name, png_uint_32 profile_length,
|
||||||
@@ -2388,6 +2354,7 @@ png_compare_ICC_profile_with_sRGB(png_const_structrp png_ptr,
|
|||||||
|
|
||||||
return 0; /* no match */
|
return 0; /* no match */
|
||||||
}
|
}
|
||||||
|
#endif /* PNG_sRGB_PROFILE_CHECKS >= 0 */
|
||||||
|
|
||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
png_icc_set_sRGB(png_const_structrp png_ptr,
|
png_icc_set_sRGB(png_const_structrp png_ptr,
|
||||||
@@ -2396,11 +2363,12 @@ png_icc_set_sRGB(png_const_structrp png_ptr,
|
|||||||
/* Is this profile one of the known ICC sRGB profiles? If it is, just set
|
/* Is this profile one of the known ICC sRGB profiles? If it is, just set
|
||||||
* the sRGB information.
|
* the sRGB information.
|
||||||
*/
|
*/
|
||||||
|
#if PNG_sRGB_PROFILE_CHECKS >= 0
|
||||||
if (png_compare_ICC_profile_with_sRGB(png_ptr, profile, adler) != 0)
|
if (png_compare_ICC_profile_with_sRGB(png_ptr, profile, adler) != 0)
|
||||||
|
#endif
|
||||||
(void)png_colorspace_set_sRGB(png_ptr, colorspace,
|
(void)png_colorspace_set_sRGB(png_ptr, colorspace,
|
||||||
(int)/*already checked*/png_get_uint_32(profile+64));
|
(int)/*already checked*/png_get_uint_32(profile+64));
|
||||||
}
|
}
|
||||||
#endif /* PNG_sRGB_PROFILE_CHECKS >= 0 */
|
|
||||||
#endif /* sRGB */
|
#endif /* sRGB */
|
||||||
|
|
||||||
int /* PRIVATE */
|
int /* PRIVATE */
|
||||||
@@ -2411,13 +2379,13 @@ png_colorspace_set_ICC(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||||||
if ((colorspace->flags & PNG_COLORSPACE_INVALID) != 0)
|
if ((colorspace->flags & PNG_COLORSPACE_INVALID) != 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (icc_check_length(png_ptr, colorspace, name, profile_length) != 0 &&
|
if (png_icc_check_length(png_ptr, colorspace, name, profile_length) != 0 &&
|
||||||
png_icc_check_header(png_ptr, colorspace, name, profile_length, profile,
|
png_icc_check_header(png_ptr, colorspace, name, profile_length, profile,
|
||||||
color_type) != 0 &&
|
color_type) != 0 &&
|
||||||
png_icc_check_tag_table(png_ptr, colorspace, name, profile_length,
|
png_icc_check_tag_table(png_ptr, colorspace, name, profile_length,
|
||||||
profile) != 0)
|
profile) != 0)
|
||||||
{
|
{
|
||||||
# if defined(PNG_sRGB_SUPPORTED) && PNG_sRGB_PROFILE_CHECKS >= 0
|
# ifdef PNG_sRGB_SUPPORTED
|
||||||
/* If no sRGB support, don't try storing sRGB information */
|
/* If no sRGB support, don't try storing sRGB information */
|
||||||
png_icc_set_sRGB(png_ptr, colorspace, profile, 0);
|
png_icc_set_sRGB(png_ptr, colorspace, profile, 0);
|
||||||
# endif
|
# endif
|
||||||
@@ -4124,9 +4092,9 @@ png_build_gamma_table(png_structrp png_ptr, int bit_depth)
|
|||||||
|
|
||||||
/* Remove any existing table; this copes with multiple calls to
|
/* Remove any existing table; this copes with multiple calls to
|
||||||
* png_read_update_info. The warning is because building the gamma tables
|
* png_read_update_info. The warning is because building the gamma tables
|
||||||
* multiple times is a performance hit - it's harmless but the ability to
|
* multiple times is a performance hit - it's harmless but the ability to call
|
||||||
* call png_read_update_info() multiple times is new in 1.5.6 so it seems
|
* png_read_update_info() multiple times is new in 1.5.6 so it seems sensible
|
||||||
* sensible to warn if the app introduces such a hit.
|
* to warn if the app introduces such a hit.
|
||||||
*/
|
*/
|
||||||
if (png_ptr->gamma_table != NULL || png_ptr->gamma_16_table != NULL)
|
if (png_ptr->gamma_table != NULL || png_ptr->gamma_16_table != NULL)
|
||||||
{
|
{
|
||||||
@@ -4137,8 +4105,7 @@ png_build_gamma_table(png_structrp png_ptr, int bit_depth)
|
|||||||
if (bit_depth <= 8)
|
if (bit_depth <= 8)
|
||||||
{
|
{
|
||||||
png_build_8bit_table(png_ptr, &png_ptr->gamma_table,
|
png_build_8bit_table(png_ptr, &png_ptr->gamma_table,
|
||||||
png_ptr->screen_gamma > 0 ?
|
png_ptr->screen_gamma > 0 ? png_reciprocal2(png_ptr->colorspace.gamma,
|
||||||
png_reciprocal2(png_ptr->colorspace.gamma,
|
|
||||||
png_ptr->screen_gamma) : PNG_FP_1);
|
png_ptr->screen_gamma) : PNG_FP_1);
|
||||||
|
|
||||||
#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \
|
#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \
|
||||||
@@ -4150,8 +4117,7 @@ png_build_gamma_table(png_structrp png_ptr, int bit_depth)
|
|||||||
png_reciprocal(png_ptr->colorspace.gamma));
|
png_reciprocal(png_ptr->colorspace.gamma));
|
||||||
|
|
||||||
png_build_8bit_table(png_ptr, &png_ptr->gamma_from_1,
|
png_build_8bit_table(png_ptr, &png_ptr->gamma_from_1,
|
||||||
png_ptr->screen_gamma > 0 ?
|
png_ptr->screen_gamma > 0 ? png_reciprocal(png_ptr->screen_gamma) :
|
||||||
png_reciprocal(png_ptr->screen_gamma) :
|
|
||||||
png_ptr->colorspace.gamma/* Probably doing rgb_to_gray */);
|
png_ptr->colorspace.gamma/* Probably doing rgb_to_gray */);
|
||||||
}
|
}
|
||||||
#endif /* READ_BACKGROUND || READ_ALPHA_MODE || RGB_TO_GRAY */
|
#endif /* READ_BACKGROUND || READ_ALPHA_MODE || RGB_TO_GRAY */
|
||||||
@@ -4182,8 +4148,8 @@ png_build_gamma_table(png_structrp png_ptr, int bit_depth)
|
|||||||
* pow(iv, gamma).
|
* pow(iv, gamma).
|
||||||
*
|
*
|
||||||
* Thus the gamma table consists of up to 256 256-entry tables. The table
|
* Thus the gamma table consists of up to 256 256-entry tables. The table
|
||||||
* is selected by the (8-gamma_shift) most significant of the low 8 bits
|
* is selected by the (8-gamma_shift) most significant of the low 8 bits of
|
||||||
* of the color value then indexed by the upper 8 bits:
|
* the color value then indexed by the upper 8 bits:
|
||||||
*
|
*
|
||||||
* table[low bits][high 8 bits]
|
* table[low bits][high 8 bits]
|
||||||
*
|
*
|
||||||
@@ -4216,8 +4182,8 @@ png_build_gamma_table(png_structrp png_ptr, int bit_depth)
|
|||||||
|
|
||||||
/* NOTE: prior to 1.5.4 this test used to include PNG_BACKGROUND (now
|
/* NOTE: prior to 1.5.4 this test used to include PNG_BACKGROUND (now
|
||||||
* PNG_COMPOSE). This effectively smashed the background calculation for
|
* PNG_COMPOSE). This effectively smashed the background calculation for
|
||||||
* 16-bit output because the 8-bit table assumes the result will be
|
* 16-bit output because the 8-bit table assumes the result will be reduced
|
||||||
* reduced to 8 bits.
|
* to 8 bits.
|
||||||
*/
|
*/
|
||||||
if ((png_ptr->transformations & (PNG_16_TO_8 | PNG_SCALE_16_TO_8)) != 0)
|
if ((png_ptr->transformations & (PNG_16_TO_8 | PNG_SCALE_16_TO_8)) != 0)
|
||||||
png_build_16to8_table(png_ptr, &png_ptr->gamma_16_table, shift,
|
png_build_16to8_table(png_ptr, &png_ptr->gamma_16_table, shift,
|
||||||
|
|||||||
272
thirdparty/libpng/png.h
vendored
272
thirdparty/libpng/png.h
vendored
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* png.h - header file for PNG reference library
|
/* png.h - header file for PNG reference library
|
||||||
*
|
*
|
||||||
* libpng version 1.6.25, September 1, 2016
|
* libpng version 1.6.21, January 15, 2016
|
||||||
*
|
*
|
||||||
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
* Authors and maintainers:
|
* Authors and maintainers:
|
||||||
* libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
|
* libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
|
||||||
* libpng versions 0.89, June 1996, through 0.96, May 1997: Andreas Dilger
|
* libpng versions 0.89, June 1996, through 0.96, May 1997: Andreas Dilger
|
||||||
* libpng versions 0.97, January 1998, through 1.6.25, September 1, 2016:
|
* libpng versions 0.97, January 1998, through 1.6.21, January 15, 2016:
|
||||||
* Glenn Randers-Pehrson.
|
* Glenn Randers-Pehrson.
|
||||||
* See also "Contributing Authors", below.
|
* See also "Contributing Authors", below.
|
||||||
*/
|
*/
|
||||||
@@ -25,11 +25,7 @@
|
|||||||
*
|
*
|
||||||
* This code is released under the libpng license.
|
* This code is released under the libpng license.
|
||||||
*
|
*
|
||||||
* Some files in the "contrib" directory and some configure-generated
|
* libpng versions 1.0.7, July 1, 2000, through 1.6.21, January 15, 2016, are
|
||||||
* files that are distributed with libpng have other copyright owners and
|
|
||||||
* are released under other open source licenses.
|
|
||||||
*
|
|
||||||
* libpng versions 1.0.7, July 1, 2000 through 1.6.25, September 1, 2016 are
|
|
||||||
* Copyright (c) 2000-2002, 2004, 2006-2016 Glenn Randers-Pehrson, are
|
* Copyright (c) 2000-2002, 2004, 2006-2016 Glenn Randers-Pehrson, are
|
||||||
* derived from libpng-1.0.6, and are distributed according to the same
|
* derived from libpng-1.0.6, and are distributed according to the same
|
||||||
* disclaimer and license as libpng-1.0.6 with the following individuals
|
* disclaimer and license as libpng-1.0.6 with the following individuals
|
||||||
@@ -41,7 +37,6 @@
|
|||||||
* Cosmin Truta
|
* Cosmin Truta
|
||||||
* Gilles Vollant
|
* Gilles Vollant
|
||||||
* James Yu
|
* James Yu
|
||||||
* Mandar Sahastrabuddhe
|
|
||||||
*
|
*
|
||||||
* and with the following additions to the disclaimer:
|
* and with the following additions to the disclaimer:
|
||||||
*
|
*
|
||||||
@@ -52,10 +47,6 @@
|
|||||||
* risk of satisfactory quality, performance, accuracy, and effort is with
|
* risk of satisfactory quality, performance, accuracy, and effort is with
|
||||||
* the user.
|
* the user.
|
||||||
*
|
*
|
||||||
* Some files in the "contrib" directory have other copyright owners and
|
|
||||||
* are released under other open source licenses.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
|
* libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
|
||||||
* Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
|
* Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
|
||||||
* libpng-0.96, and are distributed according to the same disclaimer and
|
* libpng-0.96, and are distributed according to the same disclaimer and
|
||||||
@@ -66,9 +57,6 @@
|
|||||||
* Glenn Randers-Pehrson
|
* Glenn Randers-Pehrson
|
||||||
* Willem van Schaik
|
* Willem van Schaik
|
||||||
*
|
*
|
||||||
* Some files in the "scripts" directory have different copyright owners
|
|
||||||
* but are also released under this license.
|
|
||||||
*
|
|
||||||
* libpng versions 0.89, June 1996, through 0.96, May 1997, are
|
* libpng versions 0.89, June 1996, through 0.96, May 1997, are
|
||||||
* Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88,
|
* Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88,
|
||||||
* and are distributed according to the same disclaimer and license as
|
* and are distributed according to the same disclaimer and license as
|
||||||
@@ -82,9 +70,6 @@
|
|||||||
* Greg Roelofs
|
* Greg Roelofs
|
||||||
* Tom Tanner
|
* Tom Tanner
|
||||||
*
|
*
|
||||||
* Some files in the "scripts" directory have other copyright owners
|
|
||||||
* but are released under this license.
|
|
||||||
*
|
|
||||||
* libpng versions 0.5, May 1995, through 0.88, January 1996, are
|
* libpng versions 0.5, May 1995, through 0.88, January 1996, are
|
||||||
* Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
*
|
*
|
||||||
@@ -124,29 +109,6 @@
|
|||||||
* appreciated.
|
* appreciated.
|
||||||
*
|
*
|
||||||
* END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.
|
* END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.
|
||||||
*
|
|
||||||
* TRADEMARK:
|
|
||||||
*
|
|
||||||
* The name "libpng" has not been registered by the Copyright owner
|
|
||||||
* as a trademark in any jurisdiction. However, because libpng has
|
|
||||||
* been distributed and maintained world-wide, continually since 1995,
|
|
||||||
* the Copyright owner claims "common-law trademark protection" in any
|
|
||||||
* jurisdiction where common-law trademark is recognized.
|
|
||||||
*
|
|
||||||
* OSI CERTIFICATION:
|
|
||||||
*
|
|
||||||
* Libpng is OSI Certified Open Source Software. OSI Certified Open Source is
|
|
||||||
* a certification mark of the Open Source Initiative. OSI has not addressed
|
|
||||||
* the additional disclaimers inserted at version 1.0.7.
|
|
||||||
*
|
|
||||||
* EXPORT CONTROL:
|
|
||||||
*
|
|
||||||
* The Copyright owner believes that the Export Control Classification
|
|
||||||
* Number (ECCN) for libpng is EAR99, which means not subject to export
|
|
||||||
* controls or International Traffic in Arms Regulations (ITAR) because
|
|
||||||
* it is open source, publicly available software, that does not contain
|
|
||||||
* any encryption software. See the EAR, paragraphs 734.3(b)(3) and
|
|
||||||
* 734.7(b).
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -159,6 +121,12 @@
|
|||||||
* files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
|
* files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Libpng is OSI Certified Open Source Software. OSI Certified Open Source is
|
||||||
|
* a certification mark of the Open Source Initiative. OSI has not addressed
|
||||||
|
* the additional disclaimers inserted at version 1.0.7.
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The contributing authors would like to thank all those who helped
|
* The contributing authors would like to thank all those who helped
|
||||||
* with testing, bug fixes, and patience. This wouldn't have been
|
* with testing, bug fixes, and patience. This wouldn't have been
|
||||||
@@ -214,11 +182,11 @@
|
|||||||
* ...
|
* ...
|
||||||
* 1.0.19 10 10019 10.so.0.19[.0]
|
* 1.0.19 10 10019 10.so.0.19[.0]
|
||||||
* ...
|
* ...
|
||||||
* 1.2.56 13 10256 12.so.0.56[.0]
|
* 1.2.53 13 10253 12.so.0.53[.0]
|
||||||
* ...
|
* ...
|
||||||
* 1.5.27 15 10527 15.so.15.27[.0]
|
* 1.5.23 15 10523 15.so.15.23[.0]
|
||||||
* ...
|
* ...
|
||||||
* 1.6.25 16 10625 16.so.16.25[.0]
|
* 1.6.21 16 10621 16.so.16.21[.0]
|
||||||
*
|
*
|
||||||
* Henceforth the source version will match the shared-library major
|
* Henceforth the source version will match the shared-library major
|
||||||
* and minor numbers; the shared-library major version number will be
|
* and minor numbers; the shared-library major version number will be
|
||||||
@@ -246,13 +214,13 @@
|
|||||||
* Y2K compliance in libpng:
|
* Y2K compliance in libpng:
|
||||||
* =========================
|
* =========================
|
||||||
*
|
*
|
||||||
* September 1, 2016
|
* January 15, 2016
|
||||||
*
|
*
|
||||||
* Since the PNG Development group is an ad-hoc body, we can't make
|
* Since the PNG Development group is an ad-hoc body, we can't make
|
||||||
* an official declaration.
|
* an official declaration.
|
||||||
*
|
*
|
||||||
* This is your unofficial assurance that libpng from version 0.71 and
|
* This is your unofficial assurance that libpng from version 0.71 and
|
||||||
* upward through 1.6.25 are Y2K compliant. It is my belief that
|
* upward through 1.6.21 are Y2K compliant. It is my belief that
|
||||||
* earlier versions were also Y2K compliant.
|
* earlier versions were also Y2K compliant.
|
||||||
*
|
*
|
||||||
* Libpng only has two year fields. One is a 2-byte unsigned integer
|
* Libpng only has two year fields. One is a 2-byte unsigned integer
|
||||||
@@ -314,8 +282,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* Version information for png.h - this should match the version in png.c */
|
/* Version information for png.h - this should match the version in png.c */
|
||||||
#define PNG_LIBPNG_VER_STRING "1.6.25"
|
#define PNG_LIBPNG_VER_STRING "1.6.21"
|
||||||
#define PNG_HEADER_VERSION_STRING " libpng version 1.6.25 - September 1, 2016\n"
|
#define PNG_HEADER_VERSION_STRING \
|
||||||
|
" libpng version 1.6.21 - January 15, 2016\n"
|
||||||
|
|
||||||
#define PNG_LIBPNG_VER_SONUM 16
|
#define PNG_LIBPNG_VER_SONUM 16
|
||||||
#define PNG_LIBPNG_VER_DLLNUM 16
|
#define PNG_LIBPNG_VER_DLLNUM 16
|
||||||
@@ -323,7 +292,7 @@
|
|||||||
/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
|
/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
|
||||||
#define PNG_LIBPNG_VER_MAJOR 1
|
#define PNG_LIBPNG_VER_MAJOR 1
|
||||||
#define PNG_LIBPNG_VER_MINOR 6
|
#define PNG_LIBPNG_VER_MINOR 6
|
||||||
#define PNG_LIBPNG_VER_RELEASE 25
|
#define PNG_LIBPNG_VER_RELEASE 21
|
||||||
|
|
||||||
/* This should match the numeric part of the final component of
|
/* This should match the numeric part of the final component of
|
||||||
* PNG_LIBPNG_VER_STRING, omitting any leading zero:
|
* PNG_LIBPNG_VER_STRING, omitting any leading zero:
|
||||||
@@ -354,7 +323,7 @@
|
|||||||
* version 1.0.0 was mis-numbered 100 instead of 10000). From
|
* version 1.0.0 was mis-numbered 100 instead of 10000). From
|
||||||
* version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release
|
* version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release
|
||||||
*/
|
*/
|
||||||
#define PNG_LIBPNG_VER 10625 /* 1.6.25 */
|
#define PNG_LIBPNG_VER 10621 /* 1.6.21 */
|
||||||
|
|
||||||
/* Library configuration: these options cannot be changed after
|
/* Library configuration: these options cannot be changed after
|
||||||
* the library has been built.
|
* the library has been built.
|
||||||
@@ -464,7 +433,7 @@ extern "C" {
|
|||||||
/* This triggers a compiler error in png.c, if png.c and png.h
|
/* This triggers a compiler error in png.c, if png.c and png.h
|
||||||
* do not agree upon the version number.
|
* do not agree upon the version number.
|
||||||
*/
|
*/
|
||||||
typedef char* png_libpng_version_1_6_25;
|
typedef char* png_libpng_version_1_6_21;
|
||||||
|
|
||||||
/* Basic control structions. Read libpng-manual.txt or libpng.3 for more info.
|
/* Basic control structions. Read libpng-manual.txt or libpng.3 for more info.
|
||||||
*
|
*
|
||||||
@@ -765,22 +734,24 @@ typedef png_unknown_chunk * * png_unknown_chunkpp;
|
|||||||
* data in the info_struct to be written into the output file. The values
|
* data in the info_struct to be written into the output file. The values
|
||||||
* of the PNG_INFO_<chunk> defines should NOT be changed.
|
* of the PNG_INFO_<chunk> defines should NOT be changed.
|
||||||
*/
|
*/
|
||||||
#define PNG_INFO_gAMA 0x0001U
|
#define PNG_INFO_gAMA 0x0001
|
||||||
#define PNG_INFO_sBIT 0x0002U
|
#define PNG_INFO_sBIT 0x0002
|
||||||
#define PNG_INFO_cHRM 0x0004U
|
#define PNG_INFO_cHRM 0x0004
|
||||||
#define PNG_INFO_PLTE 0x0008U
|
#define PNG_INFO_PLTE 0x0008
|
||||||
#define PNG_INFO_tRNS 0x0010U
|
#define PNG_INFO_tRNS 0x0010
|
||||||
#define PNG_INFO_bKGD 0x0020U
|
#define PNG_INFO_bKGD 0x0020
|
||||||
#define PNG_INFO_hIST 0x0040U
|
#define PNG_INFO_hIST 0x0040
|
||||||
#define PNG_INFO_pHYs 0x0080U
|
#define PNG_INFO_pHYs 0x0080
|
||||||
#define PNG_INFO_oFFs 0x0100U
|
#define PNG_INFO_oFFs 0x0100
|
||||||
#define PNG_INFO_tIME 0x0200U
|
#define PNG_INFO_tIME 0x0200
|
||||||
#define PNG_INFO_pCAL 0x0400U
|
#define PNG_INFO_pCAL 0x0400
|
||||||
#define PNG_INFO_sRGB 0x0800U /* GR-P, 0.96a */
|
#define PNG_INFO_sRGB 0x0800 /* GR-P, 0.96a */
|
||||||
#define PNG_INFO_iCCP 0x1000U /* ESR, 1.0.6 */
|
#define PNG_INFO_iCCP 0x1000 /* ESR, 1.0.6 */
|
||||||
#define PNG_INFO_sPLT 0x2000U /* ESR, 1.0.6 */
|
#define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */
|
||||||
#define PNG_INFO_sCAL 0x4000U /* ESR, 1.0.6 */
|
#define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */
|
||||||
#define PNG_INFO_IDAT 0x8000U /* ESR, 1.0.6 */
|
#if INT_MAX >= 0x8000 /* else this might break */
|
||||||
|
#define PNG_INFO_IDAT 0x8000 /* ESR, 1.0.6 */
|
||||||
|
#endif
|
||||||
|
|
||||||
/* This is used for the transformation routines, as some of them
|
/* This is used for the transformation routines, as some of them
|
||||||
* change these values for the row. It also should enable using
|
* change these values for the row. It also should enable using
|
||||||
@@ -1351,7 +1322,7 @@ PNG_EXPORT(229, void, png_set_scale_16, (png_structrp png_ptr));
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
|
#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
|
||||||
#define PNG_READ_16_TO_8_SUPPORTED /* Name prior to 1.5.4 */
|
#define PNG_READ_16_TO_8 SUPPORTED /* Name prior to 1.5.4 */
|
||||||
/* Strip the second byte of information from a 16-bit depth file. */
|
/* Strip the second byte of information from a 16-bit depth file. */
|
||||||
PNG_EXPORT(48, void, png_set_strip_16, (png_structrp png_ptr));
|
PNG_EXPORT(48, void, png_set_strip_16, (png_structrp png_ptr));
|
||||||
#endif
|
#endif
|
||||||
@@ -1502,8 +1473,8 @@ PNG_EXPORT(67, void, png_set_filter, (png_structrp png_ptr, int method,
|
|||||||
#define PNG_FILTER_UP 0x20
|
#define PNG_FILTER_UP 0x20
|
||||||
#define PNG_FILTER_AVG 0x40
|
#define PNG_FILTER_AVG 0x40
|
||||||
#define PNG_FILTER_PAETH 0x80
|
#define PNG_FILTER_PAETH 0x80
|
||||||
#define PNG_FAST_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP)
|
#define PNG_ALL_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP | \
|
||||||
#define PNG_ALL_FILTERS (PNG_FAST_FILTERS | PNG_FILTER_AVG | PNG_FILTER_PAETH)
|
PNG_FILTER_AVG | PNG_FILTER_PAETH)
|
||||||
|
|
||||||
/* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now.
|
/* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now.
|
||||||
* These defines should NOT be changed.
|
* These defines should NOT be changed.
|
||||||
@@ -1780,21 +1751,21 @@ PNG_EXPORT(99, void, png_data_freer, (png_const_structrp png_ptr,
|
|||||||
#define PNG_SET_WILL_FREE_DATA 1
|
#define PNG_SET_WILL_FREE_DATA 1
|
||||||
#define PNG_USER_WILL_FREE_DATA 2
|
#define PNG_USER_WILL_FREE_DATA 2
|
||||||
/* Flags for png_ptr->free_me and info_ptr->free_me */
|
/* Flags for png_ptr->free_me and info_ptr->free_me */
|
||||||
#define PNG_FREE_HIST 0x0008U
|
#define PNG_FREE_HIST 0x0008
|
||||||
#define PNG_FREE_ICCP 0x0010U
|
#define PNG_FREE_ICCP 0x0010
|
||||||
#define PNG_FREE_SPLT 0x0020U
|
#define PNG_FREE_SPLT 0x0020
|
||||||
#define PNG_FREE_ROWS 0x0040U
|
#define PNG_FREE_ROWS 0x0040
|
||||||
#define PNG_FREE_PCAL 0x0080U
|
#define PNG_FREE_PCAL 0x0080
|
||||||
#define PNG_FREE_SCAL 0x0100U
|
#define PNG_FREE_SCAL 0x0100
|
||||||
#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
|
#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
|
||||||
# define PNG_FREE_UNKN 0x0200U
|
# define PNG_FREE_UNKN 0x0200
|
||||||
#endif
|
#endif
|
||||||
/* PNG_FREE_LIST 0x0400U removed in 1.6.0 because it is ignored */
|
/* PNG_FREE_LIST 0x0400 removed in 1.6.0 because it is ignored */
|
||||||
#define PNG_FREE_PLTE 0x1000U
|
#define PNG_FREE_PLTE 0x1000
|
||||||
#define PNG_FREE_TRNS 0x2000U
|
#define PNG_FREE_TRNS 0x2000
|
||||||
#define PNG_FREE_TEXT 0x4000U
|
#define PNG_FREE_TEXT 0x4000
|
||||||
#define PNG_FREE_ALL 0x7fffU
|
#define PNG_FREE_ALL 0x7fff
|
||||||
#define PNG_FREE_MUL 0x4220U /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */
|
#define PNG_FREE_MUL 0x4220 /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */
|
||||||
|
|
||||||
#ifdef PNG_USER_MEM_SUPPORTED
|
#ifdef PNG_USER_MEM_SUPPORTED
|
||||||
PNG_EXPORTA(100, png_voidp, png_malloc_default, (png_const_structrp png_ptr,
|
PNG_EXPORTA(100, png_voidp, png_malloc_default, (png_const_structrp png_ptr,
|
||||||
@@ -2300,10 +2271,8 @@ PNG_EXPORT(171, void, png_set_sCAL_s, (png_const_structrp png_ptr,
|
|||||||
* except for the IHDR, PLTE, tRNS, IDAT, and IEND chunks (which continue to
|
* except for the IHDR, PLTE, tRNS, IDAT, and IEND chunks (which continue to
|
||||||
* be processed by libpng.
|
* be processed by libpng.
|
||||||
*/
|
*/
|
||||||
#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
|
|
||||||
PNG_EXPORT(172, void, png_set_keep_unknown_chunks, (png_structrp png_ptr,
|
PNG_EXPORT(172, void, png_set_keep_unknown_chunks, (png_structrp png_ptr,
|
||||||
int keep, png_const_bytep chunk_list, int num_chunks));
|
int keep, png_const_bytep chunk_list, int num_chunks));
|
||||||
#endif /* HANDLE_AS_UNKNOWN */
|
|
||||||
|
|
||||||
/* The "keep" PNG_HANDLE_CHUNK_ parameter for the specified chunk is returned;
|
/* The "keep" PNG_HANDLE_CHUNK_ parameter for the specified chunk is returned;
|
||||||
* the result is therefore true (non-zero) if special handling is required,
|
* the result is therefore true (non-zero) if special handling is required,
|
||||||
@@ -2311,7 +2280,7 @@ PNG_EXPORT(172, void, png_set_keep_unknown_chunks, (png_structrp png_ptr,
|
|||||||
*/
|
*/
|
||||||
PNG_EXPORT(173, int, png_handle_as_unknown, (png_const_structrp png_ptr,
|
PNG_EXPORT(173, int, png_handle_as_unknown, (png_const_structrp png_ptr,
|
||||||
png_const_bytep chunk_name));
|
png_const_bytep chunk_name));
|
||||||
#endif /* SET_UNKNOWN_CHUNKS */
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
|
#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
|
||||||
PNG_EXPORT(174, void, png_set_unknown_chunks, (png_const_structrp png_ptr,
|
PNG_EXPORT(174, void, png_set_unknown_chunks, (png_const_structrp png_ptr,
|
||||||
@@ -2533,22 +2502,18 @@ PNG_EXPORT(216, png_uint_32, png_get_io_chunk_type,
|
|||||||
/* fg and bg should be in `gamma 1.0' space; alpha is the opacity */
|
/* fg and bg should be in `gamma 1.0' space; alpha is the opacity */
|
||||||
|
|
||||||
# define png_composite(composite, fg, alpha, bg) \
|
# define png_composite(composite, fg, alpha, bg) \
|
||||||
{ \
|
{ png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) \
|
||||||
png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) \
|
|
||||||
* (png_uint_16)(alpha) \
|
* (png_uint_16)(alpha) \
|
||||||
+ (png_uint_16)(bg)*(png_uint_16)(255 \
|
+ (png_uint_16)(bg)*(png_uint_16)(255 \
|
||||||
- (png_uint_16)(alpha)) + 128); \
|
- (png_uint_16)(alpha)) + 128); \
|
||||||
(composite) = (png_byte)(((temp + (temp >> 8)) >> 8) & 0xff); \
|
(composite) = (png_byte)(((temp + (temp >> 8)) >> 8) & 0xff); }
|
||||||
}
|
|
||||||
|
|
||||||
# define png_composite_16(composite, fg, alpha, bg) \
|
# define png_composite_16(composite, fg, alpha, bg) \
|
||||||
{ \
|
{ png_uint_32 temp = (png_uint_32)((png_uint_32)(fg) \
|
||||||
png_uint_32 temp = (png_uint_32)((png_uint_32)(fg) \
|
|
||||||
* (png_uint_32)(alpha) \
|
* (png_uint_32)(alpha) \
|
||||||
+ (png_uint_32)(bg)*(65535 \
|
+ (png_uint_32)(bg)*(65535 \
|
||||||
- (png_uint_32)(alpha)) + 32768); \
|
- (png_uint_32)(alpha)) + 32768); \
|
||||||
(composite) = (png_uint_16)(0xffff & ((temp + (temp >> 16)) >> 16)); \
|
(composite) = (png_uint_16)(0xffff & ((temp + (temp >> 16)) >> 16)); }
|
||||||
}
|
|
||||||
|
|
||||||
#else /* Standard method using integer division */
|
#else /* Standard method using integer division */
|
||||||
|
|
||||||
@@ -2924,19 +2889,12 @@ typedef struct
|
|||||||
* is the minimum 'row stride', the minimum count of components between each
|
* is the minimum 'row stride', the minimum count of components between each
|
||||||
* row. For a color-mapped image this is the minimum number of bytes in a
|
* row. For a color-mapped image this is the minimum number of bytes in a
|
||||||
* row.
|
* row.
|
||||||
*
|
|
||||||
* WARNING: this macro overflows for some images with more than one component
|
|
||||||
* and very large image widths. libpng will refuse to process an image where
|
|
||||||
* this macro would overflow.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PNG_IMAGE_BUFFER_SIZE(image, row_stride)\
|
#define PNG_IMAGE_BUFFER_SIZE(image, row_stride)\
|
||||||
(PNG_IMAGE_PIXEL_COMPONENT_SIZE((image).format)*(image).height*(row_stride))
|
(PNG_IMAGE_PIXEL_COMPONENT_SIZE((image).format)*(image).height*(row_stride))
|
||||||
/* Return the size, in bytes, of an image buffer given a png_image and a row
|
/* Return the size, in bytes, of an image buffer given a png_image and a row
|
||||||
* stride - the number of components to leave space for in each row.
|
* stride - the number of components to leave space for in each row.
|
||||||
*
|
|
||||||
* WARNING: this macro overflows a 32-bit integer for some large PNG images,
|
|
||||||
* libpng will refuse to process an image where such an overflow would occur.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PNG_IMAGE_SIZE(image)\
|
#define PNG_IMAGE_SIZE(image)\
|
||||||
@@ -3057,6 +3015,7 @@ PNG_EXPORT(238, void, png_image_free, (png_imagep image));
|
|||||||
#endif /* SIMPLIFIED_READ */
|
#endif /* SIMPLIFIED_READ */
|
||||||
|
|
||||||
#ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED
|
#ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED
|
||||||
|
#ifdef PNG_STDIO_SUPPORTED
|
||||||
/* WRITE APIS
|
/* WRITE APIS
|
||||||
* ----------
|
* ----------
|
||||||
* For write you must initialize a png_image structure to describe the image to
|
* For write you must initialize a png_image structure to describe the image to
|
||||||
@@ -3073,7 +3032,6 @@ PNG_EXPORT(238, void, png_image_free, (png_imagep image));
|
|||||||
* values do not correspond to the colors in sRGB.
|
* values do not correspond to the colors in sRGB.
|
||||||
* colormap_entries: set to the number of entries in the color-map (0 to 256)
|
* colormap_entries: set to the number of entries in the color-map (0 to 256)
|
||||||
*/
|
*/
|
||||||
#ifdef PNG_SIMPLIFIED_WRITE_STDIO_SUPPORTED
|
|
||||||
PNG_EXPORT(239, int, png_image_write_to_file, (png_imagep image,
|
PNG_EXPORT(239, int, png_image_write_to_file, (png_imagep image,
|
||||||
const char *file, int convert_to_8bit, const void *buffer,
|
const char *file, int convert_to_8bit, const void *buffer,
|
||||||
png_int_32 row_stride, const void *colormap));
|
png_int_32 row_stride, const void *colormap));
|
||||||
@@ -3083,9 +3041,8 @@ PNG_EXPORT(240, int, png_image_write_to_stdio, (png_imagep image, FILE *file,
|
|||||||
int convert_to_8_bit, const void *buffer, png_int_32 row_stride,
|
int convert_to_8_bit, const void *buffer, png_int_32 row_stride,
|
||||||
const void *colormap));
|
const void *colormap));
|
||||||
/* Write the image to the given (FILE*). */
|
/* Write the image to the given (FILE*). */
|
||||||
#endif /* SIMPLIFIED_WRITE_STDIO */
|
|
||||||
|
|
||||||
/* With all write APIs if image is in one of the linear formats with 16-bit
|
/* With both write APIs if image is in one of the linear formats with 16-bit
|
||||||
* data then setting convert_to_8_bit will cause the output to be an 8-bit PNG
|
* data then setting convert_to_8_bit will cause the output to be an 8-bit PNG
|
||||||
* gamma encoded according to the sRGB specification, otherwise a 16-bit linear
|
* gamma encoded according to the sRGB specification, otherwise a 16-bit linear
|
||||||
* encoded PNG file is written.
|
* encoded PNG file is written.
|
||||||
@@ -3097,103 +3054,13 @@ PNG_EXPORT(240, int, png_image_write_to_stdio, (png_imagep image, FILE *file,
|
|||||||
*
|
*
|
||||||
* With all APIs row_stride is handled as in the read APIs - it is the spacing
|
* With all APIs row_stride is handled as in the read APIs - it is the spacing
|
||||||
* from one row to the next in component sized units (1 or 2 bytes) and if
|
* from one row to the next in component sized units (1 or 2 bytes) and if
|
||||||
* negative indicates a bottom-up row layout in the buffer. If row_stride is
|
* negative indicates a bottom-up row layout in the buffer. If row_stride is zero,
|
||||||
* zero, libpng will calculate it for you from the image width and number of
|
* libpng will calculate it for you from the image width and number of channels.
|
||||||
* channels.
|
|
||||||
*
|
*
|
||||||
* Note that the write API does not support interlacing, sub-8-bit pixels or
|
* Note that the write API does not support interlacing, sub-8-bit pixels, indexed
|
||||||
* most ancillary chunks. If you need to write text chunks (e.g. for copyright
|
* PNG (color_type 3) or most ancillary chunks.
|
||||||
* notices) you need to use one of the other APIs.
|
|
||||||
*/
|
|
||||||
|
|
||||||
PNG_EXPORT(245, int, png_image_write_to_memory, (png_imagep image, void *memory,
|
|
||||||
png_alloc_size_t * PNG_RESTRICT memory_bytes, int convert_to_8_bit,
|
|
||||||
const void *buffer, png_int_32 row_stride, const void *colormap));
|
|
||||||
/* Write the image to the given memory buffer. The function both writes the
|
|
||||||
* whole PNG data stream to *memory and updates *memory_bytes with the count
|
|
||||||
* of bytes written.
|
|
||||||
*
|
|
||||||
* 'memory' may be NULL. In this case *memory_bytes is not read however on
|
|
||||||
* success the number of bytes which would have been written will still be
|
|
||||||
* stored in *memory_bytes. On failure *memory_bytes will contain 0.
|
|
||||||
*
|
|
||||||
* If 'memory' is not NULL it must point to memory[*memory_bytes] of
|
|
||||||
* writeable memory.
|
|
||||||
*
|
|
||||||
* If the function returns success memory[*memory_bytes] (if 'memory' is not
|
|
||||||
* NULL) contains the written PNG data. *memory_bytes will always be less
|
|
||||||
* than or equal to the original value.
|
|
||||||
*
|
|
||||||
* If the function returns false and *memory_bytes was not changed an error
|
|
||||||
* occured during write. If *memory_bytes was changed, or is not 0 if
|
|
||||||
* 'memory' was NULL, the write would have succeeded but for the memory
|
|
||||||
* buffer being too small. *memory_bytes contains the required number of
|
|
||||||
* bytes and will be bigger that the original value.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define png_image_write_get_memory_size(image, size, convert_to_8_bit, buffer,\
|
|
||||||
row_stride, colormap)\
|
|
||||||
png_image_write_to_memory(&(image), 0, &(size), convert_to_8_bit, buffer,\
|
|
||||||
row_stride, colormap)
|
|
||||||
/* Return the amount of memory in 'size' required to compress this image.
|
|
||||||
* The png_image structure 'image' must be filled in as in the above
|
|
||||||
* function and must not be changed before the actual write call, the buffer
|
|
||||||
* and all other parameters must also be identical to that in the final
|
|
||||||
* write call. The 'size' variable need not be initialized.
|
|
||||||
*
|
|
||||||
* NOTE: the macro returns true/false, if false is returned 'size' will be
|
|
||||||
* set to zero and the write failed and probably will fail if tried again.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* You can pre-allocate the buffer by making sure it is of sufficient size
|
|
||||||
* regardless of the amount of compression achieved. The buffer size will
|
|
||||||
* always be bigger than the original image and it will never be filled. The
|
|
||||||
* following macros are provided to assist in allocating the buffer.
|
|
||||||
*/
|
|
||||||
#define PNG_IMAGE_DATA_SIZE(image) (PNG_IMAGE_SIZE(image)+(image).height)
|
|
||||||
/* The number of uncompressed bytes in the PNG byte encoding of the image;
|
|
||||||
* uncompressing the PNG IDAT data will give this number of bytes.
|
|
||||||
*
|
|
||||||
* NOTE: while PNG_IMAGE_SIZE cannot overflow for an image in memory this
|
|
||||||
* macro can because of the extra bytes used in the PNG byte encoding. You
|
|
||||||
* need to avoid this macro if your image size approaches 2^30 in width or
|
|
||||||
* height. The same goes for the remainder of these macros; they all produce
|
|
||||||
* bigger numbers than the actual in-memory image size.
|
|
||||||
*/
|
|
||||||
#ifndef PNG_ZLIB_MAX_SIZE
|
|
||||||
# define PNG_ZLIB_MAX_SIZE(b) ((b)+(((b)+7U)>>3)+(((b)+63U)>>6)+11U)
|
|
||||||
/* An upper bound on the number of compressed bytes given 'b' uncompressed
|
|
||||||
* bytes. This is based on deflateBounds() in zlib; different
|
|
||||||
* implementations of zlib compression may conceivably produce more data so
|
|
||||||
* if your zlib implementation is not zlib itself redefine this macro
|
|
||||||
* appropriately.
|
|
||||||
*/
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define PNG_IMAGE_COMPRESSED_SIZE_MAX(image)\
|
|
||||||
PNG_ZLIB_MAX_SIZE((png_alloc_size_t)PNG_IMAGE_DATA_SIZE(image))
|
|
||||||
/* An upper bound on the size of the data in the PNG IDAT chunks. */
|
|
||||||
|
|
||||||
#define PNG_IMAGE_PNG_SIZE_MAX_(image, image_size)\
|
|
||||||
((8U/*sig*/+25U/*IHDR*/+16U/*gAMA*/+44U/*cHRM*/+12U/*IEND*/+\
|
|
||||||
(((image).format&PNG_FORMAT_FLAG_COLORMAP)?/*colormap: PLTE, tRNS*/\
|
|
||||||
12U+3U*(image).colormap_entries/*PLTE data*/+\
|
|
||||||
(((image).format&PNG_FORMAT_FLAG_ALPHA)?\
|
|
||||||
12U/*tRNS*/+(image).colormap_entries:0U):0U)+\
|
|
||||||
12U)+(12U*((image_size)/PNG_ZBUF_SIZE))/*IDAT*/+(image_size))
|
|
||||||
/* A helper for the following macro; if your compiler cannot handle the
|
|
||||||
* following macro use this one with the result of
|
|
||||||
* PNG_IMAGE_COMPRESSED_SIZE_MAX(image) as the second argument (most
|
|
||||||
* compilers should handle this just fine.)
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define PNG_IMAGE_PNG_SIZE_MAX(image)\
|
|
||||||
PNG_IMAGE_PNG_SIZE_MAX_(image, PNG_IMAGE_COMPRESSED_SIZE_MAX(image))
|
|
||||||
/* An upper bound on the total length of the PNG data stream for 'image'.
|
|
||||||
* The result is of type png_alloc_size_t, on 32-bit systems this may
|
|
||||||
* overflow even though PNG_IMAGE_DATA_SIZE does not overflow; the write will
|
|
||||||
* run out of buffer space but return a corrected size which should work.
|
|
||||||
*/
|
*/
|
||||||
|
#endif /* STDIO */
|
||||||
#endif /* SIMPLIFIED_WRITE */
|
#endif /* SIMPLIFIED_WRITE */
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* END OF SIMPLIFIED API
|
* END OF SIMPLIFIED API
|
||||||
@@ -3227,10 +3094,7 @@ PNG_EXPORT(245, int, png_image_write_to_memory, (png_imagep image, void *memory,
|
|||||||
#endif
|
#endif
|
||||||
#define PNG_MAXIMUM_INFLATE_WINDOW 2 /* SOFTWARE: force maximum window */
|
#define PNG_MAXIMUM_INFLATE_WINDOW 2 /* SOFTWARE: force maximum window */
|
||||||
#define PNG_SKIP_sRGB_CHECK_PROFILE 4 /* SOFTWARE: Check ICC profile for sRGB */
|
#define PNG_SKIP_sRGB_CHECK_PROFILE 4 /* SOFTWARE: Check ICC profile for sRGB */
|
||||||
#ifdef PNG_MIPS_MSA_API_SUPPORTED
|
#define PNG_OPTION_NEXT 6 /* Next option - numbers must be even */
|
||||||
# define PNG_MIPS_MSA 6 /* HARDWARE: MIPS Msa SIMD instructions supported */
|
|
||||||
#endif
|
|
||||||
#define PNG_OPTION_NEXT 8 /* Next option - numbers must be even */
|
|
||||||
|
|
||||||
/* Return values: NOTE: there are four values and 'off' is *not* zero */
|
/* Return values: NOTE: there are four values and 'off' is *not* zero */
|
||||||
#define PNG_OPTION_UNSET 0 /* Unset - defaults to off */
|
#define PNG_OPTION_UNSET 0 /* Unset - defaults to off */
|
||||||
@@ -3254,7 +3118,7 @@ PNG_EXPORT(244, int, png_set_option, (png_structrp png_ptr, int option,
|
|||||||
* one to use is one more than this.)
|
* one to use is one more than this.)
|
||||||
*/
|
*/
|
||||||
#ifdef PNG_EXPORT_LAST_ORDINAL
|
#ifdef PNG_EXPORT_LAST_ORDINAL
|
||||||
PNG_EXPORT_LAST_ORDINAL(245);
|
PNG_EXPORT_LAST_ORDINAL(244);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
4
thirdparty/libpng/pngconf.h
vendored
4
thirdparty/libpng/pngconf.h
vendored
@@ -1,9 +1,9 @@
|
|||||||
|
|
||||||
/* pngconf.h - machine configurable file for libpng
|
/* pngconf.h - machine configurable file for libpng
|
||||||
*
|
*
|
||||||
* libpng version 1.6.25, September 1, 2016
|
* libpng version 1.6.21, January 15, 2016
|
||||||
*
|
*
|
||||||
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
|
|||||||
6
thirdparty/libpng/pngerror.c
vendored
6
thirdparty/libpng/pngerror.c
vendored
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngerror.c - stub functions for i/o and memory allocation
|
/* pngerror.c - stub functions for i/o and memory allocation
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.24 [August 4, 2016]
|
* Last changed in libpng 1.6.15 [November 20, 2014]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2014 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@@ -44,7 +44,7 @@ png_error,(png_const_structrp png_ptr, png_const_charp error_message),
|
|||||||
if (png_ptr != NULL)
|
if (png_ptr != NULL)
|
||||||
{
|
{
|
||||||
if ((png_ptr->flags &
|
if ((png_ptr->flags &
|
||||||
(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT)) != 0)
|
(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT)) != 0
|
||||||
{
|
{
|
||||||
if (*error_message == PNG_LITERAL_SHARP)
|
if (*error_message == PNG_LITERAL_SHARP)
|
||||||
{
|
{
|
||||||
|
|||||||
4
thirdparty/libpng/pngget.c
vendored
4
thirdparty/libpng/pngget.c
vendored
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngget.c - retrieval of values from info struct
|
/* pngget.c - retrieval of values from info struct
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.24 [August 4, 2016]
|
* Last changed in libpng 1.6.17 [March 26, 2015]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
|
|||||||
5
thirdparty/libpng/pnglibconf.h
vendored
5
thirdparty/libpng/pnglibconf.h
vendored
@@ -1,8 +1,8 @@
|
|||||||
/* libpng 1.6.25 STANDARD API DEFINITION */
|
/* libpng 1.6.21 STANDARD API DEFINITION */
|
||||||
|
|
||||||
/* pnglibconf.h - library build configuration */
|
/* pnglibconf.h - library build configuration */
|
||||||
|
|
||||||
/* Libpng version 1.6.25 - September 1, 2016 */
|
/* Libpng version 1.6.21 - January 15, 2016 */
|
||||||
|
|
||||||
/* Copyright (c) 1998-2015 Glenn Randers-Pehrson */
|
/* Copyright (c) 1998-2015 Glenn Randers-Pehrson */
|
||||||
|
|
||||||
@@ -109,7 +109,6 @@
|
|||||||
#define PNG_SIMPLIFIED_READ_SUPPORTED
|
#define PNG_SIMPLIFIED_READ_SUPPORTED
|
||||||
#define PNG_SIMPLIFIED_WRITE_AFIRST_SUPPORTED
|
#define PNG_SIMPLIFIED_WRITE_AFIRST_SUPPORTED
|
||||||
#define PNG_SIMPLIFIED_WRITE_BGR_SUPPORTED
|
#define PNG_SIMPLIFIED_WRITE_BGR_SUPPORTED
|
||||||
#define PNG_SIMPLIFIED_WRITE_STDIO_SUPPORTED
|
|
||||||
#define PNG_SIMPLIFIED_WRITE_SUPPORTED
|
#define PNG_SIMPLIFIED_WRITE_SUPPORTED
|
||||||
#define PNG_STDIO_SUPPORTED
|
#define PNG_STDIO_SUPPORTED
|
||||||
#define PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
|
#define PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
|
||||||
|
|||||||
4
thirdparty/libpng/pngmem.c
vendored
4
thirdparty/libpng/pngmem.c
vendored
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngmem.c - stub functions for memory allocation
|
/* pngmem.c - stub functions for memory allocation
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.24 [August 4, 2016%]
|
* Last changed in libpng 1.6.15 [November 20, 2014]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2014,2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2014 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
|
|||||||
11
thirdparty/libpng/pngpread.c
vendored
11
thirdparty/libpng/pngpread.c
vendored
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngpread.c - read a png file in push mode
|
/* pngpread.c - read a png file in push mode
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.24 [August 4, 2016]
|
* Last changed in libpng 1.6.18 [July 23, 2015]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@@ -210,15 +210,13 @@ png_push_read_chunk(png_structrp png_ptr, png_inforp info_ptr)
|
|||||||
(png_ptr->mode & PNG_HAVE_PLTE) == 0)
|
(png_ptr->mode & PNG_HAVE_PLTE) == 0)
|
||||||
png_error(png_ptr, "Missing PLTE before IDAT");
|
png_error(png_ptr, "Missing PLTE before IDAT");
|
||||||
|
|
||||||
|
png_ptr->mode |= PNG_HAVE_IDAT;
|
||||||
png_ptr->process_mode = PNG_READ_IDAT_MODE;
|
png_ptr->process_mode = PNG_READ_IDAT_MODE;
|
||||||
|
|
||||||
if ((png_ptr->mode & PNG_HAVE_IDAT) != 0)
|
|
||||||
if ((png_ptr->mode & PNG_HAVE_CHUNK_AFTER_IDAT) == 0)
|
if ((png_ptr->mode & PNG_HAVE_CHUNK_AFTER_IDAT) == 0)
|
||||||
if (png_ptr->push_length == 0)
|
if (png_ptr->push_length == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
png_ptr->mode |= PNG_HAVE_IDAT;
|
|
||||||
|
|
||||||
if ((png_ptr->mode & PNG_AFTER_IDAT) != 0)
|
if ((png_ptr->mode & PNG_AFTER_IDAT) != 0)
|
||||||
png_benign_error(png_ptr, "Too many IDATs found");
|
png_benign_error(png_ptr, "Too many IDATs found");
|
||||||
}
|
}
|
||||||
@@ -501,10 +499,7 @@ png_push_save_buffer(png_structrp png_ptr)
|
|||||||
png_error(png_ptr, "Insufficient memory for save_buffer");
|
png_error(png_ptr, "Insufficient memory for save_buffer");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (old_buffer)
|
|
||||||
memcpy(png_ptr->save_buffer, old_buffer, png_ptr->save_buffer_size);
|
memcpy(png_ptr->save_buffer, old_buffer, png_ptr->save_buffer_size);
|
||||||
else if (png_ptr->save_buffer_size)
|
|
||||||
png_error(png_ptr, "save_buffer error");
|
|
||||||
png_free(png_ptr, old_buffer);
|
png_free(png_ptr, old_buffer);
|
||||||
png_ptr->save_buffer_max = new_max;
|
png_ptr->save_buffer_max = new_max;
|
||||||
}
|
}
|
||||||
|
|||||||
61
thirdparty/libpng/pngpriv.h
vendored
61
thirdparty/libpng/pngpriv.h
vendored
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngpriv.h - private declarations for use inside libpng
|
/* pngpriv.h - private declarations for use inside libpng
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.25 [September 1, 2016]
|
* Last changed in libpng 1.6.21 [January 15, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@@ -182,35 +182,6 @@
|
|||||||
# endif
|
# endif
|
||||||
#endif /* PNG_ARM_NEON_OPT > 0 */
|
#endif /* PNG_ARM_NEON_OPT > 0 */
|
||||||
|
|
||||||
#ifndef PNG_MIPS_MSA_OPT
|
|
||||||
# if defined(__mips_msa) && (__mips_isa_rev >= 5) && defined(PNG_ALIGNED_MEMORY_SUPPORTED)
|
|
||||||
# define PNG_MIPS_MSA_OPT 2
|
|
||||||
# else
|
|
||||||
# define PNG_MIPS_MSA_OPT 0
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if PNG_MIPS_MSA_OPT > 0
|
|
||||||
# define PNG_FILTER_OPTIMIZATIONS png_init_filter_functions_msa
|
|
||||||
# ifndef PNG_MIPS_MSA_IMPLEMENTATION
|
|
||||||
# if defined(__mips_msa)
|
|
||||||
# if defined(__clang__)
|
|
||||||
# elif defined(__GNUC__)
|
|
||||||
# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7)
|
|
||||||
# define PNG_MIPS_MSA_IMPLEMENTATION 2
|
|
||||||
# endif /* no GNUC support */
|
|
||||||
# endif /* __GNUC__ */
|
|
||||||
# else /* !defined __mips_msa */
|
|
||||||
# define PNG_MIPS_MSA_IMPLEMENTATION 2
|
|
||||||
# endif /* __mips_msa */
|
|
||||||
# endif /* !PNG_MIPS_MSA_IMPLEMENTATION */
|
|
||||||
|
|
||||||
# ifndef PNG_MIPS_MSA_IMPLEMENTATION
|
|
||||||
# define PNG_MIPS_MSA_IMPLEMENTATION 1
|
|
||||||
# endif
|
|
||||||
#endif /* PNG_MIPS_MSA_OPT > 0 */
|
|
||||||
|
|
||||||
|
|
||||||
/* Is this a build of a DLL where compilation of the object modules requires
|
/* Is this a build of a DLL where compilation of the object modules requires
|
||||||
* different preprocessor settings to those required for a simple library? If
|
* different preprocessor settings to those required for a simple library? If
|
||||||
* so PNG_BUILD_DLL must be set.
|
* so PNG_BUILD_DLL must be set.
|
||||||
@@ -1203,7 +1174,6 @@ PNG_INTERNAL_FUNCTION(void,png_do_write_interlace,(png_row_infop row_info,
|
|||||||
PNG_INTERNAL_FUNCTION(void,png_read_filter_row,(png_structrp pp, png_row_infop
|
PNG_INTERNAL_FUNCTION(void,png_read_filter_row,(png_structrp pp, png_row_infop
|
||||||
row_info, png_bytep row, png_const_bytep prev_row, int filter),PNG_EMPTY);
|
row_info, png_bytep row, png_const_bytep prev_row, int filter),PNG_EMPTY);
|
||||||
|
|
||||||
#if PNG_ARM_NEON_OPT > 0
|
|
||||||
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_up_neon,(png_row_infop row_info,
|
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_up_neon,(png_row_infop row_info,
|
||||||
png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
||||||
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_sub3_neon,(png_row_infop
|
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_sub3_neon,(png_row_infop
|
||||||
@@ -1218,24 +1188,6 @@ PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth3_neon,(png_row_infop
|
|||||||
row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
||||||
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth4_neon,(png_row_infop
|
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth4_neon,(png_row_infop
|
||||||
row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
||||||
#endif
|
|
||||||
|
|
||||||
#if PNG_MIPS_MSA_OPT > 0
|
|
||||||
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_up_msa,(png_row_infop row_info,
|
|
||||||
png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
|
||||||
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_sub3_msa,(png_row_infop
|
|
||||||
row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
|
||||||
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_sub4_msa,(png_row_infop
|
|
||||||
row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
|
||||||
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_avg3_msa,(png_row_infop
|
|
||||||
row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
|
||||||
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_avg4_msa,(png_row_infop
|
|
||||||
row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
|
||||||
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth3_msa,(png_row_infop
|
|
||||||
row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
|
||||||
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth4_msa,(png_row_infop
|
|
||||||
row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Choose the best filter to use and filter the row data */
|
/* Choose the best filter to use and filter the row data */
|
||||||
PNG_INTERNAL_FUNCTION(void,png_write_find_filter,(png_structrp png_ptr,
|
PNG_INTERNAL_FUNCTION(void,png_write_find_filter,(png_structrp png_ptr,
|
||||||
@@ -1540,11 +1492,9 @@ PNG_INTERNAL_FUNCTION(int,png_colorspace_set_ICC,(png_const_structrp png_ptr,
|
|||||||
/* The 'name' is used for information only */
|
/* The 'name' is used for information only */
|
||||||
|
|
||||||
/* Routines for checking parts of an ICC profile. */
|
/* Routines for checking parts of an ICC profile. */
|
||||||
#ifdef PNG_READ_iCCP_SUPPORTED
|
|
||||||
PNG_INTERNAL_FUNCTION(int,png_icc_check_length,(png_const_structrp png_ptr,
|
PNG_INTERNAL_FUNCTION(int,png_icc_check_length,(png_const_structrp png_ptr,
|
||||||
png_colorspacerp colorspace, png_const_charp name,
|
png_colorspacerp colorspace, png_const_charp name,
|
||||||
png_uint_32 profile_length), PNG_EMPTY);
|
png_uint_32 profile_length), PNG_EMPTY);
|
||||||
#endif /* READ_iCCP */
|
|
||||||
PNG_INTERNAL_FUNCTION(int,png_icc_check_header,(png_const_structrp png_ptr,
|
PNG_INTERNAL_FUNCTION(int,png_icc_check_header,(png_const_structrp png_ptr,
|
||||||
png_colorspacerp colorspace, png_const_charp name,
|
png_colorspacerp colorspace, png_const_charp name,
|
||||||
png_uint_32 profile_length,
|
png_uint_32 profile_length,
|
||||||
@@ -1963,17 +1913,10 @@ PNG_INTERNAL_FUNCTION(void, PNG_FILTER_OPTIMIZATIONS, (png_structp png_ptr,
|
|||||||
* the builder of libpng passes the definition of PNG_FILTER_OPTIMIZATIONS in
|
* the builder of libpng passes the definition of PNG_FILTER_OPTIMIZATIONS in
|
||||||
* CFLAGS in place of CPPFLAGS *and* uses symbol prefixing.
|
* CFLAGS in place of CPPFLAGS *and* uses symbol prefixing.
|
||||||
*/
|
*/
|
||||||
# if PNG_ARM_NEON_OPT > 0
|
|
||||||
PNG_INTERNAL_FUNCTION(void, png_init_filter_functions_neon,
|
PNG_INTERNAL_FUNCTION(void, png_init_filter_functions_neon,
|
||||||
(png_structp png_ptr, unsigned int bpp), PNG_EMPTY);
|
(png_structp png_ptr, unsigned int bpp), PNG_EMPTY);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if PNG_MIPS_MSA_OPT > 0
|
|
||||||
PNG_INTERNAL_FUNCTION(void, png_init_filter_functions_msa,
|
|
||||||
(png_structp png_ptr, unsigned int bpp), PNG_EMPTY);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
PNG_INTERNAL_FUNCTION(png_uint_32, png_check_keyword, (png_structrp png_ptr,
|
PNG_INTERNAL_FUNCTION(png_uint_32, png_check_keyword, (png_structrp png_ptr,
|
||||||
png_const_charp key, png_bytep new_key), PNG_EMPTY);
|
png_const_charp key, png_bytep new_key), PNG_EMPTY);
|
||||||
|
|
||||||
|
|||||||
116
thirdparty/libpng/pngread.c
vendored
116
thirdparty/libpng/pngread.c
vendored
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngread.c - read a PNG file
|
/* pngread.c - read a PNG file
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.24 [August 4, 2016]
|
* Last changed in libpng 1.6.17 [March 26, 2015]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@@ -127,10 +127,7 @@ png_read_info(png_structrp png_ptr, png_inforp info_ptr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
else if ((png_ptr->mode & PNG_HAVE_IDAT) != 0)
|
else if ((png_ptr->mode & PNG_HAVE_IDAT) != 0)
|
||||||
{
|
|
||||||
png_ptr->mode |= PNG_HAVE_CHUNK_AFTER_IDAT;
|
|
||||||
png_ptr->mode |= PNG_AFTER_IDAT;
|
png_ptr->mode |= PNG_AFTER_IDAT;
|
||||||
}
|
|
||||||
|
|
||||||
/* This should be a binary subdivision search or a hash for
|
/* This should be a binary subdivision search or a hash for
|
||||||
* matching the chunk name rather than a linear search.
|
* matching the chunk name rather than a linear search.
|
||||||
@@ -788,9 +785,6 @@ png_read_end(png_structrp png_ptr, png_inforp info_ptr)
|
|||||||
png_uint_32 length = png_read_chunk_header(png_ptr);
|
png_uint_32 length = png_read_chunk_header(png_ptr);
|
||||||
png_uint_32 chunk_name = png_ptr->chunk_name;
|
png_uint_32 chunk_name = png_ptr->chunk_name;
|
||||||
|
|
||||||
if (chunk_name != png_IDAT)
|
|
||||||
png_ptr->mode |= PNG_HAVE_CHUNK_AFTER_IDAT;
|
|
||||||
|
|
||||||
if (chunk_name == png_IEND)
|
if (chunk_name == png_IEND)
|
||||||
png_handle_IEND(png_ptr, info_ptr, length);
|
png_handle_IEND(png_ptr, info_ptr, length);
|
||||||
|
|
||||||
@@ -805,9 +799,9 @@ png_read_end(png_structrp png_ptr, png_inforp info_ptr)
|
|||||||
{
|
{
|
||||||
if (chunk_name == png_IDAT)
|
if (chunk_name == png_IDAT)
|
||||||
{
|
{
|
||||||
if ((length > 0 && !(png_ptr->flags & PNG_FLAG_ZSTREAM_ENDED))
|
if ((length > 0) ||
|
||||||
|| (png_ptr->mode & PNG_HAVE_CHUNK_AFTER_IDAT) != 0)
|
(png_ptr->mode & PNG_HAVE_CHUNK_AFTER_IDAT) != 0)
|
||||||
png_benign_error(png_ptr, ".Too many IDATs found");
|
png_benign_error(png_ptr, "Too many IDATs found");
|
||||||
}
|
}
|
||||||
png_handle_unknown(png_ptr, info_ptr, length, keep);
|
png_handle_unknown(png_ptr, info_ptr, length, keep);
|
||||||
if (chunk_name == png_PLTE)
|
if (chunk_name == png_PLTE)
|
||||||
@@ -818,14 +812,10 @@ png_read_end(png_structrp png_ptr, png_inforp info_ptr)
|
|||||||
else if (chunk_name == png_IDAT)
|
else if (chunk_name == png_IDAT)
|
||||||
{
|
{
|
||||||
/* Zero length IDATs are legal after the last IDAT has been
|
/* Zero length IDATs are legal after the last IDAT has been
|
||||||
* read, but not after other chunks have been read. 1.6 does not
|
* read, but not after other chunks have been read.
|
||||||
* always read all the deflate data; specifically it cannot be relied
|
|
||||||
* upon to read the Adler32 at the end. If it doesn't ignore IDAT
|
|
||||||
* chunks which are longer than zero as well:
|
|
||||||
*/
|
*/
|
||||||
if ((length > 0 && !(png_ptr->flags & PNG_FLAG_ZSTREAM_ENDED))
|
if ((length > 0) || (png_ptr->mode & PNG_HAVE_CHUNK_AFTER_IDAT) != 0)
|
||||||
|| (png_ptr->mode & PNG_HAVE_CHUNK_AFTER_IDAT) != 0)
|
png_benign_error(png_ptr, "Too many IDATs found");
|
||||||
png_benign_error(png_ptr, "..Too many IDATs found");
|
|
||||||
|
|
||||||
png_crc_finish(png_ptr, length);
|
png_crc_finish(png_ptr, length);
|
||||||
}
|
}
|
||||||
@@ -1030,7 +1020,8 @@ png_set_read_status_fn(png_structrp png_ptr, png_read_status_ptr read_row_fn)
|
|||||||
#ifdef PNG_INFO_IMAGE_SUPPORTED
|
#ifdef PNG_INFO_IMAGE_SUPPORTED
|
||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_read_png(png_structrp png_ptr, png_inforp info_ptr,
|
png_read_png(png_structrp png_ptr, png_inforp info_ptr,
|
||||||
int transforms, voidp params)
|
int transforms,
|
||||||
|
voidp params)
|
||||||
{
|
{
|
||||||
if (png_ptr == NULL || info_ptr == NULL)
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
@@ -2104,7 +2095,7 @@ png_image_read_colormap(png_voidp argument)
|
|||||||
|
|
||||||
else if (display->background == NULL /* no way to remove it */)
|
else if (display->background == NULL /* no way to remove it */)
|
||||||
png_error(png_ptr,
|
png_error(png_ptr,
|
||||||
"background color must be supplied to remove alpha/transparency");
|
"a background color must be supplied to remove alpha/transparency");
|
||||||
|
|
||||||
/* Get a copy of the background color (this avoids repeating the checks
|
/* Get a copy of the background color (this avoids repeating the checks
|
||||||
* below.) The encoding is 8-bit sRGB or 16-bit linear, depending on the
|
* below.) The encoding is 8-bit sRGB or 16-bit linear, depending on the
|
||||||
@@ -2429,8 +2420,8 @@ png_image_read_colormap(png_voidp argument)
|
|||||||
background_index = i;
|
background_index = i;
|
||||||
png_create_colormap_entry(display, i++, back_r, back_g, back_b,
|
png_create_colormap_entry(display, i++, back_r, back_g, back_b,
|
||||||
#ifdef __COVERITY__
|
#ifdef __COVERITY__
|
||||||
/* Coverity claims that output_encoding
|
/* Coverity claims that output_encoding cannot be 2 (P_LINEAR)
|
||||||
* cannot be 2 (P_LINEAR) here.
|
* here.
|
||||||
*/ 255U,
|
*/ 255U,
|
||||||
#else
|
#else
|
||||||
output_encoding == P_LINEAR ? 65535U : 255U,
|
output_encoding == P_LINEAR ? 65535U : 255U,
|
||||||
@@ -2818,12 +2809,12 @@ png_image_read_colormap(png_voidp argument)
|
|||||||
* on the sRGB color in 'back'.
|
* on the sRGB color in 'back'.
|
||||||
*/
|
*/
|
||||||
png_create_colormap_entry(display, i,
|
png_create_colormap_entry(display, i,
|
||||||
png_colormap_compose(display, colormap[i].red,
|
png_colormap_compose(display, colormap[i].red, P_FILE,
|
||||||
P_FILE, trans[i], back_r, output_encoding),
|
trans[i], back_r, output_encoding),
|
||||||
png_colormap_compose(display, colormap[i].green,
|
png_colormap_compose(display, colormap[i].green, P_FILE,
|
||||||
P_FILE, trans[i], back_g, output_encoding),
|
trans[i], back_g, output_encoding),
|
||||||
png_colormap_compose(display, colormap[i].blue,
|
png_colormap_compose(display, colormap[i].blue, P_FILE,
|
||||||
P_FILE, trans[i], back_b, output_encoding),
|
trans[i], back_b, output_encoding),
|
||||||
output_encoding == P_LINEAR ? trans[i] * 257U :
|
output_encoding == P_LINEAR ? trans[i] * 257U :
|
||||||
trans[i],
|
trans[i],
|
||||||
output_encoding);
|
output_encoding);
|
||||||
@@ -3432,7 +3423,8 @@ png_image_read_background(png_voidp argument)
|
|||||||
|
|
||||||
for (pass = 0; pass < passes; ++pass)
|
for (pass = 0; pass < passes; ++pass)
|
||||||
{
|
{
|
||||||
png_bytep row = png_voidcast(png_bytep, display->first_row);
|
png_bytep row = png_voidcast(png_bytep,
|
||||||
|
display->first_row);
|
||||||
unsigned int startx, stepx, stepy;
|
unsigned int startx, stepx, stepy;
|
||||||
png_uint_32 y;
|
png_uint_32 y;
|
||||||
|
|
||||||
@@ -4078,26 +4070,11 @@ png_image_finish_read(png_imagep image, png_const_colorp background,
|
|||||||
void *buffer, png_int_32 row_stride, void *colormap)
|
void *buffer, png_int_32 row_stride, void *colormap)
|
||||||
{
|
{
|
||||||
if (image != NULL && image->version == PNG_IMAGE_VERSION)
|
if (image != NULL && image->version == PNG_IMAGE_VERSION)
|
||||||
{
|
|
||||||
/* Check for row_stride overflow. This check is not performed on the
|
|
||||||
* original PNG format because it may not occur in the output PNG format
|
|
||||||
* and libpng deals with the issues of reading the original.
|
|
||||||
*/
|
|
||||||
const unsigned int channels = PNG_IMAGE_PIXEL_CHANNELS(image->format);
|
|
||||||
|
|
||||||
/* The following checks just the 'row_stride' calculation to ensure it
|
|
||||||
* fits in a signed 32-bit value. Because channels/components can be
|
|
||||||
* either 1 or 2 bytes in size the length of a row can still overflow 32
|
|
||||||
* bits; this is just to verify that the 'row_stride' argument can be
|
|
||||||
* represented.
|
|
||||||
*/
|
|
||||||
if (image->width <= 0x7FFFFFFFU/channels) /* no overflow */
|
|
||||||
{
|
{
|
||||||
png_uint_32 check;
|
png_uint_32 check;
|
||||||
const png_uint_32 png_row_stride = image->width * channels;
|
|
||||||
|
|
||||||
if (row_stride == 0)
|
if (row_stride == 0)
|
||||||
row_stride = (png_int_32)/*SAFE*/png_row_stride;
|
row_stride = PNG_IMAGE_ROW_STRIDE(*image);
|
||||||
|
|
||||||
if (row_stride < 0)
|
if (row_stride < 0)
|
||||||
check = -row_stride;
|
check = -row_stride;
|
||||||
@@ -4105,30 +4082,8 @@ png_image_finish_read(png_imagep image, png_const_colorp background,
|
|||||||
else
|
else
|
||||||
check = row_stride;
|
check = row_stride;
|
||||||
|
|
||||||
/* This verifies 'check', the absolute value of the actual stride
|
if (image->opaque != NULL && buffer != NULL &&
|
||||||
* passed in and detects overflow in the application calculation (i.e.
|
check >= PNG_IMAGE_ROW_STRIDE(*image))
|
||||||
* if the app did actually pass in a non-zero 'row_stride'.
|
|
||||||
*/
|
|
||||||
if (image->opaque != NULL && buffer != NULL && check >= png_row_stride)
|
|
||||||
{
|
|
||||||
/* Now check for overflow of the image buffer calculation; this
|
|
||||||
* limits the whole image size to 32 bits for API compatibility with
|
|
||||||
* the current, 32-bit, PNG_IMAGE_BUFFER_SIZE macro.
|
|
||||||
*
|
|
||||||
* The PNG_IMAGE_BUFFER_SIZE macro is:
|
|
||||||
*
|
|
||||||
* (PNG_IMAGE_PIXEL_COMPONENT_SIZE(fmt)*height*(row_stride))
|
|
||||||
*
|
|
||||||
* And the component size is always 1 or 2, so make sure that the
|
|
||||||
* number of *bytes* that the application is saying are available
|
|
||||||
* does actually fit into a 32-bit number.
|
|
||||||
*
|
|
||||||
* NOTE: this will be changed in 1.7 because PNG_IMAGE_BUFFER_SIZE
|
|
||||||
* will be changed to use png_alloc_size_t; bigger images can be
|
|
||||||
* accomodated on 64-bit systems.
|
|
||||||
*/
|
|
||||||
if (image->height <=
|
|
||||||
0xFFFFFFFFU/PNG_IMAGE_PIXEL_COMPONENT_SIZE(image->format)/check)
|
|
||||||
{
|
{
|
||||||
if ((image->format & PNG_FORMAT_FLAG_COLORMAP) == 0 ||
|
if ((image->format & PNG_FORMAT_FLAG_COLORMAP) == 0 ||
|
||||||
(image->colormap_entries > 0 && colormap != NULL))
|
(image->colormap_entries > 0 && colormap != NULL))
|
||||||
@@ -4144,20 +4099,17 @@ png_image_finish_read(png_imagep image, png_const_colorp background,
|
|||||||
display.background = background;
|
display.background = background;
|
||||||
display.local_row = NULL;
|
display.local_row = NULL;
|
||||||
|
|
||||||
/* Choose the correct 'end' routine; for the color-map case
|
/* Choose the correct 'end' routine; for the color-map case all the
|
||||||
* all the setup has already been done.
|
* setup has already been done.
|
||||||
*/
|
*/
|
||||||
if ((image->format & PNG_FORMAT_FLAG_COLORMAP) != 0)
|
if ((image->format & PNG_FORMAT_FLAG_COLORMAP) != 0)
|
||||||
result =
|
result =
|
||||||
png_safe_execute(image,
|
png_safe_execute(image, png_image_read_colormap, &display) &&
|
||||||
png_image_read_colormap, &display) &&
|
png_safe_execute(image, png_image_read_colormapped, &display);
|
||||||
png_safe_execute(image,
|
|
||||||
png_image_read_colormapped, &display);
|
|
||||||
|
|
||||||
else
|
else
|
||||||
result =
|
result =
|
||||||
png_safe_execute(image,
|
png_safe_execute(image, png_image_read_direct, &display);
|
||||||
png_image_read_direct, &display);
|
|
||||||
|
|
||||||
png_image_free(image);
|
png_image_free(image);
|
||||||
return result;
|
return result;
|
||||||
@@ -4168,21 +4120,11 @@ png_image_finish_read(png_imagep image, png_const_colorp background,
|
|||||||
"png_image_finish_read[color-map]: no color-map");
|
"png_image_finish_read[color-map]: no color-map");
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
|
||||||
return png_image_error(image,
|
|
||||||
"png_image_finish_read: image too large");
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
else
|
||||||
return png_image_error(image,
|
return png_image_error(image,
|
||||||
"png_image_finish_read: invalid argument");
|
"png_image_finish_read: invalid argument");
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
|
||||||
return png_image_error(image,
|
|
||||||
"png_image_finish_read: row_stride too large");
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (image != NULL)
|
else if (image != NULL)
|
||||||
return png_image_error(image,
|
return png_image_error(image,
|
||||||
"png_image_finish_read: damaged PNG_IMAGE_VERSION");
|
"png_image_finish_read: damaged PNG_IMAGE_VERSION");
|
||||||
|
|||||||
4
thirdparty/libpng/pngrio.c
vendored
4
thirdparty/libpng/pngrio.c
vendored
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngrio.c - functions for data input
|
/* pngrio.c - functions for data input
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.24 [August 4, 2016]
|
* Last changed in libpng 1.6.17 [March 26, 2015]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
|
|||||||
11
thirdparty/libpng/pngrtran.c
vendored
11
thirdparty/libpng/pngrtran.c
vendored
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngrtran.c - transforms the data in a row for PNG readers
|
/* pngrtran.c - transforms the data in a row for PNG readers
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.24 [August 4, 2016]
|
* Last changed in libpng 1.6.19 [November 12, 2015]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@@ -289,12 +289,9 @@ png_set_alpha_mode_fixed(png_structrp png_ptr, int mode,
|
|||||||
* is expected to be 1 or greater, but this range test allows for some
|
* is expected to be 1 or greater, but this range test allows for some
|
||||||
* viewing correction values. The intent is to weed out users of this API
|
* viewing correction values. The intent is to weed out users of this API
|
||||||
* who use the inverse of the gamma value accidentally! Since some of these
|
* who use the inverse of the gamma value accidentally! Since some of these
|
||||||
* values are reasonable this may have to be changed:
|
* values are reasonable this may have to be changed.
|
||||||
*
|
|
||||||
* 1.6.x: changed from 0.07..3 to 0.01..100 (to accomodate the optimal 16-bit
|
|
||||||
* gamma of 36, and its reciprocal.)
|
|
||||||
*/
|
*/
|
||||||
if (output_gamma < 1000 || output_gamma > 10000000)
|
if (output_gamma < 70000 || output_gamma > 300000)
|
||||||
png_error(png_ptr, "output gamma out of expected range");
|
png_error(png_ptr, "output gamma out of expected range");
|
||||||
|
|
||||||
/* The default file gamma is the inverse of the output gamma; the output
|
/* The default file gamma is the inverse of the output gamma; the output
|
||||||
|
|||||||
16
thirdparty/libpng/pngrutil.c
vendored
16
thirdparty/libpng/pngrutil.c
vendored
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngrutil.c - utilities to read a PNG file
|
/* pngrutil.c - utilities to read a PNG file
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.25 [September 1, 2016]
|
* Last changed in libpng 1.6.20 [December 3, 2014]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@@ -461,7 +461,6 @@ png_zlib_inflate(png_structrp png_ptr, int flush)
|
|||||||
#endif /* Zlib >= 1.2.4 */
|
#endif /* Zlib >= 1.2.4 */
|
||||||
|
|
||||||
#ifdef PNG_READ_COMPRESSED_TEXT_SUPPORTED
|
#ifdef PNG_READ_COMPRESSED_TEXT_SUPPORTED
|
||||||
#if defined(PNG_READ_zTXt_SUPPORTED) || defined (PNG_READ_iTXt_SUPPORTED)
|
|
||||||
/* png_inflate now returns zlib error codes including Z_OK and Z_STREAM_END to
|
/* png_inflate now returns zlib error codes including Z_OK and Z_STREAM_END to
|
||||||
* allow the caller to do multiple calls if required. If the 'finish' flag is
|
* allow the caller to do multiple calls if required. If the 'finish' flag is
|
||||||
* set Z_FINISH will be passed to the final inflate() call and Z_STREAM_END must
|
* set Z_FINISH will be passed to the final inflate() call and Z_STREAM_END must
|
||||||
@@ -755,7 +754,6 @@ png_decompress_chunk(png_structrp png_ptr,
|
|||||||
return Z_MEM_ERROR;
|
return Z_MEM_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* READ_zTXt || READ_iTXt */
|
|
||||||
#endif /* READ_COMPRESSED_TEXT */
|
#endif /* READ_COMPRESSED_TEXT */
|
||||||
|
|
||||||
#ifdef PNG_READ_iCCP_SUPPORTED
|
#ifdef PNG_READ_iCCP_SUPPORTED
|
||||||
@@ -804,8 +802,8 @@ png_inflate_read(png_structrp png_ptr, png_bytep read_buffer, uInt read_size,
|
|||||||
* the available output is produced; this allows reading of truncated
|
* the available output is produced; this allows reading of truncated
|
||||||
* streams.
|
* streams.
|
||||||
*/
|
*/
|
||||||
ret = PNG_INFLATE(png_ptr, *chunk_bytes > 0 ?
|
ret = PNG_INFLATE(png_ptr,
|
||||||
Z_NO_FLUSH : (finish ? Z_FINISH : Z_SYNC_FLUSH));
|
*chunk_bytes > 0 ? Z_NO_FLUSH : (finish ? Z_FINISH : Z_SYNC_FLUSH));
|
||||||
}
|
}
|
||||||
while (ret == Z_OK && (*out_size > 0 || png_ptr->zstream.avail_out > 0));
|
while (ret == Z_OK && (*out_size > 0 || png_ptr->zstream.avail_out > 0));
|
||||||
|
|
||||||
@@ -1514,7 +1512,7 @@ png_handle_iCCP(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
|||||||
png_crc_finish(png_ptr, length);
|
png_crc_finish(png_ptr, length);
|
||||||
finished = 1;
|
finished = 1;
|
||||||
|
|
||||||
# if defined(PNG_sRGB_SUPPORTED) && PNG_sRGB_PROFILE_CHECKS >= 0
|
# ifdef PNG_sRGB_SUPPORTED
|
||||||
/* Check for a match against sRGB */
|
/* Check for a match against sRGB */
|
||||||
png_icc_set_sRGB(png_ptr,
|
png_icc_set_sRGB(png_ptr,
|
||||||
&png_ptr->colorspace, profile,
|
&png_ptr->colorspace, profile,
|
||||||
@@ -3420,8 +3418,8 @@ png_combine_row(png_const_structrp png_ptr, png_bytep dp, int display)
|
|||||||
/* Everything is aligned for png_uint_16 copies, but try for
|
/* Everything is aligned for png_uint_16 copies, but try for
|
||||||
* png_uint_32 first.
|
* png_uint_32 first.
|
||||||
*/
|
*/
|
||||||
if (png_isaligned(dp, png_uint_32) &&
|
if (png_isaligned(dp, png_uint_32) != 0 &&
|
||||||
png_isaligned(sp, png_uint_32) &&
|
png_isaligned(sp, png_uint_32) != 0 &&
|
||||||
bytes_to_copy % (sizeof (png_uint_32)) == 0 &&
|
bytes_to_copy % (sizeof (png_uint_32)) == 0 &&
|
||||||
bytes_to_jump % (sizeof (png_uint_32)) == 0)
|
bytes_to_jump % (sizeof (png_uint_32)) == 0)
|
||||||
{
|
{
|
||||||
|
|||||||
18
thirdparty/libpng/pngset.c
vendored
18
thirdparty/libpng/pngset.c
vendored
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngset.c - storage of image information into info struct
|
/* pngset.c - storage of image information into info struct
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.24 [August 4, 2016]
|
* Last changed in libpng 1.6.21 [January 15, 2016]
|
||||||
* Copyright (c) 1998-2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2015 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@@ -952,15 +952,13 @@ png_set_tRNS(png_structrp png_ptr, png_inforp info_ptr,
|
|||||||
|
|
||||||
png_free_data(png_ptr, info_ptr, PNG_FREE_TRNS, 0);
|
png_free_data(png_ptr, info_ptr, PNG_FREE_TRNS, 0);
|
||||||
|
|
||||||
if (num_trans > 0 && num_trans <= PNG_MAX_PALETTE_LENGTH)
|
|
||||||
{
|
|
||||||
/* Changed from num_trans to PNG_MAX_PALETTE_LENGTH in version 1.2.1 */
|
/* Changed from num_trans to PNG_MAX_PALETTE_LENGTH in version 1.2.1 */
|
||||||
info_ptr->trans_alpha = png_voidcast(png_bytep,
|
png_ptr->trans_alpha = info_ptr->trans_alpha = png_voidcast(png_bytep,
|
||||||
png_malloc(png_ptr, PNG_MAX_PALETTE_LENGTH));
|
png_malloc(png_ptr, PNG_MAX_PALETTE_LENGTH));
|
||||||
|
|
||||||
|
if (num_trans > 0 && num_trans <= PNG_MAX_PALETTE_LENGTH)
|
||||||
memcpy(info_ptr->trans_alpha, trans_alpha, (png_size_t)num_trans);
|
memcpy(info_ptr->trans_alpha, trans_alpha, (png_size_t)num_trans);
|
||||||
}
|
}
|
||||||
png_ptr->trans_alpha = info_ptr->trans_alpha;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (trans_color != NULL)
|
if (trans_color != NULL)
|
||||||
{
|
{
|
||||||
@@ -1662,9 +1660,7 @@ png_set_check_for_invalid_index(png_structrp png_ptr, int allowed)
|
|||||||
png_uint_32 /* PRIVATE */
|
png_uint_32 /* PRIVATE */
|
||||||
png_check_keyword(png_structrp png_ptr, png_const_charp key, png_bytep new_key)
|
png_check_keyword(png_structrp png_ptr, png_const_charp key, png_bytep new_key)
|
||||||
{
|
{
|
||||||
#ifdef PNG_WARNINGS_SUPPORTED
|
|
||||||
png_const_charp orig_key = key;
|
png_const_charp orig_key = key;
|
||||||
#endif
|
|
||||||
png_uint_32 key_len = 0;
|
png_uint_32 key_len = 0;
|
||||||
int bad_character = 0;
|
int bad_character = 0;
|
||||||
int space = 1;
|
int space = 1;
|
||||||
@@ -1727,9 +1723,7 @@ png_check_keyword(png_structrp png_ptr, png_const_charp key, png_bytep new_key)
|
|||||||
|
|
||||||
png_formatted_warning(png_ptr, p, "keyword \"@1\": bad character '0x@2'");
|
png_formatted_warning(png_ptr, p, "keyword \"@1\": bad character '0x@2'");
|
||||||
}
|
}
|
||||||
#else /* !WARNINGS */
|
#endif /* WARNINGS */
|
||||||
PNG_UNUSED(png_ptr)
|
|
||||||
#endif /* !WARNINGS */
|
|
||||||
|
|
||||||
return key_len;
|
return key_len;
|
||||||
}
|
}
|
||||||
|
|||||||
6
thirdparty/libpng/pngstruct.h
vendored
6
thirdparty/libpng/pngstruct.h
vendored
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngstruct.h - header file for PNG reference library
|
/* pngstruct.h - header file for PNG reference library
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.24 [August 4, 2016]
|
* Last changed in libpng 1.6.18 [July 23, 2015]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@@ -249,7 +249,7 @@ struct png_struct_def
|
|||||||
png_byte filter; /* file filter type (always 0) */
|
png_byte filter; /* file filter type (always 0) */
|
||||||
png_byte interlaced; /* PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
|
png_byte interlaced; /* PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
|
||||||
png_byte pass; /* current interlace pass (0 - 6) */
|
png_byte pass; /* current interlace pass (0 - 6) */
|
||||||
png_byte do_filter; /* row filter flags (see PNG_FILTER_ in png.h ) */
|
png_byte do_filter; /* row filter flags (see PNG_FILTER_ below ) */
|
||||||
png_byte color_type; /* color type of file */
|
png_byte color_type; /* color type of file */
|
||||||
png_byte bit_depth; /* bit depth of file */
|
png_byte bit_depth; /* bit depth of file */
|
||||||
png_byte usr_bit_depth; /* bit depth of users row: write only */
|
png_byte usr_bit_depth; /* bit depth of users row: write only */
|
||||||
|
|||||||
7
thirdparty/libpng/pngtrans.c
vendored
7
thirdparty/libpng/pngtrans.c
vendored
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngtrans.c - transforms the data in a row (used by both readers and writers)
|
/* pngtrans.c - transforms the data in a row (used by both readers and writers)
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.24 [August 4, 2016]
|
* Last changed in libpng 1.6.18 [July 23, 2015]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@@ -172,8 +172,7 @@ png_set_filler(png_structrp png_ptr, png_uint_32 filler, int filler_loc)
|
|||||||
* size!
|
* size!
|
||||||
*/
|
*/
|
||||||
png_app_error(png_ptr,
|
png_app_error(png_ptr,
|
||||||
"png_set_filler is invalid for"
|
"png_set_filler is invalid for low bit depth gray output");
|
||||||
" low bit depth gray output");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
4
thirdparty/libpng/pngwio.c
vendored
4
thirdparty/libpng/pngwio.c
vendored
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngwio.c - functions for data output
|
/* pngwio.c - functions for data output
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.24 [August 4, 2016]
|
* Last changed in libpng 1.6.15 [November 20, 2014]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2014,2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2014 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
|
|||||||
173
thirdparty/libpng/pngwrite.c
vendored
173
thirdparty/libpng/pngwrite.c
vendored
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngwrite.c - general routines to write a PNG file
|
/* pngwrite.c - general routines to write a PNG file
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.24 [August 4, 2016]
|
* Last changed in libpng 1.6.19 [November 12, 2015]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@@ -12,9 +12,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pngpriv.h"
|
#include "pngpriv.h"
|
||||||
#ifdef PNG_SIMPLIFIED_WRITE_STDIO_SUPPORTED
|
#if defined(PNG_SIMPLIFIED_WRITE_SUPPORTED) && defined(PNG_STDIO_SUPPORTED)
|
||||||
# include <errno.h>
|
# include <errno.h>
|
||||||
#endif /* SIMPLIFIED_WRITE_STDIO */
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_WRITE_SUPPORTED
|
#ifdef PNG_WRITE_SUPPORTED
|
||||||
|
|
||||||
@@ -1452,6 +1452,7 @@ png_write_png(png_structrp png_ptr, png_inforp info_ptr,
|
|||||||
|
|
||||||
|
|
||||||
#ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED
|
#ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED
|
||||||
|
# ifdef PNG_STDIO_SUPPORTED /* currently required for png_image_write_* */
|
||||||
/* Initialize the write structure - general purpose utility. */
|
/* Initialize the write structure - general purpose utility. */
|
||||||
static int
|
static int
|
||||||
png_image_write_init(png_imagep image)
|
png_image_write_init(png_imagep image)
|
||||||
@@ -1503,10 +1504,6 @@ typedef struct
|
|||||||
png_const_voidp first_row;
|
png_const_voidp first_row;
|
||||||
ptrdiff_t row_bytes;
|
ptrdiff_t row_bytes;
|
||||||
png_voidp local_row;
|
png_voidp local_row;
|
||||||
/* Byte count for memory writing */
|
|
||||||
png_bytep memory;
|
|
||||||
png_alloc_size_t memory_bytes; /* not used for STDIO */
|
|
||||||
png_alloc_size_t output_bytes; /* running total */
|
|
||||||
} png_image_write_control;
|
} png_image_write_control;
|
||||||
|
|
||||||
/* Write png_uint_16 input to a 16-bit PNG; the png_ptr has already been set to
|
/* Write png_uint_16 input to a 16-bit PNG; the png_ptr has already been set to
|
||||||
@@ -1934,43 +1931,9 @@ png_image_write_main(png_voidp argument)
|
|||||||
png_set_benign_errors(png_ptr, 0/*error*/);
|
png_set_benign_errors(png_ptr, 0/*error*/);
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
/* Default the 'row_stride' parameter if required, also check the row stride
|
/* Default the 'row_stride' parameter if required. */
|
||||||
* and total image size to ensure that they are within the system limits.
|
|
||||||
*/
|
|
||||||
{
|
|
||||||
const unsigned int channels = PNG_IMAGE_PIXEL_CHANNELS(image->format);
|
|
||||||
|
|
||||||
if (image->width <= 0x7FFFFFFFU/channels) /* no overflow */
|
|
||||||
{
|
|
||||||
png_uint_32 check;
|
|
||||||
const png_uint_32 png_row_stride = image->width * channels;
|
|
||||||
|
|
||||||
if (display->row_stride == 0)
|
if (display->row_stride == 0)
|
||||||
display->row_stride = (png_int_32)/*SAFE*/png_row_stride;
|
display->row_stride = PNG_IMAGE_ROW_STRIDE(*image);
|
||||||
|
|
||||||
if (display->row_stride < 0)
|
|
||||||
check = -display->row_stride;
|
|
||||||
|
|
||||||
else
|
|
||||||
check = display->row_stride;
|
|
||||||
|
|
||||||
if (check >= png_row_stride)
|
|
||||||
{
|
|
||||||
/* Now check for overflow of the image buffer calculation; this
|
|
||||||
* limits the whole image size to 32 bits for API compatibility with
|
|
||||||
* the current, 32-bit, PNG_IMAGE_BUFFER_SIZE macro.
|
|
||||||
*/
|
|
||||||
if (image->height > 0xFFFFFFFF/png_row_stride)
|
|
||||||
png_error(image->opaque->png_ptr, "memory image too large");
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
png_error(image->opaque->png_ptr, "supplied row stride too small");
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
png_error(image->opaque->png_ptr, "image row stride too large");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set the required transforms then write the rows in the correct order. */
|
/* Set the required transforms then write the rows in the correct order. */
|
||||||
if ((format & PNG_FORMAT_FLAG_COLORMAP) != 0)
|
if ((format & PNG_FORMAT_FLAG_COLORMAP) != 0)
|
||||||
@@ -2147,122 +2110,6 @@ png_image_write_main(png_voidp argument)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void (PNGCBAPI
|
|
||||||
image_memory_write)(png_structp png_ptr, png_bytep/*const*/ data,
|
|
||||||
png_size_t size)
|
|
||||||
{
|
|
||||||
png_image_write_control *display = png_voidcast(png_image_write_control*,
|
|
||||||
png_ptr->io_ptr/*backdoor: png_get_io_ptr(png_ptr)*/);
|
|
||||||
const png_alloc_size_t ob = display->output_bytes;
|
|
||||||
|
|
||||||
/* Check for overflow; this should never happen: */
|
|
||||||
if (size <= ((png_alloc_size_t)-1) - ob)
|
|
||||||
{
|
|
||||||
/* I don't think libpng ever does this, but just in case: */
|
|
||||||
if (size > 0)
|
|
||||||
{
|
|
||||||
if (display->memory_bytes >= ob+size) /* writing */
|
|
||||||
memcpy(display->memory+ob, data, size);
|
|
||||||
|
|
||||||
/* Always update the size: */
|
|
||||||
display->output_bytes = ob+size;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
png_error(png_ptr, "png_image_write_to_memory: PNG too big");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void (PNGCBAPI
|
|
||||||
image_memory_flush)(png_structp png_ptr)
|
|
||||||
{
|
|
||||||
PNG_UNUSED(png_ptr)
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
png_image_write_memory(png_voidp argument)
|
|
||||||
{
|
|
||||||
png_image_write_control *display = png_voidcast(png_image_write_control*,
|
|
||||||
argument);
|
|
||||||
|
|
||||||
/* The rest of the memory-specific init and write_main in an error protected
|
|
||||||
* environment. This case needs to use callbacks for the write operations
|
|
||||||
* since libpng has no built in support for writing to memory.
|
|
||||||
*/
|
|
||||||
png_set_write_fn(display->image->opaque->png_ptr, display/*io_ptr*/,
|
|
||||||
image_memory_write, image_memory_flush);
|
|
||||||
|
|
||||||
return png_image_write_main(display);
|
|
||||||
}
|
|
||||||
|
|
||||||
int PNGAPI
|
|
||||||
png_image_write_to_memory(png_imagep image, void *memory,
|
|
||||||
png_alloc_size_t * PNG_RESTRICT memory_bytes, int convert_to_8bit,
|
|
||||||
const void *buffer, png_int_32 row_stride, const void *colormap)
|
|
||||||
{
|
|
||||||
/* Write the image to the given buffer, or count the bytes if it is NULL */
|
|
||||||
if (image != NULL && image->version == PNG_IMAGE_VERSION)
|
|
||||||
{
|
|
||||||
if (memory_bytes != NULL && buffer != NULL)
|
|
||||||
{
|
|
||||||
/* This is to give the caller an easier error detection in the NULL
|
|
||||||
* case and guard against uninitialized variable problems:
|
|
||||||
*/
|
|
||||||
if (memory == NULL)
|
|
||||||
*memory_bytes = 0;
|
|
||||||
|
|
||||||
if (png_image_write_init(image) != 0)
|
|
||||||
{
|
|
||||||
png_image_write_control display;
|
|
||||||
int result;
|
|
||||||
|
|
||||||
memset(&display, 0, (sizeof display));
|
|
||||||
display.image = image;
|
|
||||||
display.buffer = buffer;
|
|
||||||
display.row_stride = row_stride;
|
|
||||||
display.colormap = colormap;
|
|
||||||
display.convert_to_8bit = convert_to_8bit;
|
|
||||||
display.memory = png_voidcast(png_bytep, memory);
|
|
||||||
display.memory_bytes = *memory_bytes;
|
|
||||||
display.output_bytes = 0;
|
|
||||||
|
|
||||||
result = png_safe_execute(image, png_image_write_memory, &display);
|
|
||||||
png_image_free(image);
|
|
||||||
|
|
||||||
/* write_memory returns true even if we ran out of buffer. */
|
|
||||||
if (result)
|
|
||||||
{
|
|
||||||
/* On out-of-buffer this function returns '0' but still updates
|
|
||||||
* memory_bytes:
|
|
||||||
*/
|
|
||||||
if (memory != NULL && display.output_bytes > *memory_bytes)
|
|
||||||
result = 0;
|
|
||||||
|
|
||||||
*memory_bytes = display.output_bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
return png_image_error(image,
|
|
||||||
"png_image_write_to_memory: invalid argument");
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (image != NULL)
|
|
||||||
return png_image_error(image,
|
|
||||||
"png_image_write_to_memory: incorrect PNG_IMAGE_VERSION");
|
|
||||||
|
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef PNG_SIMPLIFIED_WRITE_STDIO_SUPPORTED
|
|
||||||
int PNGAPI
|
int PNGAPI
|
||||||
png_image_write_to_stdio(png_imagep image, FILE *file, int convert_to_8bit,
|
png_image_write_to_stdio(png_imagep image, FILE *file, int convert_to_8bit,
|
||||||
const void *buffer, png_int_32 row_stride, const void *colormap)
|
const void *buffer, png_int_32 row_stride, const void *colormap)
|
||||||
@@ -2270,7 +2117,7 @@ png_image_write_to_stdio(png_imagep image, FILE *file, int convert_to_8bit,
|
|||||||
/* Write the image to the given (FILE*). */
|
/* Write the image to the given (FILE*). */
|
||||||
if (image != NULL && image->version == PNG_IMAGE_VERSION)
|
if (image != NULL && image->version == PNG_IMAGE_VERSION)
|
||||||
{
|
{
|
||||||
if (file != NULL && buffer != NULL)
|
if (file != NULL)
|
||||||
{
|
{
|
||||||
if (png_image_write_init(image) != 0)
|
if (png_image_write_init(image) != 0)
|
||||||
{
|
{
|
||||||
@@ -2320,7 +2167,7 @@ png_image_write_to_file(png_imagep image, const char *file_name,
|
|||||||
/* Write the image to the named file. */
|
/* Write the image to the named file. */
|
||||||
if (image != NULL && image->version == PNG_IMAGE_VERSION)
|
if (image != NULL && image->version == PNG_IMAGE_VERSION)
|
||||||
{
|
{
|
||||||
if (file_name != NULL && buffer != NULL)
|
if (file_name != NULL)
|
||||||
{
|
{
|
||||||
FILE *fp = fopen(file_name, "wb");
|
FILE *fp = fopen(file_name, "wb");
|
||||||
|
|
||||||
@@ -2378,6 +2225,6 @@ png_image_write_to_file(png_imagep image, const char *file_name,
|
|||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif /* SIMPLIFIED_WRITE_STDIO */
|
# endif /* STDIO */
|
||||||
#endif /* SIMPLIFIED_WRITE */
|
#endif /* SIMPLIFIED_WRITE */
|
||||||
#endif /* WRITE */
|
#endif /* WRITE */
|
||||||
|
|||||||
4
thirdparty/libpng/pngwtran.c
vendored
4
thirdparty/libpng/pngwtran.c
vendored
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngwtran.c - transforms the data in a row for PNG writers
|
/* pngwtran.c - transforms the data in a row for PNG writers
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.24 [August 4, 2016]
|
* Last changed in libpng 1.6.18 [July 23, 2015]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
|
|||||||
190
thirdparty/libpng/pngwutil.c
vendored
190
thirdparty/libpng/pngwutil.c
vendored
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngwutil.c - utilities to write a PNG file
|
/* pngwutil.c - utilities to write a PNG file
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.24 [August 4, 2016]
|
* Last changed in libpng 1.6.21 [January 15, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@@ -23,10 +23,10 @@
|
|||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_save_uint_32(png_bytep buf, png_uint_32 i)
|
png_save_uint_32(png_bytep buf, png_uint_32 i)
|
||||||
{
|
{
|
||||||
buf[0] = (png_byte)((i >> 24) & 0xffU);
|
buf[0] = (png_byte)(i >> 24);
|
||||||
buf[1] = (png_byte)((i >> 16) & 0xffU);
|
buf[1] = (png_byte)(i >> 16);
|
||||||
buf[2] = (png_byte)((i >> 8) & 0xffU);
|
buf[2] = (png_byte)(i >> 8);
|
||||||
buf[3] = (png_byte)( i & 0xffU);
|
buf[3] = (png_byte)(i );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Place a 16-bit number into a buffer in PNG byte order.
|
/* Place a 16-bit number into a buffer in PNG byte order.
|
||||||
@@ -36,8 +36,8 @@ png_save_uint_32(png_bytep buf, png_uint_32 i)
|
|||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_save_uint_16(png_bytep buf, unsigned int i)
|
png_save_uint_16(png_bytep buf, unsigned int i)
|
||||||
{
|
{
|
||||||
buf[0] = (png_byte)((i >> 8) & 0xffU);
|
buf[0] = (png_byte)(i >> 8);
|
||||||
buf[1] = (png_byte)( i & 0xffU);
|
buf[1] = (png_byte)(i );
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -1441,8 +1441,7 @@ png_write_bKGD(png_structrp png_ptr, png_const_color_16p back, int color_type)
|
|||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
png_warning(png_ptr,
|
png_warning(png_ptr,
|
||||||
"Ignoring attempt to write 16-bit bKGD chunk "
|
"Ignoring attempt to write 16-bit bKGD chunk when bit_depth is 8");
|
||||||
"when bit_depth is 8");
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -2263,22 +2262,14 @@ png_setup_sub_row(png_structrp png_ptr, const png_uint_32 bpp,
|
|||||||
i++, rp++, dp++)
|
i++, rp++, dp++)
|
||||||
{
|
{
|
||||||
v = *dp = *rp;
|
v = *dp = *rp;
|
||||||
#ifdef PNG_USE_ABS
|
|
||||||
sum += 128 - abs(v - 128);
|
|
||||||
#else
|
|
||||||
sum += (v < 128) ? v : 256 - v;
|
sum += (v < 128) ? v : 256 - v;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (lp = png_ptr->row_buf + 1; i < row_bytes;
|
for (lp = png_ptr->row_buf + 1; i < row_bytes;
|
||||||
i++, rp++, lp++, dp++)
|
i++, rp++, lp++, dp++)
|
||||||
{
|
{
|
||||||
v = *dp = (png_byte)(((int)*rp - (int)*lp) & 0xff);
|
v = *dp = (png_byte)(((int)*rp - (int)*lp) & 0xff);
|
||||||
#ifdef PNG_USE_ABS
|
|
||||||
sum += 128 - abs(v - 128);
|
|
||||||
#else
|
|
||||||
sum += (v < 128) ? v : 256 - v;
|
sum += (v < 128) ? v : 256 - v;
|
||||||
#endif
|
|
||||||
|
|
||||||
if (sum > lmins) /* We are already worse, don't continue. */
|
if (sum > lmins) /* We are already worse, don't continue. */
|
||||||
break;
|
break;
|
||||||
@@ -2287,28 +2278,6 @@ png_setup_sub_row(png_structrp png_ptr, const png_uint_32 bpp,
|
|||||||
return (sum);
|
return (sum);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void /* PRIVATE */
|
|
||||||
png_setup_sub_row_only(png_structrp png_ptr, const png_uint_32 bpp,
|
|
||||||
const png_size_t row_bytes)
|
|
||||||
{
|
|
||||||
png_bytep rp, dp, lp;
|
|
||||||
png_size_t i;
|
|
||||||
|
|
||||||
png_ptr->try_row[0] = PNG_FILTER_VALUE_SUB;
|
|
||||||
|
|
||||||
for (i = 0, rp = png_ptr->row_buf + 1, dp = png_ptr->try_row + 1; i < bpp;
|
|
||||||
i++, rp++, dp++)
|
|
||||||
{
|
|
||||||
*dp = *rp;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (lp = png_ptr->row_buf + 1; i < row_bytes;
|
|
||||||
i++, rp++, lp++, dp++)
|
|
||||||
{
|
|
||||||
*dp = (png_byte)(((int)*rp - (int)*lp) & 0xff);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static png_size_t /* PRIVATE */
|
static png_size_t /* PRIVATE */
|
||||||
png_setup_up_row(png_structrp png_ptr, const png_size_t row_bytes,
|
png_setup_up_row(png_structrp png_ptr, const png_size_t row_bytes,
|
||||||
const png_size_t lmins)
|
const png_size_t lmins)
|
||||||
@@ -2325,11 +2294,7 @@ png_setup_up_row(png_structrp png_ptr, const png_size_t row_bytes,
|
|||||||
i++, rp++, pp++, dp++)
|
i++, rp++, pp++, dp++)
|
||||||
{
|
{
|
||||||
v = *dp = (png_byte)(((int)*rp - (int)*pp) & 0xff);
|
v = *dp = (png_byte)(((int)*rp - (int)*pp) & 0xff);
|
||||||
#ifdef PNG_USE_ABS
|
|
||||||
sum += 128 - abs(v - 128);
|
|
||||||
#else
|
|
||||||
sum += (v < 128) ? v : 256 - v;
|
sum += (v < 128) ? v : 256 - v;
|
||||||
#endif
|
|
||||||
|
|
||||||
if (sum > lmins) /* We are already worse, don't continue. */
|
if (sum > lmins) /* We are already worse, don't continue. */
|
||||||
break;
|
break;
|
||||||
@@ -2337,21 +2302,6 @@ png_setup_up_row(png_structrp png_ptr, const png_size_t row_bytes,
|
|||||||
|
|
||||||
return (sum);
|
return (sum);
|
||||||
}
|
}
|
||||||
static void /* PRIVATE */
|
|
||||||
png_setup_up_row_only(png_structrp png_ptr, const png_size_t row_bytes)
|
|
||||||
{
|
|
||||||
png_bytep rp, dp, pp;
|
|
||||||
png_size_t i;
|
|
||||||
|
|
||||||
png_ptr->try_row[0] = PNG_FILTER_VALUE_UP;
|
|
||||||
|
|
||||||
for (i = 0, rp = png_ptr->row_buf + 1, dp = png_ptr->try_row + 1,
|
|
||||||
pp = png_ptr->prev_row + 1; i < row_bytes;
|
|
||||||
i++, rp++, pp++, dp++)
|
|
||||||
{
|
|
||||||
*dp = (png_byte)(((int)*rp - (int)*pp) & 0xff);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static png_size_t /* PRIVATE */
|
static png_size_t /* PRIVATE */
|
||||||
png_setup_avg_row(png_structrp png_ptr, const png_uint_32 bpp,
|
png_setup_avg_row(png_structrp png_ptr, const png_uint_32 bpp,
|
||||||
@@ -2369,11 +2319,7 @@ png_setup_avg_row(png_structrp png_ptr, const png_uint_32 bpp,
|
|||||||
{
|
{
|
||||||
v = *dp++ = (png_byte)(((int)*rp++ - ((int)*pp++ / 2)) & 0xff);
|
v = *dp++ = (png_byte)(((int)*rp++ - ((int)*pp++ / 2)) & 0xff);
|
||||||
|
|
||||||
#ifdef PNG_USE_ABS
|
|
||||||
sum += 128 - abs(v - 128);
|
|
||||||
#else
|
|
||||||
sum += (v < 128) ? v : 256 - v;
|
sum += (v < 128) ? v : 256 - v;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (lp = png_ptr->row_buf + 1; i < row_bytes; i++)
|
for (lp = png_ptr->row_buf + 1; i < row_bytes; i++)
|
||||||
@@ -2381,11 +2327,7 @@ png_setup_avg_row(png_structrp png_ptr, const png_uint_32 bpp,
|
|||||||
v = *dp++ = (png_byte)(((int)*rp++ - (((int)*pp++ + (int)*lp++) / 2))
|
v = *dp++ = (png_byte)(((int)*rp++ - (((int)*pp++ + (int)*lp++) / 2))
|
||||||
& 0xff);
|
& 0xff);
|
||||||
|
|
||||||
#ifdef PNG_USE_ABS
|
|
||||||
sum += 128 - abs(v - 128);
|
|
||||||
#else
|
|
||||||
sum += (v < 128) ? v : 256 - v;
|
sum += (v < 128) ? v : 256 - v;
|
||||||
#endif
|
|
||||||
|
|
||||||
if (sum > lmins) /* We are already worse, don't continue. */
|
if (sum > lmins) /* We are already worse, don't continue. */
|
||||||
break;
|
break;
|
||||||
@@ -2393,27 +2335,6 @@ png_setup_avg_row(png_structrp png_ptr, const png_uint_32 bpp,
|
|||||||
|
|
||||||
return (sum);
|
return (sum);
|
||||||
}
|
}
|
||||||
static void /* PRIVATE */
|
|
||||||
png_setup_avg_row_only(png_structrp png_ptr, const png_uint_32 bpp,
|
|
||||||
const png_size_t row_bytes)
|
|
||||||
{
|
|
||||||
png_bytep rp, dp, pp, lp;
|
|
||||||
png_uint_32 i;
|
|
||||||
|
|
||||||
png_ptr->try_row[0] = PNG_FILTER_VALUE_AVG;
|
|
||||||
|
|
||||||
for (i = 0, rp = png_ptr->row_buf + 1, dp = png_ptr->try_row + 1,
|
|
||||||
pp = png_ptr->prev_row + 1; i < bpp; i++)
|
|
||||||
{
|
|
||||||
*dp++ = (png_byte)(((int)*rp++ - ((int)*pp++ / 2)) & 0xff);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (lp = png_ptr->row_buf + 1; i < row_bytes; i++)
|
|
||||||
{
|
|
||||||
*dp++ = (png_byte)(((int)*rp++ - (((int)*pp++ + (int)*lp++) / 2))
|
|
||||||
& 0xff);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static png_size_t /* PRIVATE */
|
static png_size_t /* PRIVATE */
|
||||||
png_setup_paeth_row(png_structrp png_ptr, const png_uint_32 bpp,
|
png_setup_paeth_row(png_structrp png_ptr, const png_uint_32 bpp,
|
||||||
@@ -2431,11 +2352,7 @@ png_setup_paeth_row(png_structrp png_ptr, const png_uint_32 bpp,
|
|||||||
{
|
{
|
||||||
v = *dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff);
|
v = *dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff);
|
||||||
|
|
||||||
#ifdef PNG_USE_ABS
|
|
||||||
sum += 128 - abs(v - 128);
|
|
||||||
#else
|
|
||||||
sum += (v < 128) ? v : 256 - v;
|
sum += (v < 128) ? v : 256 - v;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (lp = png_ptr->row_buf + 1, cp = png_ptr->prev_row + 1; i < row_bytes;
|
for (lp = png_ptr->row_buf + 1, cp = png_ptr->prev_row + 1; i < row_bytes;
|
||||||
@@ -2464,11 +2381,7 @@ png_setup_paeth_row(png_structrp png_ptr, const png_uint_32 bpp,
|
|||||||
|
|
||||||
v = *dp++ = (png_byte)(((int)*rp++ - p) & 0xff);
|
v = *dp++ = (png_byte)(((int)*rp++ - p) & 0xff);
|
||||||
|
|
||||||
#ifdef PNG_USE_ABS
|
|
||||||
sum += 128 - abs(v - 128);
|
|
||||||
#else
|
|
||||||
sum += (v < 128) ? v : 256 - v;
|
sum += (v < 128) ? v : 256 - v;
|
||||||
#endif
|
|
||||||
|
|
||||||
if (sum > lmins) /* We are already worse, don't continue. */
|
if (sum > lmins) /* We are already worse, don't continue. */
|
||||||
break;
|
break;
|
||||||
@@ -2476,48 +2389,6 @@ png_setup_paeth_row(png_structrp png_ptr, const png_uint_32 bpp,
|
|||||||
|
|
||||||
return (sum);
|
return (sum);
|
||||||
}
|
}
|
||||||
static void /* PRIVATE */
|
|
||||||
png_setup_paeth_row_only(png_structrp png_ptr, const png_uint_32 bpp,
|
|
||||||
const png_size_t row_bytes)
|
|
||||||
{
|
|
||||||
png_bytep rp, dp, pp, cp, lp;
|
|
||||||
png_size_t i;
|
|
||||||
|
|
||||||
png_ptr->try_row[0] = PNG_FILTER_VALUE_PAETH;
|
|
||||||
|
|
||||||
for (i = 0, rp = png_ptr->row_buf + 1, dp = png_ptr->try_row + 1,
|
|
||||||
pp = png_ptr->prev_row + 1; i < bpp; i++)
|
|
||||||
{
|
|
||||||
*dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (lp = png_ptr->row_buf + 1, cp = png_ptr->prev_row + 1; i < row_bytes;
|
|
||||||
i++)
|
|
||||||
{
|
|
||||||
int a, b, c, pa, pb, pc, p;
|
|
||||||
|
|
||||||
b = *pp++;
|
|
||||||
c = *cp++;
|
|
||||||
a = *lp++;
|
|
||||||
|
|
||||||
p = b - c;
|
|
||||||
pc = a - c;
|
|
||||||
|
|
||||||
#ifdef PNG_USE_ABS
|
|
||||||
pa = abs(p);
|
|
||||||
pb = abs(pc);
|
|
||||||
pc = abs(p + pc);
|
|
||||||
#else
|
|
||||||
pa = p < 0 ? -p : p;
|
|
||||||
pb = pc < 0 ? -pc : pc;
|
|
||||||
pc = (p + pc) < 0 ? -(p + pc) : p + pc;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
p = (pa <= pb && pa <=pc) ? a : (pb <= pc) ? b : c;
|
|
||||||
|
|
||||||
*dp++ = (png_byte)(((int)*rp++ - p) & 0xff);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif /* WRITE_FILTER */
|
#endif /* WRITE_FILTER */
|
||||||
|
|
||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
@@ -2526,7 +2397,7 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
|
|||||||
#ifndef PNG_WRITE_FILTER_SUPPORTED
|
#ifndef PNG_WRITE_FILTER_SUPPORTED
|
||||||
png_write_filtered_row(png_ptr, png_ptr->row_buf, row_info->rowbytes+1);
|
png_write_filtered_row(png_ptr, png_ptr->row_buf, row_info->rowbytes+1);
|
||||||
#else
|
#else
|
||||||
unsigned int filter_to_do = png_ptr->do_filter;
|
png_byte filter_to_do = png_ptr->do_filter;
|
||||||
png_bytep row_buf;
|
png_bytep row_buf;
|
||||||
png_bytep best_row;
|
png_bytep best_row;
|
||||||
png_uint_32 bpp;
|
png_uint_32 bpp;
|
||||||
@@ -2572,33 +2443,32 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
|
|||||||
*/
|
*/
|
||||||
best_row = png_ptr->row_buf;
|
best_row = png_ptr->row_buf;
|
||||||
|
|
||||||
if (PNG_SIZE_MAX/128 <= row_bytes)
|
|
||||||
|
if ((filter_to_do & PNG_FILTER_NONE) != 0 && filter_to_do != PNG_FILTER_NONE)
|
||||||
{
|
{
|
||||||
/* Overflow can occur in the calculation, just select the lowest set
|
|
||||||
* filter.
|
|
||||||
*/
|
|
||||||
filter_to_do &= 0U-filter_to_do;
|
|
||||||
}
|
|
||||||
else if ((filter_to_do & PNG_FILTER_NONE) != 0 &&
|
|
||||||
filter_to_do != PNG_FILTER_NONE)
|
|
||||||
{
|
|
||||||
/* Overflow not possible and multiple filters in the list, including the
|
|
||||||
* 'none' filter.
|
|
||||||
*/
|
|
||||||
png_bytep rp;
|
png_bytep rp;
|
||||||
png_size_t sum = 0;
|
png_size_t sum = 0;
|
||||||
png_size_t i;
|
png_size_t i;
|
||||||
int v;
|
int v;
|
||||||
|
|
||||||
|
if (PNG_SIZE_MAX/128 <= row_bytes)
|
||||||
|
{
|
||||||
|
for (i = 0, rp = row_buf + 1; i < row_bytes; i++, rp++)
|
||||||
|
{
|
||||||
|
/* Check for overflow */
|
||||||
|
if (sum > PNG_SIZE_MAX/128 - 256)
|
||||||
|
break;
|
||||||
|
|
||||||
|
v = *rp;
|
||||||
|
sum += (v < 128) ? v : 256 - v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else /* Overflow is not possible */
|
||||||
{
|
{
|
||||||
for (i = 0, rp = row_buf + 1; i < row_bytes; i++, rp++)
|
for (i = 0, rp = row_buf + 1; i < row_bytes; i++, rp++)
|
||||||
{
|
{
|
||||||
v = *rp;
|
v = *rp;
|
||||||
#ifdef PNG_USE_ABS
|
|
||||||
sum += 128 - abs(v - 128);
|
|
||||||
#else
|
|
||||||
sum += (v < 128) ? v : 256 - v;
|
sum += (v < 128) ? v : 256 - v;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2609,7 +2479,7 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
|
|||||||
if (filter_to_do == PNG_FILTER_SUB)
|
if (filter_to_do == PNG_FILTER_SUB)
|
||||||
/* It's the only filter so no testing is needed */
|
/* It's the only filter so no testing is needed */
|
||||||
{
|
{
|
||||||
png_setup_sub_row_only(png_ptr, bpp, row_bytes);
|
(void) png_setup_sub_row(png_ptr, bpp, row_bytes, mins);
|
||||||
best_row = png_ptr->try_row;
|
best_row = png_ptr->try_row;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2635,7 +2505,7 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
|
|||||||
/* Up filter */
|
/* Up filter */
|
||||||
if (filter_to_do == PNG_FILTER_UP)
|
if (filter_to_do == PNG_FILTER_UP)
|
||||||
{
|
{
|
||||||
png_setup_up_row_only(png_ptr, row_bytes);
|
(void) png_setup_up_row(png_ptr, row_bytes, mins);
|
||||||
best_row = png_ptr->try_row;
|
best_row = png_ptr->try_row;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2661,7 +2531,7 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
|
|||||||
/* Avg filter */
|
/* Avg filter */
|
||||||
if (filter_to_do == PNG_FILTER_AVG)
|
if (filter_to_do == PNG_FILTER_AVG)
|
||||||
{
|
{
|
||||||
png_setup_avg_row_only(png_ptr, bpp, row_bytes);
|
(void) png_setup_avg_row(png_ptr, bpp, row_bytes, mins);
|
||||||
best_row = png_ptr->try_row;
|
best_row = png_ptr->try_row;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2685,9 +2555,9 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Paeth filter */
|
/* Paeth filter */
|
||||||
if (filter_to_do == PNG_FILTER_PAETH)
|
if ((filter_to_do == PNG_FILTER_PAETH) != 0)
|
||||||
{
|
{
|
||||||
png_setup_paeth_row_only(png_ptr, bpp, row_bytes);
|
(void) png_setup_paeth_row(png_ptr, bpp, row_bytes, mins);
|
||||||
best_row = png_ptr->try_row;
|
best_row = png_ptr->try_row;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,453 @@
|
|||||||
|
<!-- kind:binary;verdict:compatible;affected:0;added:0;removed:0;type_problems_high:0;type_problems_medium:0;type_problems_low:0;interface_problems_high:0;interface_problems_medium:0;interface_problems_low:0;changed_constants:0;tool_version:1.99.15 -->
|
||||||
|
<!-- kind:source;verdict:compatible;affected:0;added:0;removed:0;type_problems_high:0;type_problems_medium:0;type_problems_low:0;interface_problems_high:0;interface_problems_medium:0;interface_problems_low:0;changed_constants:0;tool_version:1.99.15 -->
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="keywords" content="openjpeg, compatibility, API, ABI, report" />
|
||||||
|
<meta name="description" content="API/ABI compatibility report for the openjpeg object between 2.1 and current versions" />
|
||||||
|
<title>
|
||||||
|
openjpeg: 2.1 to current compatibility report
|
||||||
|
</title>
|
||||||
|
<style type="text/css">
|
||||||
|
body {
|
||||||
|
font-family:Arial, sans-serif;
|
||||||
|
background-color:White;
|
||||||
|
color:Black;
|
||||||
|
}
|
||||||
|
hr {
|
||||||
|
color:Black;
|
||||||
|
background-color:Black;
|
||||||
|
height:1px;
|
||||||
|
border:0;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
margin-bottom:0px;
|
||||||
|
padding-bottom:0px;
|
||||||
|
font-size:1.625em;
|
||||||
|
}
|
||||||
|
h2 {
|
||||||
|
margin-bottom:0px;
|
||||||
|
padding-bottom:0px;
|
||||||
|
font-size:1.25em;
|
||||||
|
white-space:nowrap;
|
||||||
|
}
|
||||||
|
span.section {
|
||||||
|
font-weight:bold;
|
||||||
|
cursor:pointer;
|
||||||
|
color:#003E69;
|
||||||
|
white-space:nowrap;
|
||||||
|
margin-left:5px;
|
||||||
|
}
|
||||||
|
span.new_sign {
|
||||||
|
font-weight:bold;
|
||||||
|
margin-left:26px;
|
||||||
|
color:#003E69;
|
||||||
|
}
|
||||||
|
span.new_sign_lbl {
|
||||||
|
margin-left:28px;
|
||||||
|
font-size:0.875em;
|
||||||
|
color:Black;
|
||||||
|
}
|
||||||
|
span:hover.section {
|
||||||
|
color:#336699;
|
||||||
|
}
|
||||||
|
span.section_affected {
|
||||||
|
cursor:pointer;
|
||||||
|
margin-left:7px;
|
||||||
|
padding-left:15px;
|
||||||
|
font-size:0.875em;
|
||||||
|
color:#cc3300;
|
||||||
|
}
|
||||||
|
span.section_info {
|
||||||
|
cursor:pointer;
|
||||||
|
margin-left:7px;
|
||||||
|
padding-left:15px;
|
||||||
|
font-size:0.875em;
|
||||||
|
color:Black;
|
||||||
|
}
|
||||||
|
span.extendable {
|
||||||
|
font-weight:100;
|
||||||
|
}
|
||||||
|
span.h_name {
|
||||||
|
color:#cc3300;
|
||||||
|
font-size:0.875em;
|
||||||
|
font-weight:bold;
|
||||||
|
}
|
||||||
|
div.h_list, div.lib_list {
|
||||||
|
font-size:0.94em;
|
||||||
|
padding-left:5px;
|
||||||
|
}
|
||||||
|
span.ns {
|
||||||
|
color:#408080;
|
||||||
|
font-size:0.94em;
|
||||||
|
}
|
||||||
|
span.lib_name {
|
||||||
|
color:Green;
|
||||||
|
font-size:0.875em;
|
||||||
|
font-weight:bold;
|
||||||
|
}
|
||||||
|
span.iname {
|
||||||
|
font-weight:bold;
|
||||||
|
color:#003E69;
|
||||||
|
margin-left:5px;
|
||||||
|
}
|
||||||
|
span.iname_b {
|
||||||
|
font-weight:bold;
|
||||||
|
font-size:1.1em;
|
||||||
|
}
|
||||||
|
span.iname_a {
|
||||||
|
color:#333333;
|
||||||
|
font-weight:bold;
|
||||||
|
font-size:0.94em;
|
||||||
|
}
|
||||||
|
span.sym_p {
|
||||||
|
font-weight:normal;
|
||||||
|
white-space:normal;
|
||||||
|
}
|
||||||
|
div.affect {
|
||||||
|
padding-left:15px;
|
||||||
|
padding-bottom:10px;
|
||||||
|
font-size:0.87em;
|
||||||
|
font-style:italic;
|
||||||
|
line-height:0.75em;
|
||||||
|
}
|
||||||
|
div.affected {
|
||||||
|
padding-left:30px;
|
||||||
|
padding-top:10px;
|
||||||
|
}
|
||||||
|
table.ptable {
|
||||||
|
border-collapse:collapse;
|
||||||
|
border:1px outset black;
|
||||||
|
line-height:1em;
|
||||||
|
margin-left:15px;
|
||||||
|
margin-top:3px;
|
||||||
|
margin-bottom:3px;
|
||||||
|
width:900px;
|
||||||
|
|
||||||
|
}
|
||||||
|
table.ptable td {
|
||||||
|
border:1px solid gray;
|
||||||
|
padding: 3px;
|
||||||
|
font-size:0.875em;
|
||||||
|
}
|
||||||
|
table.vtable {
|
||||||
|
border-collapse:collapse;
|
||||||
|
border:1px outset black;
|
||||||
|
line-height:16px;
|
||||||
|
margin-left:30px;
|
||||||
|
margin-top:10px;
|
||||||
|
}
|
||||||
|
table.vtable td {
|
||||||
|
border:1px solid gray;
|
||||||
|
word-wrap:break-word;
|
||||||
|
padding: 3px;
|
||||||
|
font-size:0.875em;
|
||||||
|
max-width:450px;
|
||||||
|
vertical-align:top;
|
||||||
|
}
|
||||||
|
table.ptable th, table.vtable th {
|
||||||
|
background-color:#eeeeee;
|
||||||
|
font-weight:bold;
|
||||||
|
color:#333333;
|
||||||
|
font-family:Verdana, Arial;
|
||||||
|
font-size:0.81em;
|
||||||
|
border:1px solid gray;
|
||||||
|
text-align:center;
|
||||||
|
vertical-align:top;
|
||||||
|
white-space:nowrap;
|
||||||
|
padding: 3px;
|
||||||
|
}
|
||||||
|
table.summary {
|
||||||
|
border-collapse:collapse;
|
||||||
|
border:1px outset black;
|
||||||
|
}
|
||||||
|
table.summary th {
|
||||||
|
background-color:#eeeeee;
|
||||||
|
font-weight:100;
|
||||||
|
text-align:left;
|
||||||
|
font-size:0.94em;
|
||||||
|
white-space:nowrap;
|
||||||
|
border:1px inset gray;
|
||||||
|
padding: 3px;
|
||||||
|
}
|
||||||
|
table.summary td {
|
||||||
|
text-align:right;
|
||||||
|
white-space:nowrap;
|
||||||
|
border:1px inset gray;
|
||||||
|
padding: 3px 5px 3px 10px;
|
||||||
|
}
|
||||||
|
span.mangled {
|
||||||
|
padding-left:15px;
|
||||||
|
font-size:0.875em;
|
||||||
|
cursor:text;
|
||||||
|
color:#444444;
|
||||||
|
}
|
||||||
|
span.sym_ver {
|
||||||
|
color:#333333;
|
||||||
|
white-space:nowrap;
|
||||||
|
font-family:"DejaVu Sans Mono", Monospace;
|
||||||
|
}
|
||||||
|
span.attr {
|
||||||
|
color:#333333;
|
||||||
|
font-weight:100;
|
||||||
|
}
|
||||||
|
span.color_p {
|
||||||
|
font-style:italic;
|
||||||
|
color:Brown;
|
||||||
|
}
|
||||||
|
span.param {
|
||||||
|
font-style:italic;
|
||||||
|
}
|
||||||
|
span.focus_p {
|
||||||
|
font-style:italic;
|
||||||
|
/* color:Red; */
|
||||||
|
background-color:#FFCCCC;
|
||||||
|
}
|
||||||
|
span.ttype {
|
||||||
|
font-weight:100;
|
||||||
|
}
|
||||||
|
span.nowrap {
|
||||||
|
white-space:nowrap;
|
||||||
|
}
|
||||||
|
span.value {
|
||||||
|
white-space:nowrap;
|
||||||
|
font-weight:bold;
|
||||||
|
}
|
||||||
|
td.passed {
|
||||||
|
background-color:#CCFFCC;
|
||||||
|
}
|
||||||
|
td.warning {
|
||||||
|
background-color:#F4F4AF;
|
||||||
|
}
|
||||||
|
td.failed {
|
||||||
|
background-color:#FFCCCC;
|
||||||
|
}
|
||||||
|
td.new {
|
||||||
|
background-color:#C6DEFF;
|
||||||
|
}
|
||||||
|
.top_ref {
|
||||||
|
font-size:0.69em;
|
||||||
|
}
|
||||||
|
.footer {
|
||||||
|
font-size:0.75em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabset {
|
||||||
|
float:left;
|
||||||
|
}
|
||||||
|
a.tab {
|
||||||
|
border:1px solid Black;
|
||||||
|
float:left;
|
||||||
|
margin:0px 5px -1px 0px;
|
||||||
|
padding:3px 5px 3px 5px;
|
||||||
|
position:relative;
|
||||||
|
font-size:0.875em;
|
||||||
|
background-color:#DDD;
|
||||||
|
text-decoration:none;
|
||||||
|
color:Black;
|
||||||
|
}
|
||||||
|
a.disabled:hover
|
||||||
|
{
|
||||||
|
color:Black;
|
||||||
|
background:#EEE;
|
||||||
|
}
|
||||||
|
a.active:hover
|
||||||
|
{
|
||||||
|
color:Black;
|
||||||
|
background:White;
|
||||||
|
}
|
||||||
|
a.active {
|
||||||
|
border-bottom-color:White;
|
||||||
|
background-color:White;
|
||||||
|
}
|
||||||
|
div.tab {
|
||||||
|
border-top:1px solid Black;
|
||||||
|
padding:0px;
|
||||||
|
width:100%;
|
||||||
|
clear:both;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<script type="text/javascript" language="JavaScript">
|
||||||
|
<!--
|
||||||
|
function showContent(header, id)
|
||||||
|
{
|
||||||
|
e = document.getElementById(id);
|
||||||
|
if(e.style.display == 'none')
|
||||||
|
{
|
||||||
|
e.style.display = 'block';
|
||||||
|
e.style.visibility = 'visible';
|
||||||
|
header.innerHTML = header.innerHTML.replace(/\[[^0-9 ]\]/gi,"[−]");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
e.style.display = 'none';
|
||||||
|
e.style.visibility = 'hidden';
|
||||||
|
header.innerHTML = header.innerHTML.replace(/\[[^0-9 ]\]/gi,"[+]");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function initTabs()
|
||||||
|
{
|
||||||
|
var url = window.location.href;
|
||||||
|
if(url.indexOf('_Source_')!=-1 || url.indexOf('#Source')!=-1)
|
||||||
|
{
|
||||||
|
var tab1 = document.getElementById('BinaryID');
|
||||||
|
var tab2 = document.getElementById('SourceID');
|
||||||
|
tab1.className='tab disabled';
|
||||||
|
tab2.className='tab active';
|
||||||
|
}
|
||||||
|
var sets = document.getElementsByTagName('div');
|
||||||
|
for (var i = 0; i < sets.length; i++)
|
||||||
|
{
|
||||||
|
if (sets[i].className.indexOf('tabset') != -1)
|
||||||
|
{
|
||||||
|
var tabs = [];
|
||||||
|
var links = sets[i].getElementsByTagName('a');
|
||||||
|
for (var j = 0; j < links.length; j++)
|
||||||
|
{
|
||||||
|
if (links[j].className.indexOf('tab') != -1)
|
||||||
|
{
|
||||||
|
tabs.push(links[j]);
|
||||||
|
links[j].tabs = tabs;
|
||||||
|
var tab = document.getElementById(links[j].href.substr(links[j].href.indexOf('#') + 1));
|
||||||
|
//reset all tabs on start
|
||||||
|
if (tab)
|
||||||
|
{
|
||||||
|
if (links[j].className.indexOf('active')!=-1) {
|
||||||
|
tab.style.display = 'block';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
tab.style.display = 'none';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
links[j].onclick = function()
|
||||||
|
{
|
||||||
|
var tab = document.getElementById(this.href.substr(this.href.indexOf('#') + 1));
|
||||||
|
if (tab)
|
||||||
|
{
|
||||||
|
//reset all tabs before change
|
||||||
|
for (var k = 0; k < this.tabs.length; k++)
|
||||||
|
{
|
||||||
|
document.getElementById(this.tabs[k].href.substr(this.tabs[k].href.indexOf('#') + 1)).style.display = 'none';
|
||||||
|
this.tabs[k].className = this.tabs[k].className.replace('active', 'disabled');
|
||||||
|
}
|
||||||
|
this.className = 'tab active';
|
||||||
|
tab.style.display = 'block';
|
||||||
|
// window.location.hash = this.id.replace('ID', '');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(url.indexOf('#')!=-1) {
|
||||||
|
location.href=location.href;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (window.addEventListener) window.addEventListener('load', initTabs, false);
|
||||||
|
else if (window.attachEvent) window.attachEvent('onload', initTabs);
|
||||||
|
-->
|
||||||
|
</script>
|
||||||
|
</head><body><a name='Source'></a><a name='Binary'></a><a name='Top'></a><h1>API compatibility report for the <span style='color:Blue;'>libopenjp2.so</span> object between <span style='color:Red;'>2.1</span> and <span style='color:Red;'>current</span> versions on <span style='color:Blue;'>x86_64</span></h1>
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
<div class='tabset'>
|
||||||
|
<a id='BinaryID' href='#BinaryTab' class='tab active'>Binary<br/>Compatibility</a>
|
||||||
|
<a id='SourceID' href='#SourceTab' style='margin-left:3px' class='tab disabled'>Source<br/>Compatibility</a>
|
||||||
|
</div><div id='BinaryTab' class='tab'>
|
||||||
|
<h2>Test Info</h2><hr/>
|
||||||
|
<table class='summary'>
|
||||||
|
<tr><th>Module Name</th><td>openjpeg</td></tr>
|
||||||
|
<tr><th>Version #1</th><td>2.1</td></tr>
|
||||||
|
<tr><th>Version #2</th><td>current</td></tr>
|
||||||
|
<tr><th>CPU Type</th><td>x86_64</td></tr>
|
||||||
|
<tr><th>GCC Version</th><td>4.9.2</td></tr>
|
||||||
|
<tr><th>Subject</th><td width='150px'>Binary Compatibility</td></tr>
|
||||||
|
</table>
|
||||||
|
<h2>Test Results</h2><hr/>
|
||||||
|
<table class='summary'><tr><th>Total Header Files</th><td><a href='#Headers' style='color:Blue;'>1</a></td></tr>
|
||||||
|
<tr><th>Total Source Files</th><td><a href='#Sources' style='color:Blue;'>3</a></td></tr>
|
||||||
|
<tr><th>Total Objects</th><td><a href='#Libs' style='color:Blue;'>1</a></td></tr>
|
||||||
|
<tr><th>Total Symbols / Types</th><td>43 / 110</td></tr>
|
||||||
|
<tr><th>Verdict</th><td><span style='color:Green;'><b>Compatible</b></span></td></tr>
|
||||||
|
</table>
|
||||||
|
<h2>Problem Summary</h2><hr/>
|
||||||
|
<table class='summary'><tr><th></th><th style='text-align:center;'>Severity</th><th style='text-align:center;'>Count</th></tr><tr><th>Added Symbols</th><td>-</td><td>0</td></tr>
|
||||||
|
<tr><th>Removed Symbols</th><td>High</td><td>0</td></tr>
|
||||||
|
<tr><th rowspan='3'>Problems with<br/>Data Types</th><td>High</td><td>0</td></tr>
|
||||||
|
<tr><td>Medium</td><td>0</td></tr>
|
||||||
|
<tr><td>Low</td><td>0</td></tr>
|
||||||
|
<tr><th rowspan='3'>Problems with<br/>Symbols</th><td>High</td><td>0</td></tr>
|
||||||
|
<tr><td>Medium</td><td>0</td></tr>
|
||||||
|
<tr><td>Low</td><td>0</td></tr>
|
||||||
|
<tr><th>Problems with<br/>Constants</th><td>Low</td><td>0</td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<a name='Headers'></a><h2>Header Files (1)</h2><hr/>
|
||||||
|
<div class='h_list'>
|
||||||
|
openjpeg.h<br/>
|
||||||
|
</div>
|
||||||
|
<br/><a class='top_ref' href='#Top'>to the top</a><br/>
|
||||||
|
<a name='Sources'></a><h2>Source Files (3)</h2><hr/>
|
||||||
|
<div class='h_list'>
|
||||||
|
cio.c<br/>
|
||||||
|
image.c<br/>
|
||||||
|
openjpeg.c<br/>
|
||||||
|
</div>
|
||||||
|
<br/><a class='top_ref' href='#Top'>to the top</a><br/>
|
||||||
|
<a name='Libs'></a><h2>Objects (1)</h2><hr/>
|
||||||
|
<div class='lib_list'>
|
||||||
|
libopenjp2.so.2.1.0<br/>
|
||||||
|
</div>
|
||||||
|
<br/><a class='top_ref' href='#Top'>to the top</a><br/>
|
||||||
|
<br/><br/><br/></div><div id='SourceTab' class='tab'>
|
||||||
|
<h2>Test Info</h2><hr/>
|
||||||
|
<table class='summary'>
|
||||||
|
<tr><th>Module Name</th><td>openjpeg</td></tr>
|
||||||
|
<tr><th>Version #1</th><td>2.1</td></tr>
|
||||||
|
<tr><th>Version #2</th><td>current</td></tr>
|
||||||
|
<tr><th>CPU Type</th><td>x86_64</td></tr>
|
||||||
|
<tr><th>GCC Version</th><td>4.9.2</td></tr>
|
||||||
|
<tr><th>Subject</th><td width='150px'>Source Compatibility</td></tr>
|
||||||
|
</table>
|
||||||
|
<h2>Test Results</h2><hr/>
|
||||||
|
<table class='summary'><tr><th>Total Header Files</th><td><a href='#Headers' style='color:Blue;'>1</a></td></tr>
|
||||||
|
<tr><th>Total Source Files</th><td><a href='#Sources' style='color:Blue;'>3</a></td></tr>
|
||||||
|
<tr><th>Total Objects</th><td><a href='#Libs' style='color:Blue;'>1</a></td></tr>
|
||||||
|
<tr><th>Total Symbols / Types</th><td>43 / 110</td></tr>
|
||||||
|
<tr><th>Verdict</th><td><span style='color:Green;'><b>Compatible</b></span></td></tr>
|
||||||
|
</table>
|
||||||
|
<h2>Problem Summary</h2><hr/>
|
||||||
|
<table class='summary'><tr><th></th><th style='text-align:center;'>Severity</th><th style='text-align:center;'>Count</th></tr><tr><th>Added Symbols</th><td>-</td><td>0</td></tr>
|
||||||
|
<tr><th>Removed Symbols</th><td>High</td><td>0</td></tr>
|
||||||
|
<tr><th rowspan='3'>Problems with<br/>Data Types</th><td>High</td><td>0</td></tr>
|
||||||
|
<tr><td>Medium</td><td>0</td></tr>
|
||||||
|
<tr><td>Low</td><td>0</td></tr>
|
||||||
|
<tr><th rowspan='3'>Problems with<br/>Symbols</th><td>High</td><td>0</td></tr>
|
||||||
|
<tr><td>Medium</td><td>0</td></tr>
|
||||||
|
<tr><td>Low</td><td>0</td></tr>
|
||||||
|
<tr><th>Problems with<br/>Constants</th><td>Low</td><td>0</td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<a name='Headers'></a><h2>Header Files (1)</h2><hr/>
|
||||||
|
<div class='h_list'>
|
||||||
|
openjpeg.h<br/>
|
||||||
|
</div>
|
||||||
|
<br/><a class='top_ref' href='#Top'>to the top</a><br/>
|
||||||
|
<a name='Sources'></a><h2>Source Files (3)</h2><hr/>
|
||||||
|
<div class='h_list'>
|
||||||
|
cio.c<br/>
|
||||||
|
image.c<br/>
|
||||||
|
openjpeg.c<br/>
|
||||||
|
</div>
|
||||||
|
<br/><a class='top_ref' href='#Top'>to the top</a><br/>
|
||||||
|
<a name='Libs'></a><h2>Objects (1)</h2><hr/>
|
||||||
|
<div class='lib_list'>
|
||||||
|
libopenjp2.so.2.1.0<br/>
|
||||||
|
</div>
|
||||||
|
<br/><a class='top_ref' href='#Top'>to the top</a><br/>
|
||||||
|
<br/><br/><br/></div><hr/><div class='footer' align='right'><i>Generated on Mon Jan 25 14:47:00 2016 by <a href='http://lvc.github.io/abi-compliance-checker/'>ABI Compliance Checker</a> 1.99.15  </i></div><br/>
|
||||||
|
|
||||||
|
</body></html>
|
||||||
Reference in New Issue
Block a user