@img/sharp-libvips-dev-wasm32 1.3.0-rc.1 → 1.3.0-rc.10

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 (191) 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 +15 -3
  11. package/include/expat_config.h +6 -6
  12. package/include/expat_external.h +4 -4
  13. package/include/glib-2.0/gio/gdbusconnection.h +2 -8
  14. package/include/glib-2.0/gio/gfileattribute.h +1 -1
  15. package/include/glib-2.0/gio/gfileinfo.h +5 -0
  16. package/include/glib-2.0/gio/gicon.h +1 -1
  17. package/include/glib-2.0/gio/gio-autocleanups.h +0 -1
  18. package/include/glib-2.0/gio/gio-visibility.h +34 -0
  19. package/include/glib-2.0/gio/gio.h +2 -0
  20. package/include/glib-2.0/gio/gioenums.h +66 -44
  21. package/include/glib-2.0/gio/gioenumtypes.h +2 -0
  22. package/include/glib-2.0/gio/giptosmessage.h +46 -0
  23. package/include/glib-2.0/gio/gipv6tclassmessage.h +46 -0
  24. package/include/glib-2.0/gio/gresolver.h +1 -1
  25. package/include/glib-2.0/gio/gsettings.h +1 -1
  26. package/include/glib-2.0/gio/gsocketcontrolmessage.h +2 -0
  27. package/include/glib-2.0/glib/gatomic.h +26 -2
  28. package/include/glib-2.0/glib/gfileutils.h +2 -2
  29. package/include/glib-2.0/glib/ghook.h +3 -1
  30. package/include/glib-2.0/glib/giochannel.h +1 -1
  31. package/include/glib-2.0/glib/gkeyfile.h +1 -1
  32. package/include/glib-2.0/glib/glib-visibility.h +34 -0
  33. package/include/glib-2.0/glib/gmacros.h +32 -0
  34. package/include/glib-2.0/glib/gmain.h +4 -0
  35. package/include/glib-2.0/glib/gmarkup.h +18 -1
  36. package/include/glib-2.0/glib/gmem.h +4 -4
  37. package/include/glib-2.0/glib/gmessages.h +7 -9
  38. package/include/glib-2.0/glib/gnode.h +1 -1
  39. package/include/glib-2.0/glib/goption.h +1 -1
  40. package/include/glib-2.0/glib/gsequence.h +2 -2
  41. package/include/glib-2.0/glib/gslice.h +12 -4
  42. package/include/glib-2.0/glib/gspawn.h +1 -1
  43. package/include/glib-2.0/glib/gstrfuncs.h +191 -1
  44. package/include/glib-2.0/glib/gtestutils.h +6 -3
  45. package/include/glib-2.0/glib/gtimer.h +1 -0
  46. package/include/glib-2.0/glib/guri.h +3 -3
  47. package/include/glib-2.0/glib/gutils.h +10 -1
  48. package/include/glib-2.0/glib/gvarianttype.h +16 -16
  49. package/include/glib-2.0/glib/gversionmacros.h +22 -0
  50. package/include/glib-2.0/gmodule/gmodule-visibility.h +34 -0
  51. package/include/glib-2.0/gmodule.h +1 -1
  52. package/include/glib-2.0/gobject/gbinding.h +1 -1
  53. package/include/glib-2.0/gobject/gobject-visibility.h +34 -0
  54. package/include/glib-2.0/gobject/gobject.h +1 -1
  55. package/include/glib-2.0/gobject/gparam.h +1 -1
  56. package/include/glib-2.0/gobject/gsignal.h +8 -8
  57. package/include/glib-2.0/gobject/gtype.h +17 -17
  58. package/include/hwy/aligned_allocator.h +44 -2
  59. package/include/hwy/auto_tune.h +22 -6
  60. package/include/hwy/base.h +60 -90
  61. package/include/hwy/bit_set.h +410 -0
  62. package/include/hwy/cache_control.h +3 -2
  63. package/include/hwy/detect_compiler_arch.h +134 -14
  64. package/include/hwy/detect_targets.h +82 -36
  65. package/include/hwy/highway.h +15 -0
  66. package/include/hwy/nanobenchmark.h +12 -3
  67. package/include/hwy/ops/arm_neon-inl.h +96 -25
  68. package/include/hwy/ops/arm_sve-inl.h +250 -95
  69. package/include/hwy/ops/emu128-inl.h +12 -7
  70. package/include/hwy/ops/generic_ops-inl.h +271 -131
  71. package/include/hwy/ops/loongarch_lasx-inl.h +31 -9
  72. package/include/hwy/ops/loongarch_lsx-inl.h +33 -12
  73. package/include/hwy/ops/ppc_vsx-inl.h +99 -19
  74. package/include/hwy/ops/rvv-inl.h +239 -130
  75. package/include/hwy/ops/scalar-inl.h +22 -7
  76. package/include/hwy/ops/set_macros-inl.h +163 -107
  77. package/include/hwy/ops/wasm_128-inl.h +13 -22
  78. package/include/hwy/ops/x86_128-inl.h +223 -120
  79. package/include/hwy/ops/x86_256-inl.h +70 -134
  80. package/include/hwy/ops/x86_512-inl.h +130 -134
  81. package/include/hwy/print-inl.h +2 -0
  82. package/include/hwy/profiler.h +355 -264
  83. package/include/hwy/robust_statistics.h +3 -1
  84. package/include/hwy/timer.h +44 -0
  85. package/include/lcms2.h +35 -5
  86. package/include/lcms2_plugin.h +1 -1
  87. package/include/libexif/exif-utils.h +1 -1
  88. package/include/libheif/heif.h +2 -0
  89. package/include/libheif/heif_aux_images.h +2 -2
  90. package/include/libheif/heif_brands.h +16 -4
  91. package/include/libheif/heif_color.h +147 -25
  92. package/include/libheif/heif_components.h +264 -0
  93. package/include/libheif/heif_context.h +18 -4
  94. package/include/libheif/heif_cxx.h +20 -18
  95. package/include/libheif/heif_decoding.h +63 -9
  96. package/include/libheif/heif_encoding.h +46 -12
  97. package/include/libheif/heif_error.h +15 -6
  98. package/include/libheif/heif_export.h +48 -0
  99. package/include/libheif/heif_image.h +94 -32
  100. package/include/libheif/heif_image_handle.h +54 -3
  101. package/include/libheif/heif_items.h +25 -2
  102. package/include/libheif/heif_library.h +13 -18
  103. package/include/libheif/heif_metadata.h +5 -2
  104. package/include/libheif/heif_omaf.h +104 -0
  105. package/include/libheif/heif_plugin.h +80 -13
  106. package/include/libheif/heif_properties.h +259 -5
  107. package/include/libheif/heif_regions.h +5 -3
  108. package/include/libheif/heif_security.h +24 -2
  109. package/include/libheif/heif_sequences.h +163 -14
  110. package/include/libheif/heif_text.h +161 -0
  111. package/include/libheif/heif_tiling.h +2 -2
  112. package/include/libheif/heif_uncompressed.h +29 -5
  113. package/include/libheif/heif_version.h +2 -2
  114. package/include/libpng16/png.h +637 -488
  115. package/include/libpng16/pngconf.h +2 -2
  116. package/include/libpng16/pnglibconf.h +2 -2
  117. package/include/png.h +637 -488
  118. package/include/pngconf.h +2 -2
  119. package/include/pnglibconf.h +2 -2
  120. package/include/resvg.h +3 -3
  121. package/include/tiffconf.h +9 -10
  122. package/include/tiffio.h +10 -9
  123. package/include/tiffvers.h +1 -1
  124. package/include/ultrahdr_api.h +5 -11
  125. package/include/vips/colour.h +2 -2
  126. package/include/vips/memory.h +1 -1
  127. package/include/vips/version.h +4 -4
  128. package/include/zlib.h +3 -3
  129. package/lib/glib-2.0/include/glibconfig.h +1 -3
  130. package/lib/libaom.a +0 -0
  131. package/lib/libcgif.a +0 -0
  132. package/lib/libexif.a +0 -0
  133. package/lib/libexif.la +1 -1
  134. package/lib/libexpat.a +0 -0
  135. package/lib/libexpat.la +2 -2
  136. package/lib/libffi.a +0 -0
  137. package/lib/libgio-2.0.a +0 -0
  138. package/lib/libglib-2.0.a +0 -0
  139. package/lib/libgmodule-2.0.a +0 -0
  140. package/lib/libgobject-2.0.a +0 -0
  141. package/lib/libgthread-2.0.a +0 -0
  142. package/lib/libheif.a +0 -0
  143. package/lib/libhwy.a +0 -0
  144. package/lib/libimagequant.a +0 -0
  145. package/lib/libjpeg.a +0 -0
  146. package/lib/liblcms2.a +0 -0
  147. package/lib/libpng.a +0 -0
  148. package/lib/libpng.la +2 -2
  149. package/lib/libpng16.a +0 -0
  150. package/lib/libpng16.la +2 -2
  151. package/lib/libresvg.a +0 -0
  152. package/lib/libsharpyuv.a +0 -0
  153. package/lib/libtiff.a +0 -0
  154. package/lib/libuhdr.a +0 -0
  155. package/lib/libvips-cpp.a +0 -0
  156. package/lib/libvips.a +0 -0
  157. package/lib/libwebp.a +0 -0
  158. package/lib/libwebpdecoder.a +0 -0
  159. package/lib/libwebpdemux.a +0 -0
  160. package/lib/libwebpmux.a +0 -0
  161. package/lib/libz.a +0 -0
  162. package/lib/pkgconfig/aom.pc +2 -2
  163. package/lib/pkgconfig/cgif.pc +1 -1
  164. package/lib/pkgconfig/expat.pc +1 -1
  165. package/lib/pkgconfig/gio-2.0.pc +1 -1
  166. package/lib/pkgconfig/glib-2.0.pc +1 -1
  167. package/lib/pkgconfig/gmodule-2.0.pc +1 -1
  168. package/lib/pkgconfig/gmodule-export-2.0.pc +1 -1
  169. package/lib/pkgconfig/gmodule-no-export-2.0.pc +1 -1
  170. package/lib/pkgconfig/gobject-2.0.pc +1 -1
  171. package/lib/pkgconfig/gthread-2.0.pc +1 -1
  172. package/lib/pkgconfig/lcms2.pc +1 -1
  173. package/lib/pkgconfig/libexif.pc +1 -1
  174. package/lib/pkgconfig/libheif.pc +1 -1
  175. package/lib/pkgconfig/libhwy.pc +3 -4
  176. package/lib/pkgconfig/libpng.pc +1 -1
  177. package/lib/pkgconfig/libpng16.pc +1 -1
  178. package/lib/pkgconfig/libsharpyuv.pc +1 -1
  179. package/lib/pkgconfig/libtiff-4.pc +2 -2
  180. package/lib/pkgconfig/libwebp.pc +1 -1
  181. package/lib/pkgconfig/libwebpdecoder.pc +11 -0
  182. package/lib/pkgconfig/libwebpmux.pc +1 -1
  183. package/lib/pkgconfig/vips-cpp.pc +1 -1
  184. package/lib/pkgconfig/vips.pc +1 -1
  185. package/package.json +1 -1
  186. package/versions.json +15 -15
  187. package/lib/libsharpyuv.la +0 -41
  188. package/lib/libtiff.la +0 -41
  189. package/lib/libwebp.la +0 -41
  190. package/lib/libwebpdemux.la +0 -41
  191. 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
@@ -1,7 +1,7 @@
1
1
  //---------------------------------------------------------------------------------
2
2
  //
3
3
  // Little Color Management System
4
- // Copyright (c) 1998-2025 Marti Maria Saguer
4
+ // Copyright (c) 1998-2026 Marti Maria Saguer
5
5
  //
6
6
  // Permission is hereby granted, free of charge, to any person obtaining
7
7
  // a copy of this software and associated documentation files (the "Software"),
@@ -23,7 +23,7 @@
23
23
  //
24
24
  //---------------------------------------------------------------------------------
25
25
  //
26
- // Version 2.17
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 2170
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,
@@ -1,7 +1,7 @@
1
1
  //---------------------------------------------------------------------------------
2
2
  //
3
3
  // Little Color Management System
4
- // Copyright (c) 1998-2024 Marti Maria Saguer
4
+ // Copyright (c) 1998-2026 Marti Maria Saguer
5
5
  //
6
6
  // Permission is hereby granted, free of charge, to any person obtaining
7
7
  // a copy of this software and associated documentation files (the "Software"),
@@ -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
@@ -51,12 +51,12 @@ heif_error heif_image_handle_get_depth_image_handle(const heif_image_handle* han
51
51
  heif_image_handle** out_depth_handle);
52
52
 
53
53
 
54
- enum heif_depth_representation_type {
54
+ typedef enum heif_depth_representation_type {
55
55
  heif_depth_representation_type_uniform_inverse_Z = 0,
56
56
  heif_depth_representation_type_uniform_disparity = 1,
57
57
  heif_depth_representation_type_uniform_Z = 2,
58
58
  heif_depth_representation_type_nonuniform_disparity = 3
59
- };
59
+ } heif_depth_representation_type;
60
60
 
61
61
  typedef struct heif_depth_representation_info {
62
62
  uint8_t version;
@@ -250,7 +250,19 @@ typedef uint32_t heif_brand2;
250
250
  #define heif_brand2_avci heif_fourcc('a','v','c','i')
251
251
  #define heif_brand2_avcs heif_fourcc('a','v','c','s')
252
252
 
253
+ /**
254
+ * Unified ID namespace (`unif`) brand.
255
+ *
256
+ * All IDs (item, track, entity group) share a single global namespace.
257
+ *
258
+ * See ISO/IEC 14496-12.
259
+ */
260
+ #define heif_brand2_unif heif_fourcc('u','n','i','f')
261
+
253
262
  #define heif_brand2_iso8 heif_fourcc('i','s','o','8')
263
+ #define heif_brand2_isom heif_fourcc('i','s','o','m')
264
+ #define heif_brand2_mp41 heif_fourcc('m','p','4','1')
265
+ #define heif_brand2_mp42 heif_fourcc('m','p','4','2')
254
266
 
255
267
  // input data should be at least 12 bytes
256
268
  LIBHEIF_API
@@ -308,13 +320,13 @@ const char* heif_get_file_mime_type(const uint8_t* data, int len);
308
320
 
309
321
  // ========================= file type check ======================
310
322
 
311
- enum heif_filetype_result
323
+ typedef enum heif_filetype_result
312
324
  {
313
325
  heif_filetype_no,
314
326
  heif_filetype_yes_supported, // it is heif and can be read by libheif
315
327
  heif_filetype_yes_unsupported, // it is heif, but cannot be read by libheif
316
328
  heif_filetype_maybe // not sure whether it is an heif, try detection with more input data
317
- };
329
+ } heif_filetype_result;
318
330
 
319
331
  // input data should be at least 12 bytes
320
332
  LIBHEIF_API
@@ -339,7 +351,7 @@ int heif_check_jpeg_filetype(const uint8_t* data, int len);
339
351
  // ===================== DEPRECATED =====================
340
352
 
341
353
  // DEPRECATED, use heif_brand2 and the heif_brand2_* constants instead
342
- enum heif_brand
354
+ typedef enum heif_brand
343
355
  {
344
356
  heif_unknown_brand,
345
357
  heif_heic, // HEIF image with h265
@@ -359,7 +371,7 @@ enum heif_brand
359
371
  heif_evbs, // EVC sequence
360
372
  heif_j2ki, // JPEG2000 image
361
373
  heif_j2is, // JPEG2000 image sequence
362
- };
374
+ } heif_brand;
363
375
 
364
376
  // input data should be at least 12 bytes
365
377
  // DEPRECATED, use heif_read_main_brand() instead
@@ -31,7 +31,7 @@ extern "C" {
31
31
  typedef struct heif_image heif_image;
32
32
 
33
33
 
34
- enum heif_chroma_downsampling_algorithm
34
+ typedef enum heif_chroma_downsampling_algorithm
35
35
  {
36
36
  heif_chroma_downsampling_nearest_neighbor = 1,
37
37
  heif_chroma_downsampling_average = 2,
@@ -39,13 +39,13 @@ enum heif_chroma_downsampling_algorithm
39
39
  // Combine with 'heif_chroma_upsampling_bilinear' for best quality.
40
40
  // Makes edges look sharper when using YUV 420 with bilinear chroma upsampling.
41
41
  heif_chroma_downsampling_sharp_yuv = 3
42
- };
42
+ } heif_chroma_downsampling_algorithm;
43
43
 
44
- enum heif_chroma_upsampling_algorithm
44
+ typedef enum heif_chroma_upsampling_algorithm
45
45
  {
46
46
  heif_chroma_upsampling_nearest_neighbor = 1,
47
47
  heif_chroma_upsampling_bilinear = 2
48
- };
48
+ } heif_chroma_upsampling_algorithm;
49
49
 
50
50
 
51
51
  typedef struct heif_color_conversion_options
@@ -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
@@ -71,12 +71,12 @@ typedef struct heif_color_conversion_options
71
71
  } heif_color_conversion_options;
72
72
 
73
73
 
74
- enum heif_alpha_composition_mode
74
+ typedef enum heif_alpha_composition_mode
75
75
  {
76
76
  heif_alpha_composition_mode_none,
77
77
  heif_alpha_composition_mode_solid_color,
78
78
  heif_alpha_composition_mode_checkerboard,
79
- };
79
+ } heif_alpha_composition_mode;
80
80
 
81
81
 
82
82
  typedef struct heif_color_conversion_options_ext
@@ -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;
@@ -111,13 +111,13 @@ void heif_color_conversion_options_ext_free(heif_color_conversion_options_ext*);
111
111
 
112
112
  // ------------------------- color profiles -------------------------
113
113
 
114
- enum heif_color_profile_type
114
+ typedef enum heif_color_profile_type
115
115
  {
116
116
  heif_color_profile_type_not_present = 0,
117
117
  heif_color_profile_type_nclx = heif_fourcc('n', 'c', 'l', 'x'),
118
118
  heif_color_profile_type_rICC = heif_fourcc('r', 'I', 'C', 'C'),
119
119
  heif_color_profile_type_prof = heif_fourcc('p', 'r', 'o', 'f')
120
- };
120
+ } heif_color_profile_type;
121
121
 
122
122
 
123
123
  // Returns 'heif_color_profile_type_not_present' if there is no color profile.
@@ -126,7 +126,7 @@ 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);
@@ -137,7 +137,7 @@ struct heif_error heif_image_handle_get_raw_color_profile(const heif_image_handl
137
137
  void* out_data);
138
138
 
139
139
 
140
- enum heif_color_primaries
140
+ typedef enum heif_color_primaries
141
141
  {
142
142
  heif_color_primaries_ITU_R_BT_709_5 = 1, // g=0.3;0.6, b=0.15;0.06, r=0.64;0.33, w=0.3127,0.3290
143
143
  heif_color_primaries_unspecified = 2,
@@ -151,9 +151,9 @@ enum heif_color_primaries
151
151
  heif_color_primaries_SMPTE_RP_431_2 = 11,
152
152
  heif_color_primaries_SMPTE_EG_432_1 = 12,
153
153
  heif_color_primaries_EBU_Tech_3213_E = 22
154
- };
154
+ } heif_color_primaries;
155
155
 
156
- enum heif_transfer_characteristics
156
+ typedef enum heif_transfer_characteristics
157
157
  {
158
158
  heif_transfer_characteristic_ITU_R_BT_709_5 = 1,
159
159
  heif_transfer_characteristic_unspecified = 2,
@@ -172,9 +172,9 @@ enum heif_transfer_characteristics
172
172
  heif_transfer_characteristic_ITU_R_BT_2100_0_PQ = 16,
173
173
  heif_transfer_characteristic_SMPTE_ST_428_1 = 17,
174
174
  heif_transfer_characteristic_ITU_R_BT_2100_0_HLG = 18
175
- };
175
+ } heif_transfer_characteristics;
176
176
 
177
- enum heif_matrix_coefficients
177
+ typedef enum heif_matrix_coefficients
178
178
  {
179
179
  heif_matrix_coefficients_RGB_GBR = 0,
180
180
  heif_matrix_coefficients_ITU_R_BT_709_5 = 1, // TODO: or 709-6 according to h.273
@@ -190,7 +190,7 @@ enum heif_matrix_coefficients
190
190
  heif_matrix_coefficients_chromaticity_derived_non_constant_luminance = 12,
191
191
  heif_matrix_coefficients_chromaticity_derived_constant_luminance = 13,
192
192
  heif_matrix_coefficients_ICtCp = 14
193
- };
193
+ } heif_matrix_coefficients;
194
194
 
195
195
  typedef struct heif_color_profile_nclx
196
196
  {
@@ -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
 
@@ -297,16 +314,49 @@ int heif_image_handle_get_content_light_level(const heif_image_handle*, heif_con
297
314
  LIBHEIF_API
298
315
  void heif_image_set_content_light_level(const heif_image*, const heif_content_light_level* in);
299
316
 
317
+ LIBHEIF_API
318
+ void heif_image_handle_set_content_light_level(const heif_image_handle*, const heif_content_light_level* in);
319
+
300
320
 
301
321
  // --- mastering display colour volume ---
302
322
 
303
- // 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).
304
332
  typedef struct heif_mastering_display_colour_volume
305
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.
306
340
  uint16_t display_primaries_x[3];
307
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.
308
348
  uint16_t white_point_x;
309
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.
310
360
  uint32_t max_display_mastering_luminance;
311
361
  uint32_t min_display_mastering_luminance;
312
362
  } heif_mastering_display_colour_volume;
@@ -322,9 +372,24 @@ typedef struct heif_decoded_mastering_display_colour_volume
322
372
  double min_display_mastering_luminance;
323
373
  } heif_decoded_mastering_display_colour_volume;
324
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.
325
378
  typedef struct heif_ambient_viewing_environment
326
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".
327
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.
328
393
  uint16_t ambient_light_x;
329
394
  uint16_t ambient_light_y;
330
395
  } heif_ambient_viewing_environment;
@@ -332,6 +397,9 @@ typedef struct heif_ambient_viewing_environment
332
397
  LIBHEIF_API
333
398
  int heif_image_has_mastering_display_colour_volume(const heif_image*);
334
399
 
400
+ LIBHEIF_API
401
+ int heif_image_handle_has_mastering_display_colour_volume(const heif_image_handle*);
402
+
335
403
  LIBHEIF_API
336
404
  void heif_image_get_mastering_display_colour_volume(const heif_image*, heif_mastering_display_colour_volume* out);
337
405
 
@@ -342,6 +410,60 @@ int heif_image_handle_get_mastering_display_colour_volume(const heif_image_handl
342
410
  LIBHEIF_API
343
411
  void heif_image_set_mastering_display_colour_volume(const heif_image*, const heif_mastering_display_colour_volume* in);
344
412
 
413
+ LIBHEIF_API
414
+ void heif_image_handle_set_mastering_display_colour_volume(const heif_image_handle*, const heif_mastering_display_colour_volume* in);
415
+
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
+
345
467
 
346
468
  // Converts the internal numeric representation of heif_mastering_display_colour_volume to the
347
469
  // normalized values, collected in heif_decoded_mastering_display_colour_volume.