Commit dd7ab0b8 for libheif
commit dd7ab0b89c675c822988aae464cd4a133349d973
Author: Dirk Farin <dirk.farin@gmail.com>
Date: Mon Feb 9 00:50:08 2026 +0100
unci: remove isKnownUncompressedFrameConfigurationBoxProfile()
diff --git a/libheif/codecs/uncompressed/unc_boxes.cc b/libheif/codecs/uncompressed/unc_boxes.cc
index ff2702c0..b34ba80c 100644
--- a/libheif/codecs/uncompressed/unc_boxes.cc
+++ b/libheif/codecs/uncompressed/unc_boxes.cc
@@ -417,20 +417,20 @@ Error Box_uncC::write(StreamWriter& writer) const
}
-void fill_uncC_and_cmpd_from_profile(Box_uncC& uncC,
+void fill_uncC_and_cmpd_from_profile(const std::shared_ptr<Box_uncC>& uncC,
std::shared_ptr<Box_cmpd>& cmpd)
{
- if (uncC.get_version() != 1 || cmpd) {
+ if (uncC->get_version() != 1 || cmpd) {
return;
}
// Return cached synthetic cmpd if we already created one.
- if (auto synthetic = uncC.get_synthetic_cmpd()) {
+ if (auto synthetic = uncC->get_synthetic_cmpd()) {
cmpd = synthetic;
return;
}
- uint32_t profile = uncC.get_profile();
+ uint32_t profile = uncC->get_profile();
cmpd = std::make_shared<Box_cmpd>();
// Profiles from ISO/IEC 23001-17 Table 5.
@@ -440,263 +440,263 @@ void fill_uncC_and_cmpd_from_profile(Box_uncC& uncC,
if (profile == fourcc("rgb3")) {
// {'rgb3', [{4,7},{5,7},{6,7}], 0, 1}
- uncC.add_component({0, 8, component_format_unsigned, 0});
- uncC.add_component({1, 8, component_format_unsigned, 0});
- uncC.add_component({2, 8, component_format_unsigned, 0});
+ uncC->add_component({0, 8, component_format_unsigned, 0});
+ uncC->add_component({1, 8, component_format_unsigned, 0});
+ uncC->add_component({2, 8, component_format_unsigned, 0});
cmpd->add_component({component_type_red});
cmpd->add_component({component_type_green});
cmpd->add_component({component_type_blue});
- uncC.set_sampling_type(sampling_mode_no_subsampling);
- uncC.set_interleave_type(interleave_mode_pixel);
+ uncC->set_sampling_type(sampling_mode_no_subsampling);
+ uncC->set_interleave_type(interleave_mode_pixel);
}
else if (profile == fourcc("rgba")) {
// {'rgba', [{4,7},{5,7},{6,7},{7,7}], 0, 1}
- uncC.add_component({0, 8, component_format_unsigned, 0});
- uncC.add_component({1, 8, component_format_unsigned, 0});
- uncC.add_component({2, 8, component_format_unsigned, 0});
- uncC.add_component({3, 8, component_format_unsigned, 0});
+ uncC->add_component({0, 8, component_format_unsigned, 0});
+ uncC->add_component({1, 8, component_format_unsigned, 0});
+ uncC->add_component({2, 8, component_format_unsigned, 0});
+ uncC->add_component({3, 8, component_format_unsigned, 0});
cmpd->add_component({component_type_red});
cmpd->add_component({component_type_green});
cmpd->add_component({component_type_blue});
cmpd->add_component({component_type_alpha});
- uncC.set_sampling_type(sampling_mode_no_subsampling);
- uncC.set_interleave_type(interleave_mode_pixel);
+ uncC->set_sampling_type(sampling_mode_no_subsampling);
+ uncC->set_interleave_type(interleave_mode_pixel);
}
else if (profile == fourcc("abgr")) {
// {'abgr', [{7,7},{6,7},{5,7},{4,7}], 0, 1}
- uncC.add_component({0, 8, component_format_unsigned, 0});
- uncC.add_component({1, 8, component_format_unsigned, 0});
- uncC.add_component({2, 8, component_format_unsigned, 0});
- uncC.add_component({3, 8, component_format_unsigned, 0});
+ uncC->add_component({0, 8, component_format_unsigned, 0});
+ uncC->add_component({1, 8, component_format_unsigned, 0});
+ uncC->add_component({2, 8, component_format_unsigned, 0});
+ uncC->add_component({3, 8, component_format_unsigned, 0});
cmpd->add_component({component_type_alpha});
cmpd->add_component({component_type_blue});
cmpd->add_component({component_type_green});
cmpd->add_component({component_type_red});
- uncC.set_sampling_type(sampling_mode_no_subsampling);
- uncC.set_interleave_type(interleave_mode_pixel);
+ uncC->set_sampling_type(sampling_mode_no_subsampling);
+ uncC->set_interleave_type(interleave_mode_pixel);
}
else if (profile == fourcc("2vuy")) {
// {'2vuy', [{2,7},{1,7},{3,7},{1,7}], 1, 5} Cb Y0 Cr Y1
// cmpd: Cb(0) Y(1) Cr(2)
- uncC.add_component({0, 8, component_format_unsigned, 0});
- uncC.add_component({1, 8, component_format_unsigned, 0});
- uncC.add_component({2, 8, component_format_unsigned, 0});
- uncC.add_component({1, 8, component_format_unsigned, 0});
+ uncC->add_component({0, 8, component_format_unsigned, 0});
+ uncC->add_component({1, 8, component_format_unsigned, 0});
+ uncC->add_component({2, 8, component_format_unsigned, 0});
+ uncC->add_component({1, 8, component_format_unsigned, 0});
cmpd->add_component({component_type_Cb});
cmpd->add_component({component_type_Y});
cmpd->add_component({component_type_Cr});
- uncC.set_sampling_type(sampling_mode_422);
- uncC.set_interleave_type(interleave_mode_multi_y);
+ uncC->set_sampling_type(sampling_mode_422);
+ uncC->set_interleave_type(interleave_mode_multi_y);
}
else if (profile == fourcc("yuv2")) {
// {'yuv2', [{1,7},{2,7},{1,7},{3,7}], 1, 5} Y0 Cb Y1 Cr
// cmpd: Y(0) Cb(1) Cr(2)
- uncC.add_component({0, 8, component_format_unsigned, 0});
- uncC.add_component({1, 8, component_format_unsigned, 0});
- uncC.add_component({0, 8, component_format_unsigned, 0});
- uncC.add_component({2, 8, component_format_unsigned, 0});
+ uncC->add_component({0, 8, component_format_unsigned, 0});
+ uncC->add_component({1, 8, component_format_unsigned, 0});
+ uncC->add_component({0, 8, component_format_unsigned, 0});
+ uncC->add_component({2, 8, component_format_unsigned, 0});
cmpd->add_component({component_type_Y});
cmpd->add_component({component_type_Cb});
cmpd->add_component({component_type_Cr});
- uncC.set_sampling_type(sampling_mode_422);
- uncC.set_interleave_type(interleave_mode_multi_y);
+ uncC->set_sampling_type(sampling_mode_422);
+ uncC->set_interleave_type(interleave_mode_multi_y);
}
else if (profile == fourcc("yvyu")) {
// {'yvyu', [{1,7},{3,7},{1,7},{2,7}], 1, 5} Y0 Cr Y1 Cb
// cmpd: Y(0) Cr(1) Cb(2)
- uncC.add_component({0, 8, component_format_unsigned, 0});
- uncC.add_component({1, 8, component_format_unsigned, 0});
- uncC.add_component({0, 8, component_format_unsigned, 0});
- uncC.add_component({2, 8, component_format_unsigned, 0});
+ uncC->add_component({0, 8, component_format_unsigned, 0});
+ uncC->add_component({1, 8, component_format_unsigned, 0});
+ uncC->add_component({0, 8, component_format_unsigned, 0});
+ uncC->add_component({2, 8, component_format_unsigned, 0});
cmpd->add_component({component_type_Y});
cmpd->add_component({component_type_Cr});
cmpd->add_component({component_type_Cb});
- uncC.set_sampling_type(sampling_mode_422);
- uncC.set_interleave_type(interleave_mode_multi_y);
+ uncC->set_sampling_type(sampling_mode_422);
+ uncC->set_interleave_type(interleave_mode_multi_y);
}
else if (profile == fourcc("vyuy")) {
// {'vyuy', [{3,7},{1,7},{2,7},{1,7}], 1, 5} Cr Y0 Cb Y1
// cmpd: Cr(0) Y(1) Cb(2)
- uncC.add_component({0, 8, component_format_unsigned, 0});
- uncC.add_component({1, 8, component_format_unsigned, 0});
- uncC.add_component({2, 8, component_format_unsigned, 0});
- uncC.add_component({1, 8, component_format_unsigned, 0});
+ uncC->add_component({0, 8, component_format_unsigned, 0});
+ uncC->add_component({1, 8, component_format_unsigned, 0});
+ uncC->add_component({2, 8, component_format_unsigned, 0});
+ uncC->add_component({1, 8, component_format_unsigned, 0});
cmpd->add_component({component_type_Cr});
cmpd->add_component({component_type_Y});
cmpd->add_component({component_type_Cb});
- uncC.set_sampling_type(sampling_mode_422);
- uncC.set_interleave_type(interleave_mode_multi_y);
+ uncC->set_sampling_type(sampling_mode_422);
+ uncC->set_interleave_type(interleave_mode_multi_y);
}
else if (profile == fourcc("yuv1")) {
// {'yuv1', [{1,7},{1,7},{2,7},{1,7},{1,7},{3,7}], 3, 5} Y0 Y1 Cb Y2 Y3 Cr
// cmpd: Y(0) Cb(1) Cr(2)
- uncC.add_component({0, 8, component_format_unsigned, 0});
- uncC.add_component({0, 8, component_format_unsigned, 0});
- uncC.add_component({1, 8, component_format_unsigned, 0});
- uncC.add_component({0, 8, component_format_unsigned, 0});
- uncC.add_component({0, 8, component_format_unsigned, 0});
- uncC.add_component({2, 8, component_format_unsigned, 0});
+ uncC->add_component({0, 8, component_format_unsigned, 0});
+ uncC->add_component({0, 8, component_format_unsigned, 0});
+ uncC->add_component({1, 8, component_format_unsigned, 0});
+ uncC->add_component({0, 8, component_format_unsigned, 0});
+ uncC->add_component({0, 8, component_format_unsigned, 0});
+ uncC->add_component({2, 8, component_format_unsigned, 0});
cmpd->add_component({component_type_Y});
cmpd->add_component({component_type_Cb});
cmpd->add_component({component_type_Cr});
- uncC.set_sampling_type(sampling_mode_411);
- uncC.set_interleave_type(interleave_mode_multi_y);
+ uncC->set_sampling_type(sampling_mode_411);
+ uncC->set_interleave_type(interleave_mode_multi_y);
}
else if (profile == fourcc("v308")) {
// {'v308', [{3,7},{1,7},{2,7}], 0, 1} Cr Y Cb
// cmpd: Cr(0) Y(1) Cb(2)
- uncC.add_component({0, 8, component_format_unsigned, 0});
- uncC.add_component({1, 8, component_format_unsigned, 0});
- uncC.add_component({2, 8, component_format_unsigned, 0});
+ uncC->add_component({0, 8, component_format_unsigned, 0});
+ uncC->add_component({1, 8, component_format_unsigned, 0});
+ uncC->add_component({2, 8, component_format_unsigned, 0});
cmpd->add_component({component_type_Cr});
cmpd->add_component({component_type_Y});
cmpd->add_component({component_type_Cb});
- uncC.set_sampling_type(sampling_mode_no_subsampling);
- uncC.set_interleave_type(interleave_mode_pixel);
+ uncC->set_sampling_type(sampling_mode_no_subsampling);
+ uncC->set_interleave_type(interleave_mode_pixel);
}
else if (profile == fourcc("v408")) {
// {'v408', [{2,7},{1,7},{3,7},{7,7}], 0, 1} Cb Y Cr A
// cmpd: Cb(0) Y(1) Cr(2) alpha(3)
- uncC.add_component({0, 8, component_format_unsigned, 0});
- uncC.add_component({1, 8, component_format_unsigned, 0});
- uncC.add_component({2, 8, component_format_unsigned, 0});
- uncC.add_component({3, 8, component_format_unsigned, 0});
+ uncC->add_component({0, 8, component_format_unsigned, 0});
+ uncC->add_component({1, 8, component_format_unsigned, 0});
+ uncC->add_component({2, 8, component_format_unsigned, 0});
+ uncC->add_component({3, 8, component_format_unsigned, 0});
cmpd->add_component({component_type_Cb});
cmpd->add_component({component_type_Y});
cmpd->add_component({component_type_Cr});
cmpd->add_component({component_type_alpha});
- uncC.set_sampling_type(sampling_mode_no_subsampling);
- uncC.set_interleave_type(interleave_mode_pixel);
+ uncC->set_sampling_type(sampling_mode_no_subsampling);
+ uncC->set_interleave_type(interleave_mode_pixel);
}
else if (profile == fourcc("y210")) {
// {'y210', [{1,9},{2,9},{1,9},{3,9}], 1, 5} Y0 Cb Y1 Cr
// block_size=2, block_little_endian=1, block_pad_lsb=1
// cmpd: Y(0) Cb(1) Cr(2)
- uncC.add_component({0, 10, component_format_unsigned, 0});
- uncC.add_component({1, 10, component_format_unsigned, 0});
- uncC.add_component({0, 10, component_format_unsigned, 0});
- uncC.add_component({2, 10, component_format_unsigned, 0});
+ uncC->add_component({0, 10, component_format_unsigned, 0});
+ uncC->add_component({1, 10, component_format_unsigned, 0});
+ uncC->add_component({0, 10, component_format_unsigned, 0});
+ uncC->add_component({2, 10, component_format_unsigned, 0});
cmpd->add_component({component_type_Y});
cmpd->add_component({component_type_Cb});
cmpd->add_component({component_type_Cr});
- uncC.set_sampling_type(sampling_mode_422);
- uncC.set_interleave_type(interleave_mode_multi_y);
- uncC.set_block_size(2);
- uncC.set_block_little_endian(true);
- uncC.set_block_pad_lsb(true);
+ uncC->set_sampling_type(sampling_mode_422);
+ uncC->set_interleave_type(interleave_mode_multi_y);
+ uncC->set_block_size(2);
+ uncC->set_block_little_endian(true);
+ uncC->set_block_pad_lsb(true);
}
else if (profile == fourcc("v410")) {
// {'v410', [{2,9},{1,9},{3,9}], 0, 1} Cb Y Cr
// block_size=4, block_little_endian=1, block_pad_lsb=1, block_reversed=1
// cmpd: Cb(0) Y(1) Cr(2)
- uncC.add_component({0, 10, component_format_unsigned, 0});
- uncC.add_component({1, 10, component_format_unsigned, 0});
- uncC.add_component({2, 10, component_format_unsigned, 0});
+ uncC->add_component({0, 10, component_format_unsigned, 0});
+ uncC->add_component({1, 10, component_format_unsigned, 0});
+ uncC->add_component({2, 10, component_format_unsigned, 0});
cmpd->add_component({component_type_Cb});
cmpd->add_component({component_type_Y});
cmpd->add_component({component_type_Cr});
- uncC.set_sampling_type(sampling_mode_no_subsampling);
- uncC.set_interleave_type(interleave_mode_pixel);
- uncC.set_block_size(4);
- uncC.set_block_little_endian(true);
- uncC.set_block_pad_lsb(true);
- uncC.set_block_reversed(true);
+ uncC->set_sampling_type(sampling_mode_no_subsampling);
+ uncC->set_interleave_type(interleave_mode_pixel);
+ uncC->set_block_size(4);
+ uncC->set_block_little_endian(true);
+ uncC->set_block_pad_lsb(true);
+ uncC->set_block_reversed(true);
}
else if (profile == fourcc("v210")) {
// {'v210', [{2,9},{1,9},{3,9},{1,9}], 1, 5} Cb Y0 Cr Y1
// block_size=4, block_little_endian=1, block_reversed=1
// cmpd: Cb(0) Y(1) Cr(2)
- uncC.add_component({0, 10, component_format_unsigned, 0});
- uncC.add_component({1, 10, component_format_unsigned, 0});
- uncC.add_component({2, 10, component_format_unsigned, 0});
- uncC.add_component({1, 10, component_format_unsigned, 0});
+ uncC->add_component({0, 10, component_format_unsigned, 0});
+ uncC->add_component({1, 10, component_format_unsigned, 0});
+ uncC->add_component({2, 10, component_format_unsigned, 0});
+ uncC->add_component({1, 10, component_format_unsigned, 0});
cmpd->add_component({component_type_Cb});
cmpd->add_component({component_type_Y});
cmpd->add_component({component_type_Cr});
- uncC.set_sampling_type(sampling_mode_422);
- uncC.set_interleave_type(interleave_mode_multi_y);
- uncC.set_block_size(4);
- uncC.set_block_little_endian(true);
- uncC.set_block_reversed(true);
+ uncC->set_sampling_type(sampling_mode_422);
+ uncC->set_interleave_type(interleave_mode_multi_y);
+ uncC->set_block_size(4);
+ uncC->set_block_little_endian(true);
+ uncC->set_block_reversed(true);
}
else if (profile == fourcc("i420")) {
// {'i420', [{1,7},{2,7},{3,7}], 2, 0} planar YCbCr
// cmpd: Y(0) Cb(1) Cr(2)
- uncC.add_component({0, 8, component_format_unsigned, 0});
- uncC.add_component({1, 8, component_format_unsigned, 0});
- uncC.add_component({2, 8, component_format_unsigned, 0});
+ uncC->add_component({0, 8, component_format_unsigned, 0});
+ uncC->add_component({1, 8, component_format_unsigned, 0});
+ uncC->add_component({2, 8, component_format_unsigned, 0});
cmpd->add_component({component_type_Y});
cmpd->add_component({component_type_Cb});
cmpd->add_component({component_type_Cr});
- uncC.set_sampling_type(sampling_mode_420);
- uncC.set_interleave_type(interleave_mode_component);
+ uncC->set_sampling_type(sampling_mode_420);
+ uncC->set_interleave_type(interleave_mode_component);
}
else if (profile == fourcc("nv12")) {
// {'nv12', [{1,7},{2,7},{3,7}], 2, 2} semi-planar YCbCr
// cmpd: Y(0) Cb(1) Cr(2)
- uncC.add_component({0, 8, component_format_unsigned, 0});
- uncC.add_component({1, 8, component_format_unsigned, 0});
- uncC.add_component({2, 8, component_format_unsigned, 0});
+ uncC->add_component({0, 8, component_format_unsigned, 0});
+ uncC->add_component({1, 8, component_format_unsigned, 0});
+ uncC->add_component({2, 8, component_format_unsigned, 0});
cmpd->add_component({component_type_Y});
cmpd->add_component({component_type_Cb});
cmpd->add_component({component_type_Cr});
- uncC.set_sampling_type(sampling_mode_420);
- uncC.set_interleave_type(interleave_mode_mixed);
+ uncC->set_sampling_type(sampling_mode_420);
+ uncC->set_interleave_type(interleave_mode_mixed);
}
else if (profile == fourcc("nv21")) {
// {'nv21', [{1,7},{3,7},{2,7}], 2, 2} semi-planar YCrCb
// cmpd: Y(0) Cr(1) Cb(2)
- uncC.add_component({0, 8, component_format_unsigned, 0});
- uncC.add_component({1, 8, component_format_unsigned, 0});
- uncC.add_component({2, 8, component_format_unsigned, 0});
+ uncC->add_component({0, 8, component_format_unsigned, 0});
+ uncC->add_component({1, 8, component_format_unsigned, 0});
+ uncC->add_component({2, 8, component_format_unsigned, 0});
cmpd->add_component({component_type_Y});
cmpd->add_component({component_type_Cr});
cmpd->add_component({component_type_Cb});
- uncC.set_sampling_type(sampling_mode_420);
- uncC.set_interleave_type(interleave_mode_mixed);
+ uncC->set_sampling_type(sampling_mode_420);
+ uncC->set_interleave_type(interleave_mode_mixed);
}
else if (profile == fourcc("yu22")) {
// {'yu22', [{1,7},{2,7},{3,7}], 1, 0} planar YCbCr
// cmpd: Y(0) Cb(1) Cr(2)
- uncC.add_component({0, 8, component_format_unsigned, 0});
- uncC.add_component({1, 8, component_format_unsigned, 0});
- uncC.add_component({2, 8, component_format_unsigned, 0});
+ uncC->add_component({0, 8, component_format_unsigned, 0});
+ uncC->add_component({1, 8, component_format_unsigned, 0});
+ uncC->add_component({2, 8, component_format_unsigned, 0});
cmpd->add_component({component_type_Y});
cmpd->add_component({component_type_Cb});
cmpd->add_component({component_type_Cr});
- uncC.set_sampling_type(sampling_mode_422);
- uncC.set_interleave_type(interleave_mode_component);
+ uncC->set_sampling_type(sampling_mode_422);
+ uncC->set_interleave_type(interleave_mode_component);
}
else if (profile == fourcc("yv22")) {
// {'yv22', [{1,7},{3,7},{2,7}], 1, 0} planar YCrCb
// cmpd: Y(0) Cr(1) Cb(2)
- uncC.add_component({0, 8, component_format_unsigned, 0});
- uncC.add_component({1, 8, component_format_unsigned, 0});
- uncC.add_component({2, 8, component_format_unsigned, 0});
+ uncC->add_component({0, 8, component_format_unsigned, 0});
+ uncC->add_component({1, 8, component_format_unsigned, 0});
+ uncC->add_component({2, 8, component_format_unsigned, 0});
cmpd->add_component({component_type_Y});
cmpd->add_component({component_type_Cr});
cmpd->add_component({component_type_Cb});
- uncC.set_sampling_type(sampling_mode_422);
- uncC.set_interleave_type(interleave_mode_component);
+ uncC->set_sampling_type(sampling_mode_422);
+ uncC->set_interleave_type(interleave_mode_component);
}
else if (profile == fourcc("yv20")) {
// {'yv20', [{1,7},{3,7},{2,7}], 2, 0} planar YCrCb
// cmpd: Y(0) Cr(1) Cb(2)
- uncC.add_component({0, 8, component_format_unsigned, 0});
- uncC.add_component({1, 8, component_format_unsigned, 0});
- uncC.add_component({2, 8, component_format_unsigned, 0});
+ uncC->add_component({0, 8, component_format_unsigned, 0});
+ uncC->add_component({1, 8, component_format_unsigned, 0});
+ uncC->add_component({2, 8, component_format_unsigned, 0});
cmpd->add_component({component_type_Y});
cmpd->add_component({component_type_Cr});
cmpd->add_component({component_type_Cb});
- uncC.set_sampling_type(sampling_mode_420);
- uncC.set_interleave_type(interleave_mode_component);
+ uncC->set_sampling_type(sampling_mode_420);
+ uncC->set_interleave_type(interleave_mode_component);
}
else {
cmpd.reset();
return;
}
- uncC.set_synthetic_cmpd(cmpd);
+ uncC->set_synthetic_cmpd(cmpd);
}
diff --git a/libheif/codecs/uncompressed/unc_boxes.h b/libheif/codecs/uncompressed/unc_boxes.h
index c496f308..966fef03 100644
--- a/libheif/codecs/uncompressed/unc_boxes.h
+++ b/libheif/codecs/uncompressed/unc_boxes.h
@@ -382,7 +382,7 @@ protected:
};
-void fill_uncC_and_cmpd_from_profile(Box_uncC& uncC,
+void fill_uncC_and_cmpd_from_profile(const std::shared_ptr<Box_uncC>& uncC,
std::shared_ptr<Box_cmpd>& cmpd);
diff --git a/libheif/codecs/uncompressed/unc_codec.cc b/libheif/codecs/uncompressed/unc_codec.cc
index e864d06d..82eb29ad 100644
--- a/libheif/codecs/uncompressed/unc_codec.cc
+++ b/libheif/codecs/uncompressed/unc_codec.cc
@@ -38,12 +38,6 @@
#include "security_limits.h"
-bool isKnownUncompressedFrameConfigurationBoxProfile(const std::shared_ptr<const Box_uncC>& uncC)
-{
- return ((uncC != nullptr) && (uncC->get_version() == 1) && ((uncC->get_profile() == fourcc("rgb3")) || (uncC->get_profile() == fourcc("rgba")) || (uncC->get_profile() == fourcc("abgr"))));
-}
-
-
Error UncompressedImageCodec::get_heif_chroma_uncompressed(const std::shared_ptr<const Box_uncC>& uncC,
const std::shared_ptr<const Box_cmpd>& cmpd,
heif_chroma* out_chroma, heif_colorspace* out_colourspace,
@@ -443,7 +437,7 @@ void UncompressedImageCodec::unci_properties::fill_from_image_item(const std::sh
auto cmpd_mut = image->get_property<Box_cmpd>();
auto uncC_mut = image->get_property<Box_uncC>();
if (uncC_mut) {
- fill_uncC_and_cmpd_from_profile(*uncC_mut, cmpd_mut);
+ fill_uncC_and_cmpd_from_profile(uncC_mut, cmpd_mut);
}
cmpd = cmpd_mut;
uncC = uncC_mut;
diff --git a/libheif/codecs/uncompressed/unc_codec.h b/libheif/codecs/uncompressed/unc_codec.h
index 66645b79..71f2ea79 100644
--- a/libheif/codecs/uncompressed/unc_codec.h
+++ b/libheif/codecs/uncompressed/unc_codec.h
@@ -40,8 +40,6 @@
class HeifContext;
-bool isKnownUncompressedFrameConfigurationBoxProfile(const std::shared_ptr<const Box_uncC>& uncC);
-
bool map_uncompressed_component_to_channel(const std::shared_ptr<const Box_cmpd> &cmpd,
Box_uncC::Component component,
heif_channel *channel);
diff --git a/libheif/codecs/uncompressed/unc_dec.cc b/libheif/codecs/uncompressed/unc_dec.cc
index 63d4133c..49295730 100644
--- a/libheif/codecs/uncompressed/unc_dec.cc
+++ b/libheif/codecs/uncompressed/unc_dec.cc
@@ -19,6 +19,7 @@
*/
#include "codecs/uncompressed/unc_dec.h"
+#include "codecs/uncompressed/unc_boxes.h"
#include "codecs/uncompressed/unc_codec.h"
#include "error.h"
#include "context.h"
@@ -28,6 +29,19 @@
#include <utility>
+Decoder_uncompressed::Decoder_uncompressed(std::shared_ptr<Box_uncC> uncC,
+ std::shared_ptr<Box_cmpd> cmpd,
+ std::shared_ptr<const Box_ispe> ispe)
+ : m_ispe(std::move(ispe))
+{
+ if (uncC) {
+ fill_uncC_and_cmpd_from_profile(uncC, cmpd);
+ }
+ m_uncC = std::move(uncC);
+ m_cmpd = std::move(cmpd);
+}
+
+
Result<std::vector<uint8_t>> Decoder_uncompressed::read_bitstream_configuration_data() const
{
return std::vector<uint8_t>{};
@@ -39,12 +53,7 @@ int Decoder_uncompressed::get_luma_bits_per_pixel() const
assert(m_uncC);
if (!m_cmpd) {
- if (isKnownUncompressedFrameConfigurationBoxProfile(m_uncC)) {
- return 8;
- }
- else {
- return -1;
- }
+ return -1;
}
int luma_bits = 0;
diff --git a/libheif/codecs/uncompressed/unc_dec.h b/libheif/codecs/uncompressed/unc_dec.h
index 9e101ca9..eb4e92fc 100644
--- a/libheif/codecs/uncompressed/unc_dec.h
+++ b/libheif/codecs/uncompressed/unc_dec.h
@@ -36,9 +36,9 @@ class Box_cmpd;
class Decoder_uncompressed : public Decoder
{
public:
- explicit Decoder_uncompressed(const std::shared_ptr<const Box_uncC>& uncC,
- const std::shared_ptr<const Box_cmpd>& cmpd,
- const std::shared_ptr<const Box_ispe>& ispe) : m_uncC(uncC), m_cmpd(cmpd), m_ispe(ispe) {}
+ explicit Decoder_uncompressed(std::shared_ptr<Box_uncC> uncC,
+ std::shared_ptr<Box_cmpd> cmpd,
+ std::shared_ptr<const Box_ispe> ispe);
heif_compression_format get_compression_format() const override { return heif_compression_uncompressed; }
@@ -73,9 +73,9 @@ public:
const heif_security_limits* limits) override;
private:
- const std::shared_ptr<const Box_uncC> m_uncC;
- const std::shared_ptr<const Box_cmpd> m_cmpd;
- const std::shared_ptr<const Box_ispe> m_ispe;
+ std::shared_ptr<const Box_uncC> m_uncC;
+ std::shared_ptr<const Box_cmpd> m_cmpd;
+ std::shared_ptr<const Box_ispe> m_ispe;
std::shared_ptr<HeifPixelImage> m_decoded_image;
uintptr_t m_decoded_image_user_data;
diff --git a/libheif/codecs/uncompressed/unc_decoder.cc b/libheif/codecs/uncompressed/unc_decoder.cc
index 4b72e0d4..59a11cf7 100644
--- a/libheif/codecs/uncompressed/unc_decoder.cc
+++ b/libheif/codecs/uncompressed/unc_decoder.cc
@@ -292,10 +292,6 @@ Error unc_decoder::decode_image(const DataExtent& extent,
bool unc_decoder_factory::check_common_requirements(const std::shared_ptr<const Box_uncC>& uncC)
{
- if (isKnownUncompressedFrameConfigurationBoxProfile(uncC)) {
- return true;
- }
-
for (const auto& component : uncC->get_components()) {
if (component.component_bit_depth > 16) {
return false;
diff --git a/libheif/image-items/unc_image.cc b/libheif/image-items/unc_image.cc
index fbded5b8..5151e00b 100644
--- a/libheif/image-items/unc_image.cc
+++ b/libheif/image-items/unc_image.cc
@@ -349,8 +349,6 @@ Error ImageItem_uncompressed::initialize_decoder()
"No 'uncC' box found."};
}
- fill_uncC_and_cmpd_from_profile(*uncC, cmpd);
-
m_decoder = std::make_shared<Decoder_uncompressed>(uncC, cmpd, ispe);
return Error::Ok;