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.