Commit 5a3e8ab0 for libheif
commit 5a3e8ab009be6fd0d20abd30200a88be30f90339
Author: Dirk Farin <dirk.farin@gmail.com>
Date: Tue Apr 7 21:35:24 2026 +0200
unci tests: fix using component ids
diff --git a/libheif/pixelimage.cc b/libheif/pixelimage.cc
index 485780fc..0ed8229b 100644
--- a/libheif/pixelimage.cc
+++ b/libheif/pixelimage.cc
@@ -2234,13 +2234,13 @@ HeifPixelImage::extract_image_area(uint32_t x0, uint32_t y0, uint32_t w, uint32_
// --- index-based component access methods
-HeifPixelImage::ImageComponent* HeifPixelImage::find_component_by_id(uint32_t component_index)
+HeifPixelImage::ImageComponent* HeifPixelImage::find_component_by_id(uint32_t component_id)
{
for (auto& plane : m_planes) {
// we search through all indices in case we have an interleaved plane
if (std::find(plane.m_component_ids.begin(),
plane.m_component_ids.end(),
- component_index) != plane.m_component_ids.end()) {
+ component_id) != plane.m_component_ids.end()) {
return &plane;
}
}
@@ -2248,47 +2248,47 @@ HeifPixelImage::ImageComponent* HeifPixelImage::find_component_by_id(uint32_t co
}
-const HeifPixelImage::ImageComponent* HeifPixelImage::find_component_by_id(uint32_t component_index) const
+const HeifPixelImage::ImageComponent* HeifPixelImage::find_component_by_id(uint32_t component_id) const
{
- return const_cast<HeifPixelImage*>(this)->find_component_by_id(component_index);
+ return const_cast<HeifPixelImage*>(this)->find_component_by_id(component_id);
}
-heif_channel HeifPixelImage::get_component_channel(uint32_t component_idx) const
+heif_channel HeifPixelImage::get_component_channel(uint32_t component_id) const
{
- auto* comp = find_component_by_id(component_idx);
+ auto* comp = find_component_by_id(component_id);
assert(comp);
return comp->m_channel;
}
-uint32_t HeifPixelImage::get_component_width(uint32_t component_idx) const
+uint32_t HeifPixelImage::get_component_width(uint32_t component_id) const
{
- auto* comp = find_component_by_id(component_idx);
+ auto* comp = find_component_by_id(component_id);
assert(comp);
return comp->m_width;
}
-uint32_t HeifPixelImage::get_component_height(uint32_t component_idx) const
+uint32_t HeifPixelImage::get_component_height(uint32_t component_id) const
{
- auto* comp = find_component_by_id(component_idx);
+ auto* comp = find_component_by_id(component_id);
assert(comp);
return comp->m_height;
}
-uint16_t HeifPixelImage::get_component_bits_per_pixel(uint32_t component_idx) const
+uint16_t HeifPixelImage::get_component_bits_per_pixel(uint32_t component_id) const
{
- auto* comp = find_component_by_id(component_idx);
+ auto* comp = find_component_by_id(component_id);
assert(comp);
return comp->m_bit_depth;
}
-uint16_t HeifPixelImage::get_component_storage_bits_per_pixel(uint32_t component_idx) const
+uint16_t HeifPixelImage::get_component_storage_bits_per_pixel(uint32_t component_id) const
{
- auto* comp = find_component_by_id(component_idx);
+ auto* comp = find_component_by_id(component_id);
assert(comp);
uint32_t bpp = comp->get_bytes_per_pixel() * 8;
assert(bpp);
@@ -2296,9 +2296,9 @@ uint16_t HeifPixelImage::get_component_storage_bits_per_pixel(uint32_t component
}
-heif_component_datatype HeifPixelImage::get_component_datatype(uint32_t component_idx) const
+heif_component_datatype HeifPixelImage::get_component_datatype(uint32_t component_id) const
{
- auto* comp = find_component_by_id(component_idx);
+ auto* comp = find_component_by_id(component_id);
assert(comp);
return comp->m_datatype;
}
diff --git a/libheif/pixelimage.h b/libheif/pixelimage.h
index 75e2df95..e49aaa51 100644
--- a/libheif/pixelimage.h
+++ b/libheif/pixelimage.h
@@ -461,13 +461,13 @@ public:
//uint32_t get_total_number_of_cmpd_components() const { return static_cast<uint32_t>(m_cmpd_component_types.size()); }
- heif_channel get_component_channel(uint32_t component_idx) const;
+ heif_channel get_component_channel(uint32_t component_id) const;
- uint32_t get_component_width(uint32_t component_idx) const;
- uint32_t get_component_height(uint32_t component_idx) const;
- uint16_t get_component_bits_per_pixel(uint32_t component_idx) const;
- uint16_t get_component_storage_bits_per_pixel(uint32_t component_idx) const;
- heif_component_datatype get_component_datatype(uint32_t component_idx) const;
+ uint32_t get_component_width(uint32_t component_id) const;
+ uint32_t get_component_height(uint32_t component_id) const;
+ uint16_t get_component_bits_per_pixel(uint32_t component_id) const;
+ uint16_t get_component_storage_bits_per_pixel(uint32_t component_id) const;
+ heif_component_datatype get_component_datatype(uint32_t component_id) const;
// Look up the component type from the cmpd table. Works for any cmpd index,
// even those that have no image plane (e.g. bayer reference components).
@@ -636,8 +636,8 @@ private:
ImageComponent* find_component_for_channel(heif_channel channel);
const ImageComponent* find_component_for_channel(heif_channel channel) const;
- ImageComponent* find_component_by_id(uint32_t component_index);
- const ImageComponent* find_component_by_id(uint32_t component_index) const;
+ ImageComponent* find_component_by_id(uint32_t component_id);
+ const ImageComponent* find_component_by_id(uint32_t component_id) const;
ImageComponent new_image_plane_for_channel(heif_channel channel);
diff --git a/tests/uncompressed_encode_multicomponent.cc b/tests/uncompressed_encode_multicomponent.cc
index 05e5c8af..4481e153 100644
--- a/tests/uncompressed_encode_multicomponent.cc
+++ b/tests/uncompressed_encode_multicomponent.cc
@@ -252,20 +252,20 @@ static heif_image* create_and_fill_image(heif_component_datatype datatype, int b
REQUIRE(image != nullptr);
for (uint32_t c = 0; c < kNumComponents; c++) {
- uint32_t idx = 0;
+ uint32_t id = 0;
err = heif_image_add_component(image, kWidth, kHeight,
- kMonoComponentType, datatype, bit_depth, &idx);
+ kMonoComponentType, datatype, bit_depth, &id);
REQUIRE(err.code == heif_error_Ok);
- REQUIRE(idx == c);
+ //REQUIRE(idx == c);
size_t stride = 0;
- T* data = get_component_ptr<T>(image, idx, &stride);
+ T* data = get_component_ptr<T>(image, id, &stride);
REQUIRE(data != nullptr);
REQUIRE(stride >= kWidth);
for (uint32_t y = 0; y < kHeight; y++) {
for (uint32_t x = 0; x < kWidth; x++) {
- data[y * stride + x] = compute_fill_value<T>(c, y, x);
+ data[y * stride + x] = compute_fill_value<T>(id, y, x);
}
}
}
@@ -311,7 +311,10 @@ static void verify_image_data(const heif_image* image)
uint32_t num_components = heif_image_get_number_of_used_components(image);
REQUIRE(num_components == kNumComponents);
- for (uint32_t c = 0; c < kNumComponents; c++) {
+ std::vector<uint32_t> components(num_components);
+ heif_image_get_used_component_ids(image, components.data());
+
+ for (uint32_t c : components) {
REQUIRE(heif_image_get_component_width(image, c) == kWidth);
REQUIRE(heif_image_get_component_height(image, c) == kHeight);
REQUIRE(heif_image_get_component_type(image, c) == kMonoComponentType);