Commit 1951f3a0 for libheif
commit 1951f3a0b7d89668b8fcc94391a02a3cc21b71a7
Author: Dirk Farin <dirk.farin@gmail.com>
Date: Mon Apr 13 13:00:09 2026 +0200
add cmake option to use locally built libpng (for testing HDR features) (#1697)
diff --git a/heifio/CMakeLists.txt b/heifio/CMakeLists.txt
index e6b1bbf7..8eac04f5 100644
--- a/heifio/CMakeLists.txt
+++ b/heifio/CMakeLists.txt
@@ -79,8 +79,23 @@ int main() {
endif ()
-find_package(PNG)
-set(PNG_FOUND ${PNG_FOUND} PARENT_SCOPE)
+option(WITH_LIBPNG_INTERNAL "Use the libpng build in the 'third-party' directory" OFF)
+
+if (WITH_LIBPNG_INTERNAL)
+ add_library(PNG::PNG STATIC IMPORTED)
+ set_target_properties(PNG::PNG PROPERTIES
+ IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/third-party/libpng/build/dist/lib/libpng.a"
+ INTERFACE_INCLUDE_DIRECTORIES "${PROJECT_SOURCE_DIR}/third-party/libpng/build/dist/include"
+ )
+ find_package(ZLIB REQUIRED)
+ target_link_libraries(PNG::PNG INTERFACE ZLIB::ZLIB m)
+ set(PNG_FOUND ON)
+ set(PNG_FOUND ON PARENT_SCOPE)
+else()
+ find_package(PNG)
+ set(PNG_FOUND ${PNG_FOUND} PARENT_SCOPE)
+endif()
+
if (TARGET PNG::PNG)
target_compile_definitions(heifio PUBLIC -DHAVE_LIBPNG=1)
diff --git a/heifio/decoder_png.cc b/heifio/decoder_png.cc
index 69ff6c6b..543bfb20 100644
--- a/heifio/decoder_png.cc
+++ b/heifio/decoder_png.cc
@@ -472,6 +472,11 @@ heif_error loadPNG(const char* filename, int output_bit_depth, InputImage *input
if (nclx) {
heif_nclx_color_profile_set_color_primaries(nclx, color_primaries);
heif_nclx_color_profile_set_transfer_characteristics(nclx, transfer_characteristics);
+
+ // Since matrix_coefficients are always 0 for PNGs, choose coefficients as default that
+ // match the color primaries.
+ // TODO: should we move this into libheif?
+
switch (color_primaries) {
case heif_color_primaries_ITU_R_BT_709_5:
default:
diff --git a/third-party/libpng.cmd b/third-party/libpng.cmd
new file mode 100644
index 00000000..f573aa1a
--- /dev/null
+++ b/third-party/libpng.cmd
@@ -0,0 +1,13 @@
+: # If you want to use a local libpng build, please check that the WITH_LIBPNG_INTERNAL CMake variable is set correctly.
+
+: # The odd choice of comment style in this file is to try to share this script between *nix and win32.
+
+git clone --single-branch https://github.com/pnggroup/libpng.git
+
+cd libpng
+mkdir build
+cd build
+cmake -G Ninja -DCMAKE_INSTALL_PREFIX="$(pwd)/dist" -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -DPNG_TESTS=OFF -DPNG_TOOLS=OFF ..
+ninja
+ninja install
+cd ../..