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);