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;