Commit 3a8e7858 for libheif

commit 3a8e7858173603a1bcfba0b499380044c38c00d9
Author: Dirk Farin <dirk.farin@gmail.com>
Date:   Fri Feb 27 12:43:38 2026 +0100

    remove obsolet heif_image_get_channel_*() functions from experimental API

diff --git a/libheif/api/libheif/heif_experimental.cc b/libheif/api/libheif/heif_experimental.cc
index 2b27a91b..e9183451 100644
--- a/libheif/api/libheif/heif_experimental.cc
+++ b/libheif/api/libheif/heif_experimental.cc
@@ -391,56 +391,6 @@ void heif_channel_release_list(heif_channel** channels)
 }


-#define heif_image_get_channel_X(name, type, datatype, bits) \
-const type* heif_image_get_channel_ ## name ## _readonly(const struct heif_image* image, \
-                                                         enum heif_channel channel, \
-                                                         size_t* out_stride) \
-{                                                            \
-  if (!image || !image->image) {                             \
-    *out_stride = 0;                                         \
-    return nullptr;                                          \
-  }                                                          \
-                                                             \
-  if (image->image->get_datatype(channel) != datatype) {     \
-    return nullptr;                                          \
-  }                                                          \
-  if (image->image->get_storage_bits_per_pixel(channel) != bits) {     \
-    return nullptr;                                          \
-  }                                                          \
-  return  image->image->get_channel<type>(channel, out_stride);                      \
-}                                                            \
-                                                             \
-type* heif_image_get_channel_ ## name (struct heif_image* image, \
-                                       enum heif_channel channel, \
-                                       size_t* out_stride)      \
-{                                                            \
-  if (!image || !image->image) {                             \
-    *out_stride = 0;                                         \
-    return nullptr;                                          \
-  }                                                          \
-                                                             \
-  if (image->image->get_datatype(channel) != datatype) {     \
-    return nullptr;                                          \
-  }                                                          \
-  if (image->image->get_storage_bits_per_pixel(channel) != bits) {     \
-    return nullptr;                                          \
-  }                                                          \
-  return image->image->get_channel<type>(channel, out_stride); \
-}
-
-heif_image_get_channel_X(uint16, uint16_t, heif_channel_datatype_unsigned_integer, 16)
-heif_image_get_channel_X(uint32, uint32_t, heif_channel_datatype_unsigned_integer, 32)
-heif_image_get_channel_X(uint64, uint64_t, heif_channel_datatype_unsigned_integer, 64)
-heif_image_get_channel_X(int8, int8_t, heif_channel_datatype_signed_integer, 8)
-heif_image_get_channel_X(int16, int16_t, heif_channel_datatype_signed_integer, 16)
-heif_image_get_channel_X(int32, int32_t, heif_channel_datatype_signed_integer, 32)
-heif_image_get_channel_X(int64, int64_t, heif_channel_datatype_signed_integer, 64)
-heif_image_get_channel_X(float32, float, heif_channel_datatype_floating_point, 32)
-heif_image_get_channel_X(float64, double, heif_channel_datatype_floating_point, 64)
-heif_image_get_channel_X(complex32, heif_complex32, heif_channel_datatype_complex_number, 64)
-heif_image_get_channel_X(complex64, heif_complex64, heif_channel_datatype_complex_number, 64)
-
-
 // --- index-based component access

 uint32_t heif_image_get_number_of_components(const heif_image* image)
diff --git a/libheif/api/libheif/heif_experimental.h b/libheif/api/libheif/heif_experimental.h
index f0f2cb83..1b8e3bde 100644
--- a/libheif/api/libheif/heif_experimental.h
+++ b/libheif/api/libheif/heif_experimental.h
@@ -221,118 +221,6 @@ enum heif_channel_datatype heif_image_get_datatype(const heif_image* img,
                                                    enum heif_channel channel);


-// The 'stride' in all of these functions are in units of the underlying datatype.
-LIBHEIF_API
-const uint16_t* heif_image_get_channel_uint16_readonly(const heif_image*,
-                                                       enum heif_channel channel,
-                                                       size_t* out_stride);
-
-LIBHEIF_API
-const uint32_t* heif_image_get_channel_uint32_readonly(const heif_image*,
-                                                       enum heif_channel channel,
-                                                       size_t* out_stride);
-
-LIBHEIF_API
-const uint64_t* heif_image_get_channel_uint64_readonly(const heif_image*,
-                                                       enum heif_channel channel,
-                                                       size_t* out_stride);
-
-LIBHEIF_API
-const int8_t* heif_image_get_channel_int8_readonly(const heif_image*,
-                                                    enum heif_channel channel,
-                                                    size_t* out_stride);
-
-LIBHEIF_API
-const int16_t* heif_image_get_channel_int16_readonly(const heif_image*,
-                                                     enum heif_channel channel,
-                                                     size_t* out_stride);
-
-LIBHEIF_API
-const int32_t* heif_image_get_channel_int32_readonly(const heif_image*,
-                                                     enum heif_channel channel,
-                                                     size_t* out_stride);
-
-LIBHEIF_API
-const int64_t* heif_image_get_channel_int64_readonly(const heif_image*,
-                                                     enum heif_channel channel,
-                                                     size_t* out_stride);
-
-LIBHEIF_API
-const float* heif_image_get_channel_float32_readonly(const heif_image*,
-                                                     enum heif_channel channel,
-                                                     size_t* out_stride);
-
-LIBHEIF_API
-const double* heif_image_get_channel_float64_readonly(const heif_image*,
-                                                      enum heif_channel channel,
-                                                      size_t* out_stride);
-
-LIBHEIF_API
-const heif_complex32* heif_image_get_channel_complex32_readonly(const heif_image*,
-                                                                enum heif_channel channel,
-                                                                size_t* out_stride);
-
-LIBHEIF_API
-const heif_complex64* heif_image_get_channel_complex64_readonly(const heif_image*,
-                                                                enum heif_channel channel,
-                                                                size_t* out_stride);
-
-LIBHEIF_API
-uint16_t* heif_image_get_channel_uint16(heif_image*,
-                                        enum heif_channel channel,
-                                        size_t* out_stride);
-
-LIBHEIF_API
-uint32_t* heif_image_get_channel_uint32(heif_image*,
-                                        enum heif_channel channel,
-                                        size_t* out_stride);
-
-LIBHEIF_API
-uint64_t* heif_image_get_channel_uint64(heif_image*,
-                                        enum heif_channel channel,
-                                        size_t* out_stride);
-
-LIBHEIF_API
-int8_t* heif_image_get_channel_int8(heif_image*,
-                                     enum heif_channel channel,
-                                     size_t* out_stride);
-
-LIBHEIF_API
-int16_t* heif_image_get_channel_int16(heif_image*,
-                                      enum heif_channel channel,
-                                      size_t* out_stride);
-
-LIBHEIF_API
-int32_t* heif_image_get_channel_int32(heif_image*,
-                                      enum heif_channel channel,
-                                      size_t* out_stride);
-
-LIBHEIF_API
-int64_t* heif_image_get_channel_int64(heif_image*,
-                                      enum heif_channel channel,
-                                      size_t* out_stride);
-
-LIBHEIF_API
-float* heif_image_get_channel_float32(heif_image*,
-                                      enum heif_channel channel,
-                                      size_t* out_stride);
-
-LIBHEIF_API
-double* heif_image_get_channel_float64(heif_image*,
-                                       enum heif_channel channel,
-                                       size_t* out_stride);
-
-LIBHEIF_API
-heif_complex32* heif_image_get_channel_complex32(heif_image*,
-                                                 enum heif_channel channel,
-                                                 size_t* out_stride);
-
-LIBHEIF_API
-heif_complex64* heif_image_get_channel_complex64(heif_image*,
-                                                 enum heif_channel channel,
-                                                 size_t* out_stride);
-
-
 // --- index-based component access (for ISO 23001-17 multi-component images)

 LIBHEIF_API
@@ -357,7 +245,7 @@ LIBHEIF_API
 heif_error heif_image_add_component(heif_image* image,
                                     int width, int height,
                                     uint16_t component_type,
-                                    enum heif_channel_datatype datatype,
+                                    heif_channel_datatype datatype,
                                     int bit_depth,
                                     uint32_t* out_component_idx);

diff --git a/tests/pixel_data_types.cc b/tests/pixel_data_types.cc
index 710f9d80..e57ce733 100644
--- a/tests/pixel_data_types.cc
+++ b/tests/pixel_data_types.cc
@@ -159,15 +159,16 @@ TEST_CASE( "image datatype through public API" )
   heif_error error = heif_image_create(3,2,heif_colorspace_nonvisual, heif_chroma_undefined, &image);
   REQUIRE(!error.code);

-  heif_image_add_channel(image, heif_channel_Y, 3,2, heif_channel_datatype_unsigned_integer, 32);
+  uint32_t comp_idx;
+  error = heif_image_add_component(image, 3, 2, 0, heif_channel_datatype_unsigned_integer, 32, &comp_idx);
+  REQUIRE(!error.code);

   size_t stride;
-  uint32_t* data = heif_image_get_channel_uint32(image, heif_channel_Y, &stride);
+  uint32_t* data = heif_image_get_component_uint32(image, comp_idx, &stride);
   REQUIRE(data != nullptr);

   REQUIRE(stride >= 3);
-  REQUIRE(heif_image_get_datatype(image, heif_channel_Y) == heif_channel_datatype_unsigned_integer);
-  REQUIRE(heif_image_get_bits_per_pixel_range(image, heif_channel_Y) == 32);
+  REQUIRE(heif_image_get_component_bits_per_pixel(image, comp_idx) == 32);

   data[stride*0 + 0] = 0xFFFFFFFFu;
   data[stride*0 + 1] = 0;