Commit e1f77d0e for libheif
commit e1f77d0e649ecab2e910f58aebb3035ea3e070b4
Author: Dirk Farin <dirk.farin@gmail.com>
Date: Thu Mar 5 20:16:14 2026 +0100
fix decoding tili images with unci compression
diff --git a/libheif/codecs/decoder.cc b/libheif/codecs/decoder.cc
index 333cf4bd..4a734d43 100644
--- a/libheif/codecs/decoder.cc
+++ b/libheif/codecs/decoder.cc
@@ -151,7 +151,15 @@ std::shared_ptr<Decoder> Decoder::alloc_for_infe_type(const ImageItem* item)
auto uncC = item->get_property<Box_uncC>();
auto cmpd = item->get_property<Box_cmpd>();
auto ispe = item->get_property<Box_ispe>();
- return std::make_shared<Decoder_uncompressed>(uncC,cmpd,ispe);
+ auto decoder = std::make_shared<Decoder_uncompressed>(uncC, cmpd, ispe);
+ decoder->set_cpat(item->get_property<Box_cpat>());
+ decoder->set_cmpC(item->get_property<Box_cmpC>());
+ decoder->set_icef(item->get_property<Box_icef>());
+ decoder->set_cloc(item->get_property<Box_cloc>());
+ decoder->set_splz(item->get_all_properties<Box_splz>());
+ decoder->set_sbpm(item->get_all_properties<Box_sbpm>());
+ decoder->set_snuc(item->get_all_properties<Box_snuc>());
+ return decoder;
}
#endif
case fourcc("mski"): {
diff --git a/libheif/codecs/uncompressed/unc_dec.h b/libheif/codecs/uncompressed/unc_dec.h
index 0d79ca7d..c1d22d56 100644
--- a/libheif/codecs/uncompressed/unc_dec.h
+++ b/libheif/codecs/uncompressed/unc_dec.h
@@ -52,6 +52,11 @@ public:
void set_cmpC(std::shared_ptr<const Box_cmpC> cmpC) { m_cmpC = std::move(cmpC); }
void set_icef(std::shared_ptr<const Box_icef> icef) { m_icef = std::move(icef); }
void set_cloc(std::shared_ptr<const Box_cloc> cloc) { m_cloc = std::move(cloc); }
+ void set_splz(std::vector<std::shared_ptr<const Box_splz>> splz) { m_splz = std::move(splz); }
+ void set_sbpm(std::vector<std::shared_ptr<const Box_sbpm>> sbpm) { m_sbpm = std::move(sbpm); }
+ void set_snuc(std::vector<std::shared_ptr<const Box_snuc>> snuc) { m_snuc = std::move(snuc); }
+
+ // Overloads accepting non-const shared_ptrs (from get_child_boxes)
void set_splz(std::vector<std::shared_ptr<Box_splz>> splz) { m_splz.assign(splz.begin(), splz.end()); }
void set_sbpm(std::vector<std::shared_ptr<Box_sbpm>> sbpm) { m_sbpm.assign(sbpm.begin(), sbpm.end()); }
void set_snuc(std::vector<std::shared_ptr<Box_snuc>> snuc) { m_snuc.assign(snuc.begin(), snuc.end()); }