Commit 5048bcdd for libheif

commit 5048bcdd757c92bcb8d6f40bf678f4e8ec558f17
Author: Dirk Farin <dirk.farin@gmail.com>
Date:   Thu Feb 26 20:24:10 2026 +0100

    simplify copying image metadata in color conversion

diff --git a/libheif/color-conversion/colorconversion.cc b/libheif/color-conversion/colorconversion.cc
index 0a36ad6b..1c0be8a5 100644
--- a/libheif/color-conversion/colorconversion.cc
+++ b/libheif/color-conversion/colorconversion.cc
@@ -457,41 +457,12 @@ Result<std::shared_ptr<HeifPixelImage>> ColorConversionPipeline::convert_image(c
       out = *outResult;
     }

-    // --- pass the color profiles to the new image
+    // copy metadata over to new image
+    out->forward_all_metadata_from(in);

+    // overwrite color profile nclx from color conversion
     out->set_color_profile_nclx(step.output_state.nclx);
-    out->set_color_profile_icc(in->get_color_profile_icc());

-    out->set_premultiplied_alpha(in->is_premultiplied_alpha());
-
-    // pass through HDR information
-    if (in->has_clli()) {
-      out->set_clli(in->get_clli());
-    }
-
-    if (in->has_mdcv()) {
-      out->set_mdcv(in->get_mdcv());
-    }
-
-    if (in->has_nonsquare_pixel_ratio()) {
-      uint32_t h, v;
-      in->get_pixel_ratio(&h, &v);
-      out->set_pixel_ratio(h, v);
-    }
-
-    if (in->has_gimi_sample_content_id()) {
-      out->set_gimi_sample_content_id(in->get_gimi_sample_content_id());
-    }
-
-    if (auto* tai = in->get_tai_timestamp()) {
-      out->set_tai_timestamp(tai);
-    }
-
-    out->set_sample_duration(in->get_sample_duration());
-
-#if HEIF_WITH_OMAF
-    out->set_omaf_image_projection(in->get_omaf_image_projection());
-#endif

     const auto& warnings = in->get_warnings();
     for (const auto& warning : warnings) {
diff --git a/libheif/pixelimage.cc b/libheif/pixelimage.cc
index b7a0201f..62e6d25f 100644
--- a/libheif/pixelimage.cc
+++ b/libheif/pixelimage.cc
@@ -1880,26 +1880,41 @@ Error HeifPixelImage::scale_nearest_neighbor(std::shared_ptr<HeifPixelImage>& ou

 void HeifPixelImage::forward_all_metadata_from(const std::shared_ptr<const HeifPixelImage>& src_image)
 {
+  // --- pass the color profiles to the new image
+
   set_color_profile_nclx(src_image->get_color_profile_nclx());
   set_color_profile_icc(src_image->get_color_profile_icc());

+  set_premultiplied_alpha(src_image->is_premultiplied_alpha());
+
+  // pass through HDR information
+  if (src_image->has_clli()) {
+    set_clli(src_image->get_clli());
+  }
+
+  if (src_image->has_mdcv()) {
+    set_mdcv(src_image->get_mdcv());
+  }
+
   if (src_image->has_nonsquare_pixel_ratio()) {
     uint32_t h,v;
     src_image->get_pixel_ratio(&h,&v);
     set_pixel_ratio(h,v);
   }

-  if (src_image->has_clli()) {
-    set_clli(src_image->get_clli());
+  if (src_image->has_gimi_sample_content_id()) {
+    set_gimi_sample_content_id(src_image->get_gimi_sample_content_id());
   }

-  if (src_image->has_mdcv()) {
-    set_mdcv(src_image->get_mdcv());
+  if (auto* tai = src_image->get_tai_timestamp()) {
+    set_tai_timestamp(tai);
   }

-  set_premultiplied_alpha(src_image->is_premultiplied_alpha());
+  set_sample_duration(src_image->get_sample_duration());

-  // TODO: TAI timestamp and contentID (once we merge that branch)
+#if HEIF_WITH_OMAF
+  set_omaf_image_projection(src_image->get_omaf_image_projection());
+#endif

   // TODO: should we also forward the warnings? It might be better to do that in ImageItem_Grid.