@img/sharp-libvips-dev-wasm32 1.3.0-rc.6 → 1.3.0-rc.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/README.md +23 -23
  2. package/include/aom/aom_codec.h +1 -1
  3. package/include/aom/aom_decoder.h +4 -0
  4. package/include/aom/aom_encoder.h +19 -8
  5. package/include/aom/aom_ext_ratectrl.h +664 -0
  6. package/include/aom/aom_image.h +93 -30
  7. package/include/aom/aom_tpl.h +99 -0
  8. package/include/aom/aomcx.h +89 -16
  9. package/include/aom/aomdx.h +12 -0
  10. package/include/expat.h +14 -2
  11. package/include/expat_config.h +6 -3
  12. package/include/expat_external.h +3 -2
  13. package/include/glib-2.0/gio/gdbusconnection.h +2 -8
  14. package/include/glib-2.0/gio/gio-visibility.h +34 -0
  15. package/include/glib-2.0/gio/gioenums.h +5 -4
  16. package/include/glib-2.0/glib/glib-visibility.h +34 -0
  17. package/include/glib-2.0/glib/gmacros.h +3 -3
  18. package/include/glib-2.0/glib/gmarkup.h +10 -0
  19. package/include/glib-2.0/glib/gmem.h +4 -4
  20. package/include/glib-2.0/glib/gmessages.h +6 -8
  21. package/include/glib-2.0/glib/gsequence.h +2 -2
  22. package/include/glib-2.0/glib/gstrfuncs.h +190 -0
  23. package/include/glib-2.0/glib/gutils.h +9 -0
  24. package/include/glib-2.0/glib/gvarianttype.h +16 -16
  25. package/include/glib-2.0/glib/gversionmacros.h +22 -0
  26. package/include/glib-2.0/gmodule/gmodule-visibility.h +34 -0
  27. package/include/glib-2.0/gobject/gobject-visibility.h +34 -0
  28. package/include/glib-2.0/gobject/gsignal.h +5 -5
  29. package/include/glib-2.0/gobject/gtype.h +14 -14
  30. package/include/hwy/aligned_allocator.h +44 -2
  31. package/include/hwy/auto_tune.h +22 -6
  32. package/include/hwy/base.h +60 -90
  33. package/include/hwy/bit_set.h +410 -0
  34. package/include/hwy/cache_control.h +3 -2
  35. package/include/hwy/detect_compiler_arch.h +134 -14
  36. package/include/hwy/detect_targets.h +82 -36
  37. package/include/hwy/highway.h +15 -0
  38. package/include/hwy/nanobenchmark.h +12 -3
  39. package/include/hwy/ops/arm_neon-inl.h +96 -25
  40. package/include/hwy/ops/arm_sve-inl.h +250 -95
  41. package/include/hwy/ops/emu128-inl.h +12 -7
  42. package/include/hwy/ops/generic_ops-inl.h +271 -131
  43. package/include/hwy/ops/loongarch_lasx-inl.h +31 -9
  44. package/include/hwy/ops/loongarch_lsx-inl.h +33 -12
  45. package/include/hwy/ops/ppc_vsx-inl.h +99 -19
  46. package/include/hwy/ops/rvv-inl.h +239 -130
  47. package/include/hwy/ops/scalar-inl.h +22 -7
  48. package/include/hwy/ops/set_macros-inl.h +163 -107
  49. package/include/hwy/ops/wasm_128-inl.h +13 -22
  50. package/include/hwy/ops/x86_128-inl.h +223 -120
  51. package/include/hwy/ops/x86_256-inl.h +70 -134
  52. package/include/hwy/ops/x86_512-inl.h +130 -134
  53. package/include/hwy/print-inl.h +2 -0
  54. package/include/hwy/profiler.h +355 -264
  55. package/include/hwy/robust_statistics.h +3 -1
  56. package/include/hwy/timer.h +44 -0
  57. package/include/lcms2.h +34 -4
  58. package/include/libexif/exif-utils.h +1 -1
  59. package/include/libheif/heif.h +2 -0
  60. package/include/libheif/heif_color.h +127 -11
  61. package/include/libheif/heif_components.h +264 -0
  62. package/include/libheif/heif_context.h +2 -1
  63. package/include/libheif/heif_cxx.h +10 -10
  64. package/include/libheif/heif_decoding.h +51 -7
  65. package/include/libheif/heif_encoding.h +15 -9
  66. package/include/libheif/heif_error.h +9 -2
  67. package/include/libheif/heif_export.h +48 -0
  68. package/include/libheif/heif_image.h +81 -66
  69. package/include/libheif/heif_image_handle.h +2 -2
  70. package/include/libheif/heif_items.h +1 -1
  71. package/include/libheif/heif_library.h +8 -16
  72. package/include/libheif/heif_omaf.h +104 -0
  73. package/include/libheif/heif_plugin.h +16 -9
  74. package/include/libheif/heif_properties.h +250 -12
  75. package/include/libheif/heif_security.h +16 -4
  76. package/include/libheif/heif_sequences.h +86 -4
  77. package/include/libheif/heif_tiling.h +2 -2
  78. package/include/libheif/heif_uncompressed.h +44 -324
  79. package/include/libheif/heif_version.h +2 -2
  80. package/include/libpng16/png.h +7 -7
  81. package/include/libpng16/pngconf.h +1 -1
  82. package/include/libpng16/pnglibconf.h +1 -1
  83. package/include/png.h +7 -7
  84. package/include/pngconf.h +1 -1
  85. package/include/pnglibconf.h +1 -1
  86. package/include/tiffconf.h +9 -10
  87. package/include/tiffio.h +10 -9
  88. package/include/tiffvers.h +1 -1
  89. package/include/ultrahdr_api.h +5 -11
  90. package/include/vips/version.h +4 -4
  91. package/lib/glib-2.0/include/glibconfig.h +1 -3
  92. package/lib/libaom.a +0 -0
  93. package/lib/libcgif.a +0 -0
  94. package/lib/libexif.a +0 -0
  95. package/lib/libexif.la +1 -1
  96. package/lib/libexpat.a +0 -0
  97. package/lib/libexpat.la +3 -3
  98. package/lib/libffi.a +0 -0
  99. package/lib/libgio-2.0.a +0 -0
  100. package/lib/libglib-2.0.a +0 -0
  101. package/lib/libgmodule-2.0.a +0 -0
  102. package/lib/libgobject-2.0.a +0 -0
  103. package/lib/libgthread-2.0.a +0 -0
  104. package/lib/libheif.a +0 -0
  105. package/lib/libhwy.a +0 -0
  106. package/lib/libimagequant.a +0 -0
  107. package/lib/libjpeg.a +0 -0
  108. package/lib/liblcms2.a +0 -0
  109. package/lib/libpng.a +0 -0
  110. package/lib/libpng.la +2 -2
  111. package/lib/libpng16.a +0 -0
  112. package/lib/libpng16.la +2 -2
  113. package/lib/libresvg.a +0 -0
  114. package/lib/libsharpyuv.a +0 -0
  115. package/lib/libtiff.a +0 -0
  116. package/lib/libuhdr.a +0 -0
  117. package/lib/libvips-cpp.a +0 -0
  118. package/lib/libvips.a +0 -0
  119. package/lib/libwebp.a +0 -0
  120. package/lib/libwebpdecoder.a +0 -0
  121. package/lib/libwebpdemux.a +0 -0
  122. package/lib/libwebpmux.a +0 -0
  123. package/lib/libz.a +0 -0
  124. package/lib/pkgconfig/aom.pc +2 -2
  125. package/lib/pkgconfig/expat.pc +1 -1
  126. package/lib/pkgconfig/gio-2.0.pc +1 -1
  127. package/lib/pkgconfig/glib-2.0.pc +1 -1
  128. package/lib/pkgconfig/gmodule-2.0.pc +1 -1
  129. package/lib/pkgconfig/gmodule-export-2.0.pc +1 -1
  130. package/lib/pkgconfig/gmodule-no-export-2.0.pc +1 -1
  131. package/lib/pkgconfig/gobject-2.0.pc +1 -1
  132. package/lib/pkgconfig/gthread-2.0.pc +1 -1
  133. package/lib/pkgconfig/lcms2.pc +1 -1
  134. package/lib/pkgconfig/libexif.pc +1 -1
  135. package/lib/pkgconfig/libheif.pc +2 -2
  136. package/lib/pkgconfig/libhwy.pc +3 -4
  137. package/lib/pkgconfig/libpng.pc +1 -1
  138. package/lib/pkgconfig/libpng16.pc +1 -1
  139. package/lib/pkgconfig/libsharpyuv.pc +1 -1
  140. package/lib/pkgconfig/libtiff-4.pc +2 -2
  141. package/lib/pkgconfig/libwebp.pc +1 -1
  142. package/lib/pkgconfig/libwebpdecoder.pc +11 -0
  143. package/lib/pkgconfig/libwebpmux.pc +1 -1
  144. package/lib/pkgconfig/vips-cpp.pc +1 -1
  145. package/lib/pkgconfig/vips.pc +1 -1
  146. package/package.json +1 -1
  147. package/versions.json +12 -12
  148. package/include/libheif/heif_uncompressed_types.h +0 -143
  149. package/lib/libsharpyuv.la +0 -41
  150. package/lib/libtiff.la +0 -41
  151. package/lib/libwebp.la +0 -41
  152. package/lib/libwebpdemux.la +0 -41
  153. package/lib/libwebpmux.la +0 -41
@@ -123,8 +123,10 @@ T Median(T* values, const size_t num_values) {
123
123
  if (num_values % 2) {
124
124
  return values[half];
125
125
  }
126
+ // For integers, round rather than truncate.
127
+ const T bias = hwy::IsInteger<T>() ? T{1} : T{0};
126
128
  // Even count: return average of middle two.
127
- return (values[half] + values[half - 1] + 1) / 2;
129
+ return (values[half] + values[half - 1] + bias) / 2;
128
130
  }
129
131
 
130
132
  // Returns a robust measure of variability.
@@ -232,6 +232,50 @@ static HWY_INLINE Ticks Stop() {
232
232
 
233
233
  } // namespace timer
234
234
 
235
+ // Wrapper around Start/Stop that checks whether the CPU supports Stop.
236
+ class Timer {
237
+ public:
238
+ Timer() {
239
+ char cpu100[100];
240
+ have_timer_stop_ = platform::HaveTimerStop(cpu100);
241
+ }
242
+
243
+ // Before/After have fences to prevent the measured code 'leaking out'.
244
+ timer::Ticks Before() const { return timer::Start(); }
245
+ timer::Ticks After() const {
246
+ return have_timer_stop_ ? timer::Stop() : timer::Start();
247
+ }
248
+
249
+ private:
250
+ bool have_timer_stop_;
251
+ };
252
+
253
+ static inline double Seconds(timer::Ticks ticks) {
254
+ return static_cast<double>(ticks) / platform::InvariantTicksPerSecond();
255
+ }
256
+
257
+ // Measures elapsed time since construction, with automatic reset.
258
+ class Stopwatch {
259
+ public:
260
+ explicit Stopwatch(const Timer& timestamps) : timer_(timestamps) { Reset(); }
261
+
262
+ timer::Ticks Origin() const { return t0_; }
263
+ void Reset() { t0_ = timer_.Before(); }
264
+
265
+ // Also resets the start time to the current time to enable reuse without a
266
+ // second call to the timer.
267
+ timer::Ticks Elapsed() {
268
+ const timer::Ticks t1 = timer_.After();
269
+ const timer::Ticks elapsed = t1 - t0_;
270
+ t0_ = t1;
271
+ return elapsed;
272
+ }
273
+
274
+ private:
275
+ const Timer& timer_;
276
+ timer::Ticks t0_;
277
+ };
278
+
235
279
  } // namespace hwy
236
280
 
237
281
  #endif // HIGHWAY_HWY_TIMER_H_
package/include/lcms2.h CHANGED
@@ -23,7 +23,7 @@
23
23
  //
24
24
  //---------------------------------------------------------------------------------
25
25
  //
26
- // Version 2.18
26
+ // Version 2.19
27
27
  //
28
28
 
29
29
  #ifndef _lcms2_H
@@ -37,6 +37,13 @@
37
37
  // "long long" type.
38
38
  // #define CMS_DONT_USE_INT64 1
39
39
 
40
+ // Uncomment this one to enable large file support on file/stream I/O.
41
+ // LittleCMS is still limited by ICC 32-bit offsets and sizes, so the
42
+ // practical maximum remains 4 GiB minus profile overhead. Be careful
43
+ // because such huge profiles have to be loaded into memory and that's
44
+ // usually a very bad idea.
45
+ // #define CMS_LARGE_FILE_SUPPORT 1
46
+
40
47
  // Uncomment this if your compiler doesn't work with fast floor function
41
48
  // #define CMS_DONT_USE_FAST_FLOOR 1
42
49
 
@@ -87,7 +94,7 @@ extern "C" {
87
94
  #endif
88
95
 
89
96
  // Version/release
90
- #define LCMS_VERSION 2180
97
+ #define LCMS_VERSION 2190
91
98
 
92
99
  // I will give the chance of redefining basic types for compilers that are not fully C99 compliant
93
100
  #ifndef CMS_BASIC_TYPES_ALREADY_DEFINED
@@ -168,6 +175,9 @@ typedef double cmsFloat64Number;
168
175
  #ifdef CMS_DONT_USE_INT64
169
176
  typedef cmsUInt32Number cmsUInt64Number[2];
170
177
  typedef cmsInt32Number cmsInt64Number[2];
178
+ # if defined(CMS_LARGE_FILE_SUPPORT)
179
+ # error "You need int64 for large file support"
180
+ # endif
171
181
  #endif
172
182
 
173
183
  // Derivative types
@@ -504,7 +514,13 @@ typedef enum {
504
514
  cmsSigLinkClass = 0x6C696E6B, // 'link'
505
515
  cmsSigAbstractClass = 0x61627374, // 'abst'
506
516
  cmsSigColorSpaceClass = 0x73706163, // 'spac'
507
- cmsSigNamedColorClass = 0x6e6d636c // 'nmcl'
517
+ cmsSigNamedColorClass = 0x6e6d636c, // 'nmcl'
518
+
519
+ // iccMAX only
520
+ cmsSigColorEncodingSpaceClass = 0x63656E63, // 'cenc'
521
+ cmsSigMultiplexIdentificationClass = 0x6D696420, // 'mid '
522
+ cmsSigMultiplexLinkClass = 0x6d6c6e6b, // 'mlnk'
523
+ cmsSigMultiplexVisualizationClass = 0x6d766973 // 'mvis'
508
524
 
509
525
  } cmsProfileClassSignature;
510
526
 
@@ -1078,8 +1094,12 @@ CMSAPI int CMSEXPORT cmsGetEncodedCMMversion(void);
1078
1094
  // Support of non-standard functions --------------------------------------------------------------------------------------
1079
1095
 
1080
1096
  CMSAPI int CMSEXPORT cmsstrcasecmp(const char* s1, const char* s2);
1081
- CMSAPI long int CMSEXPORT cmsfilelength(FILE* f);
1082
1097
 
1098
+ #ifdef CMS_LARGE_FILE_SUPPORT
1099
+ CMSAPI long long int CMSEXPORT cmsfilelength(FILE* f);
1100
+ #else
1101
+ CMSAPI long int CMSEXPORT cmsfilelength(FILE* f);
1102
+ #endif
1083
1103
 
1084
1104
  // Context handling --------------------------------------------------------------------------------------------------------
1085
1105
 
@@ -1502,6 +1522,7 @@ CMSAPI cmsHPROFILE CMSEXPORT cmsCreateProfilePlaceholder(cmsContext Contex
1502
1522
  CMSAPI cmsContext CMSEXPORT cmsGetProfileContextID(cmsHPROFILE hProfile);
1503
1523
  CMSAPI cmsInt32Number CMSEXPORT cmsGetTagCount(cmsHPROFILE hProfile);
1504
1524
  CMSAPI cmsTagSignature CMSEXPORT cmsGetTagSignature(cmsHPROFILE hProfile, cmsUInt32Number n);
1525
+ CMSAPI cmsBool CMSEXPORT cmsGetTagOffsetAndSize(cmsHPROFILE hProfile, cmsUInt32Number n, cmsUInt32Number* offset, cmsUInt32Number* size);
1505
1526
  CMSAPI cmsBool CMSEXPORT cmsIsTag(cmsHPROFILE hProfile, cmsTagSignature sig);
1506
1527
 
1507
1528
  // Read and write pre-formatted data
@@ -1525,6 +1546,8 @@ CMSAPI void CMSEXPORT cmsGetHeaderAttributes(cmsHPROFILE hProfile,
1525
1546
  CMSAPI void CMSEXPORT cmsGetHeaderProfileID(cmsHPROFILE hProfile, cmsUInt8Number* ProfileID);
1526
1547
  CMSAPI cmsBool CMSEXPORT cmsGetHeaderCreationDateTime(cmsHPROFILE hProfile, struct tm *Dest);
1527
1548
  CMSAPI cmsUInt32Number CMSEXPORT cmsGetHeaderRenderingIntent(cmsHPROFILE hProfile);
1549
+ CMSAPI cmsUInt32Number CMSEXPORT cmsGetHeaderCMM(cmsHPROFILE hProfile);
1550
+
1528
1551
 
1529
1552
  CMSAPI void CMSEXPORT cmsSetHeaderFlags(cmsHPROFILE hProfile, cmsUInt32Number Flags);
1530
1553
  CMSAPI cmsUInt32Number CMSEXPORT cmsGetHeaderManufacturer(cmsHPROFILE hProfile);
@@ -1867,6 +1890,13 @@ CMSAPI cmsContext CMSEXPORT cmsGetTransformContextID(cmsHTRANSFORM hTransf
1867
1890
  CMSAPI cmsUInt32Number CMSEXPORT cmsGetTransformInputFormat(cmsHTRANSFORM hTransform);
1868
1891
  CMSAPI cmsUInt32Number CMSEXPORT cmsGetTransformOutputFormat(cmsHTRANSFORM hTransform);
1869
1892
 
1893
+ // Access the optimized pipeline and gamut-check pipeline inside a transform.
1894
+ CMSAPI cmsPipeline* CMSEXPORT cmsGetTransformPipeline(cmsHTRANSFORM hTransform);
1895
+ CMSAPI cmsPipeline* CMSEXPORT cmsGetTransformGamutCheckPipeline(cmsHTRANSFORM hTransform);
1896
+ // Grab colorants
1897
+ CMSAPI cmsNAMEDCOLORLIST* CMSEXPORT cmsGetTransformInputColorants(cmsHTRANSFORM hTransform);
1898
+ CMSAPI cmsNAMEDCOLORLIST* CMSEXPORT cmsGetTransformOutputColorants(cmsHTRANSFORM hTransform);
1899
+
1870
1900
  // For backwards compatibility
1871
1901
  CMSAPI cmsBool CMSEXPORT cmsChangeBuffersFormat(cmsHTRANSFORM hTransform,
1872
1902
  cmsUInt32Number InputFormat,
@@ -170,7 +170,7 @@ void exif_set_srational (unsigned char *b, ExifByteOrder order,
170
170
  ExifSRational value);
171
171
 
172
172
  /*! \internal */
173
- void exif_convert_utf16_to_utf8 (char *out, const unsigned char *in, int maxlen);
173
+ void exif_convert_utf16_to_utf8 (char *out, unsigned int outlen, const unsigned char *in, unsigned int inlen);
174
174
 
175
175
  /* Please do not use this function outside of the library. */
176
176
 
@@ -37,5 +37,7 @@
37
37
  #include <libheif/heif_context.h>
38
38
  #include <libheif/heif_image_handle.h>
39
39
  #include <libheif/heif_tiling.h>
40
+ #include <libheif/heif_components.h>
41
+ #include <libheif/heif_omaf.h>
40
42
 
41
43
  #endif
@@ -55,8 +55,8 @@ typedef struct heif_color_conversion_options
55
55
 
56
56
  // --- version 1 options
57
57
 
58
- enum heif_chroma_downsampling_algorithm preferred_chroma_downsampling_algorithm;
59
- enum heif_chroma_upsampling_algorithm preferred_chroma_upsampling_algorithm;
58
+ heif_chroma_downsampling_algorithm preferred_chroma_downsampling_algorithm;
59
+ heif_chroma_upsampling_algorithm preferred_chroma_upsampling_algorithm;
60
60
 
61
61
  // When set to 'false' libheif may also use a different algorithm if the preferred one is not available
62
62
  // or using a different algorithm is computationally less complex. Note that currently (v1.17.0) this
@@ -85,7 +85,7 @@ typedef struct heif_color_conversion_options_ext
85
85
 
86
86
  // --- version 1 options
87
87
 
88
- enum heif_alpha_composition_mode alpha_composition_mode;
88
+ heif_alpha_composition_mode alpha_composition_mode;
89
89
 
90
90
  // color values should be specified in the range [0, 65535]
91
91
  uint16_t background_red, background_green, background_blue;
@@ -126,7 +126,7 @@ typedef enum heif_color_profile_type
126
126
  // However, you can still use heif_image_handle_get_raw_color_profile() and
127
127
  // heif_image_handle_get_nclx_color_profile() to access both profiles.
128
128
  LIBHEIF_API
129
- enum heif_color_profile_type heif_image_handle_get_color_profile_type(const heif_image_handle* handle);
129
+ heif_color_profile_type heif_image_handle_get_color_profile_type(const heif_image_handle* handle);
130
130
 
131
131
  LIBHEIF_API
132
132
  size_t heif_image_handle_get_raw_color_profile_size(const heif_image_handle* handle);
@@ -198,9 +198,9 @@ typedef struct heif_color_profile_nclx
198
198
 
199
199
  uint8_t version;
200
200
 
201
- enum heif_color_primaries color_primaries;
202
- enum heif_transfer_characteristics transfer_characteristics;
203
- enum heif_matrix_coefficients matrix_coefficients;
201
+ heif_color_primaries color_primaries;
202
+ heif_transfer_characteristics transfer_characteristics;
203
+ heif_matrix_coefficients matrix_coefficients;
204
204
  uint8_t full_range_flag;
205
205
 
206
206
  // --- decoded values (not used when saving nclx)
@@ -240,7 +240,7 @@ void heif_nclx_color_profile_free(heif_color_profile_nclx* nclx_profile);
240
240
  // This function will now return ICC if one is present and NCLX only if there is no ICC.
241
241
  // You may better avoid this function and simply query for NCLX and ICC directly.
242
242
  LIBHEIF_API
243
- enum heif_color_profile_type heif_image_get_color_profile_type(const heif_image* image);
243
+ heif_color_profile_type heif_image_get_color_profile_type(const heif_image* image);
244
244
 
245
245
  // Returns the size of the ICC profile if one is assigned to the image. Otherwise, it returns 0.
246
246
  LIBHEIF_API
@@ -276,17 +276,34 @@ heif_error heif_image_set_nclx_color_profile(heif_image* image,
276
276
 
277
277
  // --- content light level ---
278
278
 
279
- // Note: a value of 0 for any of these values indicates that the value is undefined.
280
- // The unit of these values is Candelas per square meter.
279
+ // Semantics follow the H.265 'Content light level information' SEI message
280
+ // (ITU-T H.265 Annex D.3.35). Identifies upper bounds for the nominal
281
+ // target brightness light level of the pictures. The bounds are defined
282
+ // against samples in a 4:4:4 RGB representation in the linear light domain,
283
+ // in units of candelas per square metre (cd/m^2 = nits). A field value
284
+ // of 0 means "no upper bound indicated" (i.e. undefined).
281
285
  typedef struct heif_content_light_level
282
286
  {
287
+ // Upper bound on the maximum light level among all individual linear-light
288
+ // 4:4:4 RGB samples across the sequence, in cd/m^2 (= field).
289
+ // Also called MaxCLL.
283
290
  uint16_t max_content_light_level;
291
+
292
+ // Upper bound on the maximum per-picture average light level among the
293
+ // linear-light 4:4:4 RGB samples (averaged over any individual picture),
294
+ // in cd/m^2 (= field). Also called MaxFALL (or MaxPALL).
295
+ // For letterboxed content the average is expected to be taken only over
296
+ // the visually relevant region (H.265 D.3.35 NOTE 3).
284
297
  uint16_t max_pic_average_light_level;
285
298
  } heif_content_light_level;
286
299
 
287
300
  LIBHEIF_API
288
301
  int heif_image_has_content_light_level(const heif_image*);
289
302
 
303
+ LIBHEIF_API
304
+ int heif_image_handle_has_content_light_level(const heif_image_handle*);
305
+
306
+ // TODO: this function should also return 'int' to be consistent to heif_image_handle_get_content_light_level.
290
307
  LIBHEIF_API
291
308
  void heif_image_get_content_light_level(const heif_image*, heif_content_light_level* out);
292
309
 
@@ -303,13 +320,43 @@ void heif_image_handle_set_content_light_level(const heif_image_handle*, const h
303
320
 
304
321
  // --- mastering display colour volume ---
305
322
 
306
- // Note: color coordinates are defined according to the CIE 1931 definition of x as specified in ISO 11664-1 (see also ISO 11664-3 and CIE 15).
323
+ // Semantics follow the H.265 'Mastering display colour volume' SEI message
324
+ // (ITU-T H.265 Annex D.3.28) and SMPTE ST 2086. Identifies the colour
325
+ // volume (primaries, white point, luminance range) of the mastering display
326
+ // for the associated content. CIE 1931 chromaticity coordinates are defined
327
+ // by ISO 11664-1 (see also ISO 11664-3 and CIE 15).
328
+ //
329
+ // For RGB mastering displays, H.265 suggests the index order
330
+ // [0]=green, [1]=blue, [2]=red
331
+ // (see H.265 Annex E, Table E.3).
307
332
  typedef struct heif_mastering_display_colour_volume
308
333
  {
334
+ // CIE 1931 chromaticity coordinates of the three colour primaries, in
335
+ // normalized increments of 0.00002 (CIE value = field / 50000).
336
+ // Valid ranges per H.265: x in 5..37000, y in 5..42000 inclusive; values
337
+ // outside indicate "unknown / unspecified".
338
+ // Note: SMPTE ST 2086 uses four-decimal-place coordinates, i.e. multiples
339
+ // of 5 in this encoding.
309
340
  uint16_t display_primaries_x[3];
310
341
  uint16_t display_primaries_y[3];
342
+
343
+ // CIE 1931 chromaticity coordinates of the mastering display's white
344
+ // point, in normalized increments of 0.00002. Valid ranges as for the
345
+ // primaries (x in 5..37000, y in 5..42000).
346
+ // Note: ANSI/CTA 861-G uses (0,0) to indicate that the white point
347
+ // chromaticity is unknown.
311
348
  uint16_t white_point_x;
312
349
  uint16_t white_point_y;
350
+
351
+ // Nominal maximum / minimum display luminance of the mastering display,
352
+ // in units of 0.0001 candelas per square metre (cd/m^2 = field / 10000).
353
+ // Valid ranges per H.265:
354
+ // max in 50000..100000000 (5..10000 cd/m^2)
355
+ // min in 1..50000 (0.0001..5 cd/m^2)
356
+ // When max == 50000, min shall not equal 50000.
357
+ // Note: ANSI/CTA 861-G uses 0 to indicate "unknown".
358
+ // Note: SMPTE ST 2086 (2018) specifies max as a multiple of 1 cd/m^2, i.e.
359
+ // a multiple of 10000 in this encoding.
313
360
  uint32_t max_display_mastering_luminance;
314
361
  uint32_t min_display_mastering_luminance;
315
362
  } heif_mastering_display_colour_volume;
@@ -325,9 +372,24 @@ typedef struct heif_decoded_mastering_display_colour_volume
325
372
  double min_display_mastering_luminance;
326
373
  } heif_decoded_mastering_display_colour_volume;
327
374
 
375
+ // Semantics follow the H.265 'Ambient viewing environment' SEI message
376
+ // (ITU-T H.265 Annex D.3.39). Identifies the nominal ambient viewing
377
+ // environment intended for display of the associated content.
328
378
  typedef struct heif_ambient_viewing_environment
329
379
  {
380
+ // Environmental illuminance of the ambient viewing environment, in units
381
+ // of 0.0001 lux (i.e. lux = value / 10000). In H.265 this field is called
382
+ // 'ambient_illuminance' and is required to be non-zero; 0 is treated here
383
+ // as "undefined".
330
384
  uint32_t ambient_illumination;
385
+
386
+ // Normalized CIE 1931 chromaticity coordinates of the environmental
387
+ // ambient light, in units of 0.00002 (i.e. CIE x = value / 50000).
388
+ // Valid range per H.265 is 0..50000 inclusive. CIE 1931 x/y are defined
389
+ // by ISO 11664-1 (see also ISO 11664-3 and CIE 15).
390
+ //
391
+ // Example (Rec. ITU-R BT.2035, D65 background): ambient_illumination=100000,
392
+ // ambient_light_x=15635, ambient_light_y=16450.
331
393
  uint16_t ambient_light_x;
332
394
  uint16_t ambient_light_y;
333
395
  } heif_ambient_viewing_environment;
@@ -335,6 +397,9 @@ typedef struct heif_ambient_viewing_environment
335
397
  LIBHEIF_API
336
398
  int heif_image_has_mastering_display_colour_volume(const heif_image*);
337
399
 
400
+ LIBHEIF_API
401
+ int heif_image_handle_has_mastering_display_colour_volume(const heif_image_handle*);
402
+
338
403
  LIBHEIF_API
339
404
  void heif_image_get_mastering_display_colour_volume(const heif_image*, heif_mastering_display_colour_volume* out);
340
405
 
@@ -349,6 +414,57 @@ LIBHEIF_API
349
414
  void heif_image_handle_set_mastering_display_colour_volume(const heif_image_handle*, const heif_mastering_display_colour_volume* in);
350
415
 
351
416
 
417
+ // --- ambient viewing environment ---
418
+
419
+ LIBHEIF_API
420
+ int heif_image_has_ambient_viewing_environment(const heif_image*);
421
+
422
+ LIBHEIF_API
423
+ int heif_image_handle_has_ambient_viewing_environment(const heif_image_handle*);
424
+
425
+ // Returns whether the image has 'ambient viewing environment' information. If 0 is returned, the output is not filled.
426
+ LIBHEIF_API
427
+ int heif_image_get_ambient_viewing_environment(const heif_image*, heif_ambient_viewing_environment* out);
428
+
429
+ // Returns whether the image has 'ambient viewing environment' information. If 0 is returned, the output is not filled.
430
+ LIBHEIF_API
431
+ int heif_image_handle_get_ambient_viewing_environment(const heif_image_handle*, heif_ambient_viewing_environment* out);
432
+
433
+ LIBHEIF_API
434
+ void heif_image_set_ambient_viewing_environment(const heif_image*, const heif_ambient_viewing_environment* in);
435
+
436
+ LIBHEIF_API
437
+ void heif_image_handle_set_ambient_viewing_environment(const heif_image_handle*, const heif_ambient_viewing_environment* in);
438
+
439
+
440
+ // --- nominal diffuse white ---
441
+
442
+ // Nominal diffuse white luminance (ISO/IEC 23008-12 'ndwt' box). The luminance
443
+ // is given in units of 0.0001 candelas per square metre. A value of 0 is valid
444
+ // and selects the default definition of ISO/TS 22028-5.
445
+
446
+ // If the image has no 'nominal diffuse white' information, the getter returns 0,
447
+ // which is indistinguishable from a stored luminance of 0. Use the has_ function
448
+ // to disambiguate.
449
+ LIBHEIF_API
450
+ int heif_image_has_nominal_diffuse_white_luminance(const heif_image*);
451
+
452
+ LIBHEIF_API
453
+ uint32_t heif_image_get_nominal_diffuse_white_luminance(const heif_image*);
454
+
455
+ LIBHEIF_API
456
+ void heif_image_set_nominal_diffuse_white_luminance(const heif_image*, uint32_t luminance);
457
+
458
+ LIBHEIF_API
459
+ int heif_image_handle_has_nominal_diffuse_white_luminance(const heif_image_handle*);
460
+
461
+ LIBHEIF_API
462
+ uint32_t heif_image_handle_get_nominal_diffuse_white_luminance(const heif_image_handle*);
463
+
464
+ LIBHEIF_API
465
+ void heif_image_handle_set_nominal_diffuse_white_luminance(const heif_image_handle*, uint32_t luminance);
466
+
467
+
352
468
  // Converts the internal numeric representation of heif_mastering_display_colour_volume to the
353
469
  // normalized values, collected in heif_decoded_mastering_display_colour_volume.
354
470
  // Values that are out-of-range are decoded to 0, indicating an undefined value (as specified in ISO/IEC 23008-2).
@@ -0,0 +1,264 @@
1
+ /*
2
+ * HEIF codec.
3
+ * Copyright (c) 2026 Dirk Farin <dirk.farin@gmail.com>
4
+ *
5
+ * This file is part of libheif.
6
+ *
7
+ * libheif is free software: you can redistribute it and/or modify
8
+ * it under the terms of the GNU Lesser General Public License as
9
+ * published by the Free Software Foundation, either version 3 of
10
+ * the License, or (at your option) any later version.
11
+ *
12
+ * libheif is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ * GNU Lesser General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU Lesser General Public License
18
+ * along with libheif. If not, see <http://www.gnu.org/licenses/>.
19
+ */
20
+
21
+ #ifndef LIBHEIF_HEIF_COMPONENTS_H
22
+ #define LIBHEIF_HEIF_COMPONENTS_H
23
+
24
+ #include "libheif/heif_library.h"
25
+ #include "libheif/heif_image.h"
26
+ #include "libheif/heif_image_handle.h"
27
+
28
+ #ifdef __cplusplus
29
+ extern "C" {
30
+ #endif
31
+
32
+ /* @file heif_components.h
33
+ * @brief Multi-component image API.
34
+ *
35
+ * The component model (id-addressed pixel planes with per-component type,
36
+ * datatype and bit-depth) is codec-agnostic. It was introduced for ISO 23001-17
37
+ * (uncompressed) images but is also expected to be reused by other codecs that
38
+ * carry multiple typed components (e.g. JPEG-2000).
39
+ */
40
+
41
+
42
+ // --- pixel datatype support
43
+ //
44
+ // The numeric values are aligned with the ISO/IEC 23001-17 Table 2
45
+ // component_format byte (used by the uncC box of the uncompressed codec).
46
+ // This is an internal convenience and should not be relied upon.
47
+
48
+ typedef enum heif_component_datatype
49
+ {
50
+ heif_component_datatype_unsigned_integer = 0,
51
+ heif_component_datatype_floating_point = 1,
52
+ heif_component_datatype_complex_number = 2,
53
+ heif_component_datatype_signed_integer = 3,
54
+ heif_component_datatype_undefined = 0xFF
55
+ } heif_component_datatype;
56
+
57
+ typedef struct heif_complex32
58
+ {
59
+ float real, imaginary;
60
+ } heif_complex32;
61
+
62
+ typedef struct heif_complex64
63
+ {
64
+ double real, imaginary;
65
+ } heif_complex64;
66
+
67
+
68
+ // --- component types (ISO/IEC 23001-17 Table 1, used in the cmpd box)
69
+
70
+ typedef enum heif_cmpd_component_type
71
+ {
72
+ heif_cmpd_component_type_monochrome = 0,
73
+ heif_cmpd_component_type_Y = 1,
74
+ heif_cmpd_component_type_Cb = 2,
75
+ heif_cmpd_component_type_Cr = 3,
76
+ heif_cmpd_component_type_red = 4,
77
+ heif_cmpd_component_type_green = 5,
78
+ heif_cmpd_component_type_blue = 6,
79
+ heif_cmpd_component_type_alpha = 7,
80
+ heif_cmpd_component_type_depth = 8,
81
+ heif_cmpd_component_type_disparity = 9,
82
+ heif_cmpd_component_type_palette = 10,
83
+ heif_cmpd_component_type_filter_array = 11,
84
+ heif_cmpd_component_type_padded = 12,
85
+ heif_cmpd_component_type_cyan = 13,
86
+ heif_cmpd_component_type_magenta = 14,
87
+ heif_cmpd_component_type_yellow = 15,
88
+ heif_cmpd_component_type_key_black = 16
89
+ } heif_cmpd_component_type;
90
+
91
+
92
+ // --- ID-based component access (operates on a decoded heif_image)
93
+
94
+ // Returns the number of components that have pixel data (planes) in this image.
95
+ LIBHEIF_API
96
+ uint32_t heif_image_get_number_of_used_components(const heif_image*);
97
+
98
+ // Fills `out_component_ids` with the valid component IDs.
99
+ // The caller must allocate an array of at least heif_image_get_number_of_used_components() elements.
100
+ LIBHEIF_API
101
+ void heif_image_get_used_component_ids(const heif_image*, uint32_t* out_component_ids);
102
+
103
+ LIBHEIF_API
104
+ heif_channel heif_image_get_component_channel(const heif_image*, uint32_t component_id);
105
+
106
+ LIBHEIF_API
107
+ uint32_t heif_image_get_component_width(const heif_image*, uint32_t component_id);
108
+
109
+ LIBHEIF_API
110
+ uint32_t heif_image_get_component_height(const heif_image*, uint32_t component_id);
111
+
112
+ LIBHEIF_API
113
+ int heif_image_get_component_bits_per_pixel(const heif_image*, uint32_t component_id);
114
+
115
+ LIBHEIF_API
116
+ uint16_t heif_image_get_component_type(const heif_image*, uint32_t component_id);
117
+
118
+ // Returns the datatype (unsigned/signed integer, floating point, or complex
119
+ // number) of the given component.
120
+ LIBHEIF_API
121
+ heif_component_datatype heif_image_get_component_datatype(const heif_image*, uint32_t component_id);
122
+
123
+
124
+ // --- ID-based component access via heif_image_handle (before decoding)
125
+ //
126
+ // These let the caller introspect a multi-component image's components without
127
+ // decoding any tile. They return 0 / -1 / heif_component_datatype_undefined for
128
+ // images that do not expose a component model or for unknown component IDs.
129
+ //
130
+ // The component IDs returned here match the IDs that
131
+ // heif_image_get_used_component_ids() will report after the same image is
132
+ // decoded, so the same numerical id can be used to address a component on
133
+ // either side of the API.
134
+
135
+ LIBHEIF_API
136
+ uint32_t heif_image_handle_get_number_of_components(const heif_image_handle*);
137
+
138
+ // Fills `out_component_ids` with the valid component IDs.
139
+ // The caller must allocate an array of at least
140
+ // heif_image_handle_get_number_of_components() elements.
141
+ LIBHEIF_API
142
+ void heif_image_handle_get_used_component_ids(const heif_image_handle*, uint32_t* out_component_ids);
143
+
144
+ LIBHEIF_API
145
+ uint16_t heif_image_handle_get_component_type(const heif_image_handle*, uint32_t component_id);
146
+
147
+ LIBHEIF_API
148
+ int heif_image_handle_get_component_bits_per_pixel(const heif_image_handle*, uint32_t component_id);
149
+
150
+ LIBHEIF_API
151
+ heif_component_datatype heif_image_handle_get_component_datatype(const heif_image_handle*, uint32_t component_id);
152
+
153
+
154
+ // --- adding components to a heif_image (encoder path)
155
+
156
+ LIBHEIF_API
157
+ heif_error heif_image_add_component(heif_image* image,
158
+ int width, int height,
159
+ uint16_t component_type,
160
+ heif_component_datatype datatype,
161
+ int bit_depth,
162
+ uint32_t* out_component_id);
163
+
164
+
165
+ // --- untyped uint8 component data getters: stride is in BYTES per row.
166
+
167
+ LIBHEIF_API
168
+ const uint8_t* heif_image_get_component_readonly(const heif_image*, uint32_t component_id, size_t* out_stride);
169
+
170
+ LIBHEIF_API
171
+ uint8_t* heif_image_get_component(heif_image*, uint32_t component_id, size_t* out_stride);
172
+
173
+
174
+ // --- typed component data getters: `out_row_elements` is the number of T
175
+ // elements per row, not bytes. Index with `data[y * row_elements + x]` (no
176
+ // casts, no sizeof). libheif allocates rows with element-aligned padding, so
177
+ // this count is always exact for the named type T.
178
+
179
+ LIBHEIF_API
180
+ const uint16_t* heif_image_get_component_uint16_readonly(const heif_image*, uint32_t component_id, size_t* out_row_elements);
181
+
182
+ LIBHEIF_API
183
+ uint16_t* heif_image_get_component_uint16(heif_image*, uint32_t component_id, size_t* out_row_elements);
184
+
185
+ LIBHEIF_API
186
+ const uint32_t* heif_image_get_component_uint32_readonly(const heif_image*, uint32_t component_id, size_t* out_row_elements);
187
+
188
+ LIBHEIF_API
189
+ uint32_t* heif_image_get_component_uint32(heif_image*, uint32_t component_id, size_t* out_row_elements);
190
+
191
+ LIBHEIF_API
192
+ const uint64_t* heif_image_get_component_uint64_readonly(const heif_image*, uint32_t component_id, size_t* out_row_elements);
193
+
194
+ LIBHEIF_API
195
+ uint64_t* heif_image_get_component_uint64(heif_image*, uint32_t component_id, size_t* out_row_elements);
196
+
197
+ LIBHEIF_API
198
+ const int8_t* heif_image_get_component_int8_readonly(const heif_image*, uint32_t component_id, size_t* out_row_elements);
199
+
200
+ LIBHEIF_API
201
+ int8_t* heif_image_get_component_int8(heif_image*, uint32_t component_id, size_t* out_row_elements);
202
+
203
+ LIBHEIF_API
204
+ const int16_t* heif_image_get_component_int16_readonly(const heif_image*, uint32_t component_id, size_t* out_row_elements);
205
+
206
+ LIBHEIF_API
207
+ int16_t* heif_image_get_component_int16(heif_image*, uint32_t component_id, size_t* out_row_elements);
208
+
209
+ LIBHEIF_API
210
+ const int32_t* heif_image_get_component_int32_readonly(const heif_image*, uint32_t component_id, size_t* out_row_elements);
211
+
212
+ LIBHEIF_API
213
+ int32_t* heif_image_get_component_int32(heif_image*, uint32_t component_id, size_t* out_row_elements);
214
+
215
+ LIBHEIF_API
216
+ const int64_t* heif_image_get_component_int64_readonly(const heif_image*, uint32_t component_id, size_t* out_row_elements);
217
+
218
+ LIBHEIF_API
219
+ int64_t* heif_image_get_component_int64(heif_image*, uint32_t component_id, size_t* out_row_elements);
220
+
221
+ LIBHEIF_API
222
+ const float* heif_image_get_component_float32_readonly(const heif_image*, uint32_t component_id, size_t* out_row_elements);
223
+
224
+ LIBHEIF_API
225
+ float* heif_image_get_component_float32(heif_image*, uint32_t component_id, size_t* out_row_elements);
226
+
227
+ LIBHEIF_API
228
+ const double* heif_image_get_component_float64_readonly(const heif_image*, uint32_t component_id, size_t* out_row_elements);
229
+
230
+ LIBHEIF_API
231
+ double* heif_image_get_component_float64(heif_image*, uint32_t component_id, size_t* out_row_elements);
232
+
233
+ LIBHEIF_API
234
+ const heif_complex32* heif_image_get_component_complex32_readonly(const heif_image*, uint32_t component_id, size_t* out_row_elements);
235
+
236
+ LIBHEIF_API
237
+ heif_complex32* heif_image_get_component_complex32(heif_image*, uint32_t component_id, size_t* out_row_elements);
238
+
239
+ LIBHEIF_API
240
+ const heif_complex64* heif_image_get_component_complex64_readonly(const heif_image*, uint32_t component_id, size_t* out_row_elements);
241
+
242
+ LIBHEIF_API
243
+ heif_complex64* heif_image_get_component_complex64(heif_image*, uint32_t component_id, size_t* out_row_elements);
244
+
245
+
246
+ // --- GIMI component content IDs (set before encoding)
247
+
248
+ // Set a GIMI component content ID for the component with the given
249
+ // component_id (as minted by heif_image_add_component / returned via the
250
+ // component access API). Pass an empty string to clear a previously set id.
251
+ // Returns an error if no component with this id exists on the image.
252
+ // The collected ids are written into an ItemComponentContentIDProperty box
253
+ // during encoding.
254
+ LIBHEIF_API
255
+ heif_error heif_image_set_gimi_component_content_id(heif_image*,
256
+ uint32_t component_id,
257
+ const char* content_id);
258
+
259
+
260
+ #ifdef __cplusplus
261
+ }
262
+ #endif
263
+
264
+ #endif
@@ -302,7 +302,8 @@ void heif_context_debug_dump_boxes_to_file(heif_context* ctx, int fd);
302
302
  // When enabled, the output file will use a single 'mini' box instead of the standard
303
303
  // meta+mdat box structure, if the file content is compatible with the mini format.
304
304
  // If the content cannot be represented as a mini box, the standard format is used as fallback.
305
- // Requires ENABLE_EXPERIMENTAL_MINI_FORMAT to be enabled at compile time.
305
+ // Note: the mini box format is defined by a draft amendment to ISO/IEC 23008-12
306
+ // and may have reduced interoperability with other readers.
306
307
  // Default: disabled.
307
308
  LIBHEIF_API
308
309
  void heif_context_set_write_mini_format(heif_context*, int enable);