Commit 9b9a4db2 for libheif
commit 9b9a4db26236ae0c62d204b3104f0c189b95b9c0
Author: Dirk Farin <dirk.farin@gmail.com>
Date: Thu Jun 25 18:31:11 2026 +0200
Add C++ wrapper getters/setters for CLLI and MDCV HDR boxes (#1825)
Wrap the existing content-light-level (clli) and mastering-display-colour-volume
(mdcv) C API functions in the old C++ wrapper, for both Image and ImageHandle.
diff --git a/libheif/api/libheif/heif_cxx.h b/libheif/api/libheif/heif_cxx.h
index ed2420b9..7e83f936 100644
--- a/libheif/api/libheif/heif_cxx.h
+++ b/libheif/api/libheif/heif_cxx.h
@@ -232,6 +232,22 @@ namespace heif {
int get_ispe_height() const noexcept;
+ // ------------------------- HDR metadata -------------------------
+
+ bool has_content_light_level() const noexcept;
+
+ // Returns a zero-initialized struct if the image has no such information.
+ heif_content_light_level get_content_light_level() const noexcept;
+
+ void set_content_light_level(const heif_content_light_level&) noexcept;
+
+ bool has_mastering_display_colour_volume() const noexcept;
+
+ // Returns a zero-initialized struct if the image has no such information.
+ heif_mastering_display_colour_volume get_mastering_display_colour_volume() const noexcept;
+
+ void set_mastering_display_colour_volume(const heif_mastering_display_colour_volume&) noexcept;
+
// ------------------------- depth images -------------------------
// TODO
@@ -368,6 +384,22 @@ namespace heif {
void set_raw_color_profile(heif_color_profile_type type,
const std::vector<uint8_t>& data);
+ // ------------------------- HDR metadata -------------------------
+
+ bool has_content_light_level() const noexcept;
+
+ // Returns a zero-initialized struct if the image has no such information.
+ heif_content_light_level get_content_light_level() const noexcept;
+
+ void set_content_light_level(const heif_content_light_level&) noexcept;
+
+ bool has_mastering_display_colour_volume() const noexcept;
+
+ // Returns a zero-initialized struct if the image has no such information.
+ heif_mastering_display_colour_volume get_mastering_display_colour_volume() const noexcept;
+
+ void set_mastering_display_colour_volume(const heif_mastering_display_colour_volume&) noexcept;
+
bool is_premultiplied_alpha() const noexcept;
void set_premultiplied_alpha(bool is_premultiplied_alpha) noexcept;
@@ -722,6 +754,40 @@ namespace heif {
return heif_image_handle_get_ispe_height(m_image_handle.get());
}
+ inline bool ImageHandle::has_content_light_level() const noexcept
+ {
+ return heif_image_handle_has_content_light_level(m_image_handle.get()) != 0;
+ }
+
+ inline heif_content_light_level ImageHandle::get_content_light_level() const noexcept
+ {
+ heif_content_light_level clli{};
+ heif_image_handle_get_content_light_level(m_image_handle.get(), &clli);
+ return clli;
+ }
+
+ inline void ImageHandle::set_content_light_level(const heif_content_light_level& clli) noexcept
+ {
+ heif_image_handle_set_content_light_level(m_image_handle.get(), &clli);
+ }
+
+ inline bool ImageHandle::has_mastering_display_colour_volume() const noexcept
+ {
+ return heif_image_handle_has_mastering_display_colour_volume(m_image_handle.get()) != 0;
+ }
+
+ inline heif_mastering_display_colour_volume ImageHandle::get_mastering_display_colour_volume() const noexcept
+ {
+ heif_mastering_display_colour_volume mdcv{};
+ heif_image_handle_get_mastering_display_colour_volume(m_image_handle.get(), &mdcv);
+ return mdcv;
+ }
+
+ inline void ImageHandle::set_mastering_display_colour_volume(const heif_mastering_display_colour_volume& mdcv) noexcept
+ {
+ heif_image_handle_set_mastering_display_colour_volume(m_image_handle.get(), &mdcv);
+ }
+
// ------------------------- depth images -------------------------
// TODO
@@ -998,6 +1064,40 @@ namespace heif {
}
}
+ inline bool Image::has_content_light_level() const noexcept
+ {
+ return heif_image_has_content_light_level(m_image.get()) != 0;
+ }
+
+ inline heif_content_light_level Image::get_content_light_level() const noexcept
+ {
+ heif_content_light_level clli{};
+ heif_image_get_content_light_level(m_image.get(), &clli);
+ return clli;
+ }
+
+ inline void Image::set_content_light_level(const heif_content_light_level& clli) noexcept
+ {
+ heif_image_set_content_light_level(m_image.get(), &clli);
+ }
+
+ inline bool Image::has_mastering_display_colour_volume() const noexcept
+ {
+ return heif_image_has_mastering_display_colour_volume(m_image.get()) != 0;
+ }
+
+ inline heif_mastering_display_colour_volume Image::get_mastering_display_colour_volume() const noexcept
+ {
+ heif_mastering_display_colour_volume mdcv{};
+ heif_image_get_mastering_display_colour_volume(m_image.get(), &mdcv);
+ return mdcv;
+ }
+
+ inline void Image::set_mastering_display_colour_volume(const heif_mastering_display_colour_volume& mdcv) noexcept
+ {
+ heif_image_set_mastering_display_colour_volume(m_image.get(), &mdcv);
+ }
+
inline bool Image::is_premultiplied_alpha() const noexcept
{
return heif_image_is_premultiplied_alpha(m_image.get()) != 0;