@woosh/meep-engine 3.9.0 → 3.10.0

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 (696) hide show
  1. package/build/bundle-worker-image-decoder.js +1 -1
  2. package/build/bundle-worker-terrain.js +1 -1
  3. package/package.json +3 -2
  4. package/src/avif/encode_image_source.d.ts +70 -0
  5. package/src/avif/encode_image_source.d.ts.map +1 -0
  6. package/src/avif/encode_image_source.js +117 -0
  7. package/src/avif/encoder_worker.js +15 -126
  8. package/src/avif/index.d.ts +4 -2
  9. package/src/avif/index.js +21 -2
  10. package/src/avif/native/DECISIONS.md +537 -0
  11. package/src/avif/native/NOTICE.md +61 -0
  12. package/src/avif/native/api/AvifDecoder.d.ts +67 -0
  13. package/src/avif/native/api/AvifDecoder.d.ts.map +1 -0
  14. package/src/avif/native/api/AvifDecoder.js +121 -0
  15. package/src/avif/native/api/apply_transformations.d.ts +30 -0
  16. package/src/avif/native/api/apply_transformations.d.ts.map +1 -0
  17. package/src/avif/native/api/apply_transformations.js +120 -0
  18. package/src/avif/native/api/avif_to_sampler2d.d.ts +25 -0
  19. package/src/avif/native/api/avif_to_sampler2d.d.ts.map +1 -0
  20. package/src/avif/native/api/avif_to_sampler2d.js +42 -0
  21. package/src/avif/native/api/convert_to_rgba.d.ts +54 -0
  22. package/src/avif/native/api/convert_to_rgba.d.ts.map +1 -0
  23. package/src/avif/native/api/convert_to_rgba.js +204 -0
  24. package/src/avif/native/api/decode_avif.d.ts +24 -0
  25. package/src/avif/native/api/decode_avif.d.ts.map +1 -0
  26. package/src/avif/native/api/decode_avif.js +111 -0
  27. package/src/avif/native/api/decode_image_item.d.ts +18 -0
  28. package/src/avif/native/api/decode_image_item.d.ts.map +1 -0
  29. package/src/avif/native/api/decode_image_item.js +234 -0
  30. package/src/avif/native/api/encode_avif.d.ts +73 -0
  31. package/src/avif/native/api/encode_avif.d.ts.map +1 -0
  32. package/src/avif/native/api/encode_avif.js +488 -0
  33. package/src/avif/native/api/sampler2d_to_avif.d.ts +22 -0
  34. package/src/avif/native/api/sampler2d_to_avif.d.ts.map +1 -0
  35. package/src/avif/native/api/sampler2d_to_avif.js +108 -0
  36. package/src/avif/native/av1/decode/Av1FrameContext.d.ts +286 -0
  37. package/src/avif/native/av1/decode/Av1FrameContext.d.ts.map +1 -0
  38. package/src/avif/native/av1/decode/Av1FrameContext.js +622 -0
  39. package/src/avif/native/av1/decode/block_decoded.d.ts +27 -0
  40. package/src/avif/native/av1/decode/block_decoded.d.ts.map +1 -0
  41. package/src/avif/native/av1/decode/block_decoded.js +59 -0
  42. package/src/avif/native/av1/decode/decode_av1_still.d.ts +22 -0
  43. package/src/avif/native/av1/decode/decode_av1_still.d.ts.map +1 -0
  44. package/src/avif/native/av1/decode/decode_av1_still.js +309 -0
  45. package/src/avif/native/av1/decode/decode_coefficients.d.ts +20 -0
  46. package/src/avif/native/av1/decode/decode_coefficients.d.ts.map +1 -0
  47. package/src/avif/native/av1/decode/decode_coefficients.js +259 -0
  48. package/src/avif/native/av1/decode/decode_palette.d.ts +28 -0
  49. package/src/avif/native/av1/decode/decode_palette.d.ts.map +1 -0
  50. package/src/avif/native/av1/decode/decode_palette.js +442 -0
  51. package/src/avif/native/av1/decode/decode_tile.d.ts +14 -0
  52. package/src/avif/native/av1/decode/decode_tile.d.ts.map +1 -0
  53. package/src/avif/native/av1/decode/decode_tile.js +1213 -0
  54. package/src/avif/native/av1/decode/get_scan.d.ts +16 -0
  55. package/src/avif/native/av1/decode/get_scan.d.ts.map +1 -0
  56. package/src/avif/native/av1/decode/get_scan.js +138 -0
  57. package/src/avif/native/av1/decode/read_lr.d.ts +35 -0
  58. package/src/avif/native/av1/decode/read_lr.d.ts.map +1 -0
  59. package/src/avif/native/av1/decode/read_lr.js +277 -0
  60. package/src/avif/native/av1/decode/read_transform_type.d.ts +19 -0
  61. package/src/avif/native/av1/decode/read_transform_type.d.ts.map +1 -0
  62. package/src/avif/native/av1/decode/read_transform_type.js +92 -0
  63. package/src/avif/native/av1/decode/reconstruct.d.ts +36 -0
  64. package/src/avif/native/av1/decode/reconstruct.d.ts.map +1 -0
  65. package/src/avif/native/av1/decode/reconstruct.js +241 -0
  66. package/src/avif/native/av1/decode/transform_type.d.ts +49 -0
  67. package/src/avif/native/av1/decode/transform_type.d.ts.map +1 -0
  68. package/src/avif/native/av1/decode/transform_type.js +137 -0
  69. package/src/avif/native/av1/encode/Av1BlockSnapshot.d.ts +81 -0
  70. package/src/avif/native/av1/encode/Av1BlockSnapshot.d.ts.map +1 -0
  71. package/src/avif/native/av1/encode/Av1BlockSnapshot.js +299 -0
  72. package/src/avif/native/av1/encode/Av1EncodeContext.d.ts +384 -0
  73. package/src/avif/native/av1/encode/Av1EncodeContext.d.ts.map +1 -0
  74. package/src/avif/native/av1/encode/Av1EncodeContext.js +590 -0
  75. package/src/avif/native/av1/encode/build_headers.d.ts +50 -0
  76. package/src/avif/native/av1/encode/build_headers.d.ts.map +1 -0
  77. package/src/avif/native/av1/encode/build_headers.js +359 -0
  78. package/src/avif/native/av1/encode/choose_chroma_alpha.d.ts +26 -0
  79. package/src/avif/native/av1/encode/choose_chroma_alpha.d.ts.map +1 -0
  80. package/src/avif/native/av1/encode/choose_chroma_alpha.js +90 -0
  81. package/src/avif/native/av1/encode/choose_filters.d.ts +21 -0
  82. package/src/avif/native/av1/encode/choose_filters.d.ts.map +1 -0
  83. package/src/avif/native/av1/encode/choose_filters.js +318 -0
  84. package/src/avif/native/av1/encode/choose_restoration.d.ts +35 -0
  85. package/src/avif/native/av1/encode/choose_restoration.d.ts.map +1 -0
  86. package/src/avif/native/av1/encode/choose_restoration.js +616 -0
  87. package/src/avif/native/av1/encode/decode_effort.d.ts +57 -0
  88. package/src/avif/native/av1/encode/decode_effort.d.ts.map +1 -0
  89. package/src/avif/native/av1/encode/decode_effort.js +59 -0
  90. package/src/avif/native/av1/encode/encode_av1_still.d.ts +17 -0
  91. package/src/avif/native/av1/encode/encode_av1_still.d.ts.map +1 -0
  92. package/src/avif/native/av1/encode/encode_av1_still.js +194 -0
  93. package/src/avif/native/av1/encode/encode_effort.d.ts +56 -0
  94. package/src/avif/native/av1/encode/encode_effort.d.ts.map +1 -0
  95. package/src/avif/native/av1/encode/encode_effort.js +97 -0
  96. package/src/avif/native/av1/encode/encode_tile.d.ts +26 -0
  97. package/src/avif/native/av1/encode/encode_tile.d.ts.map +1 -0
  98. package/src/avif/native/av1/encode/encode_tile.js +2331 -0
  99. package/src/avif/native/av1/encode/quantise.d.ts +51 -0
  100. package/src/avif/native/av1/encode/quantise.d.ts.map +1 -0
  101. package/src/avif/native/av1/encode/quantise.js +212 -0
  102. package/src/avif/native/av1/encode/write_coefficients.d.ts +42 -0
  103. package/src/avif/native/av1/encode/write_coefficients.d.ts.map +1 -0
  104. package/src/avif/native/av1/encode/write_coefficients.js +367 -0
  105. package/src/avif/native/av1/encode/write_lr.d.ts +33 -0
  106. package/src/avif/native/av1/encode/write_lr.d.ts.map +1 -0
  107. package/src/avif/native/av1/encode/write_lr.js +174 -0
  108. package/src/avif/native/av1/encode/write_transform_type.d.ts +21 -0
  109. package/src/avif/native/av1/encode/write_transform_type.d.ts.map +1 -0
  110. package/src/avif/native/av1/encode/write_transform_type.js +70 -0
  111. package/src/avif/native/av1/entropy/CdfContext.d.ts +167 -0
  112. package/src/avif/native/av1/entropy/CdfContext.d.ts.map +1 -0
  113. package/src/avif/native/av1/entropy/CdfContext.js +433 -0
  114. package/src/avif/native/av1/entropy/SymbolReader.d.ts +103 -0
  115. package/src/avif/native/av1/entropy/SymbolReader.d.ts.map +1 -0
  116. package/src/avif/native/av1/entropy/SymbolReader.js +317 -0
  117. package/src/avif/native/av1/entropy/SymbolWriter.d.ts +107 -0
  118. package/src/avif/native/av1/entropy/SymbolWriter.d.ts.map +1 -0
  119. package/src/avif/native/av1/entropy/SymbolWriter.js +352 -0
  120. package/src/avif/native/av1/entropy/coefficient_context.d.ts +71 -0
  121. package/src/avif/native/av1/entropy/coefficient_context.d.ts.map +1 -0
  122. package/src/avif/native/av1/entropy/coefficient_context.js +325 -0
  123. package/src/avif/native/av1/entropy/partition_cdf.d.ts +54 -0
  124. package/src/avif/native/av1/entropy/partition_cdf.d.ts.map +1 -0
  125. package/src/avif/native/av1/entropy/partition_cdf.js +98 -0
  126. package/src/avif/native/av1/entropy/symbol_cost.d.ts +37 -0
  127. package/src/avif/native/av1/entropy/symbol_cost.d.ts.map +1 -0
  128. package/src/avif/native/av1/entropy/symbol_cost.js +76 -0
  129. package/src/avif/native/av1/filter/cdef.d.ts +15 -0
  130. package/src/avif/native/av1/filter/cdef.d.ts.map +1 -0
  131. package/src/avif/native/av1/filter/cdef.js +313 -0
  132. package/src/avif/native/av1/filter/loop_filter.d.ts +14 -0
  133. package/src/avif/native/av1/filter/loop_filter.d.ts.map +1 -0
  134. package/src/avif/native/av1/filter/loop_filter.js +377 -0
  135. package/src/avif/native/av1/filter/loop_restoration.d.ts +42 -0
  136. package/src/avif/native/av1/filter/loop_restoration.d.ts.map +1 -0
  137. package/src/avif/native/av1/filter/loop_restoration.js +451 -0
  138. package/src/avif/native/av1/filter/superres.d.ts +18 -0
  139. package/src/avif/native/av1/filter/superres.d.ts.map +1 -0
  140. package/src/avif/native/av1/filter/superres.js +86 -0
  141. package/src/avif/native/av1/grain/FilmGrainState.d.ts +62 -0
  142. package/src/avif/native/av1/grain/FilmGrainState.d.ts.map +1 -0
  143. package/src/avif/native/av1/grain/FilmGrainState.js +87 -0
  144. package/src/avif/native/av1/grain/film_grain.d.ts +16 -0
  145. package/src/avif/native/av1/grain/film_grain.d.ts.map +1 -0
  146. package/src/avif/native/av1/grain/film_grain.js +623 -0
  147. package/src/avif/native/av1/obu/FrameHeader.d.ts +248 -0
  148. package/src/avif/native/av1/obu/FrameHeader.d.ts.map +1 -0
  149. package/src/avif/native/av1/obu/FrameHeader.js +381 -0
  150. package/src/avif/native/av1/obu/ObuHeader.d.ts +53 -0
  151. package/src/avif/native/av1/obu/ObuHeader.d.ts.map +1 -0
  152. package/src/avif/native/av1/obu/ObuHeader.js +62 -0
  153. package/src/avif/native/av1/obu/SequenceHeader.d.ts +157 -0
  154. package/src/avif/native/av1/obu/SequenceHeader.d.ts.map +1 -0
  155. package/src/avif/native/av1/obu/SequenceHeader.js +225 -0
  156. package/src/avif/native/av1/obu/for_each_obu.d.ts +24 -0
  157. package/src/avif/native/av1/obu/for_each_obu.d.ts.map +1 -0
  158. package/src/avif/native/av1/obu/for_each_obu.js +50 -0
  159. package/src/avif/native/av1/obu/parse_frame_header.d.ts +18 -0
  160. package/src/avif/native/av1/obu/parse_frame_header.d.ts.map +1 -0
  161. package/src/avif/native/av1/obu/parse_frame_header.js +841 -0
  162. package/src/avif/native/av1/obu/parse_obu_header.d.ts +23 -0
  163. package/src/avif/native/av1/obu/parse_obu_header.d.ts.map +1 -0
  164. package/src/avif/native/av1/obu/parse_obu_header.js +69 -0
  165. package/src/avif/native/av1/obu/parse_sequence_header.d.ts +17 -0
  166. package/src/avif/native/av1/obu/parse_sequence_header.d.ts.map +1 -0
  167. package/src/avif/native/av1/obu/parse_sequence_header.js +263 -0
  168. package/src/avif/native/av1/obu/write_frame_header.d.ts +16 -0
  169. package/src/avif/native/av1/obu/write_frame_header.d.ts.map +1 -0
  170. package/src/avif/native/av1/obu/write_frame_header.js +579 -0
  171. package/src/avif/native/av1/obu/write_sequence_header.d.ts +17 -0
  172. package/src/avif/native/av1/obu/write_sequence_header.d.ts.map +1 -0
  173. package/src/avif/native/av1/obu/write_sequence_header.js +189 -0
  174. package/src/avif/native/av1/predict/IntraPredictionState.d.ts +49 -0
  175. package/src/avif/native/av1/predict/IntraPredictionState.d.ts.map +1 -0
  176. package/src/avif/native/av1/predict/IntraPredictionState.js +58 -0
  177. package/src/avif/native/av1/predict/intra_filter_type.d.ts +17 -0
  178. package/src/avif/native/av1/predict/intra_filter_type.d.ts.map +1 -0
  179. package/src/avif/native/av1/predict/intra_filter_type.js +79 -0
  180. package/src/avif/native/av1/predict/predict_chroma_from_luma.d.ts +50 -0
  181. package/src/avif/native/av1/predict/predict_chroma_from_luma.d.ts.map +1 -0
  182. package/src/avif/native/av1/predict/predict_chroma_from_luma.js +153 -0
  183. package/src/avif/native/av1/predict/predict_intra.d.ts +42 -0
  184. package/src/avif/native/av1/predict/predict_intra.d.ts.map +1 -0
  185. package/src/avif/native/av1/predict/predict_intra.js +803 -0
  186. package/src/avif/native/av1/predict/predict_palette.d.ts +23 -0
  187. package/src/avif/native/av1/predict/predict_palette.d.ts.map +1 -0
  188. package/src/avif/native/av1/predict/predict_palette.js +36 -0
  189. package/src/avif/native/av1/tables/av1_symbols.d.ts +411 -0
  190. package/src/avif/native/av1/tables/av1_symbols.d.ts.map +1 -0
  191. package/src/avif/native/av1/tables/av1_symbols.js +419 -0
  192. package/src/avif/native/av1/tables/block_tables.d.ts +181 -0
  193. package/src/avif/native/av1/tables/block_tables.d.ts.map +1 -0
  194. package/src/avif/native/av1/tables/block_tables.js +270 -0
  195. package/src/avif/native/av1/tables/cdf_tables.d.ts +961 -0
  196. package/src/avif/native/av1/tables/cdf_tables.d.ts.map +1 -0
  197. package/src/avif/native/av1/tables/cdf_tables.js +1893 -0
  198. package/src/avif/native/av1/tables/coefficient_tables.d.ts +41 -0
  199. package/src/avif/native/av1/tables/coefficient_tables.d.ts.map +1 -0
  200. package/src/avif/native/av1/tables/coefficient_tables.js +82 -0
  201. package/src/avif/native/av1/tables/derived_block_tables.d.ts +15 -0
  202. package/src/avif/native/av1/tables/derived_block_tables.d.ts.map +1 -0
  203. package/src/avif/native/av1/tables/derived_block_tables.js +23 -0
  204. package/src/avif/native/av1/tables/filter_tables.d.ts +171 -0
  205. package/src/avif/native/av1/tables/filter_tables.d.ts.map +1 -0
  206. package/src/avif/native/av1/tables/filter_tables.js +313 -0
  207. package/src/avif/native/av1/tables/grain_tables.d.ts +11 -0
  208. package/src/avif/native/av1/tables/grain_tables.d.ts.map +1 -0
  209. package/src/avif/native/av1/tables/grain_tables.js +190 -0
  210. package/src/avif/native/av1/tables/prediction_tables.d.ts +141 -0
  211. package/src/avif/native/av1/tables/prediction_tables.d.ts.map +1 -0
  212. package/src/avif/native/av1/tables/prediction_tables.js +223 -0
  213. package/src/avif/native/av1/tables/quantizer_matrix_tables.d.ts +21 -0
  214. package/src/avif/native/av1/tables/quantizer_matrix_tables.d.ts.map +1 -0
  215. package/src/avif/native/av1/tables/quantizer_matrix_tables.js +38 -0
  216. package/src/avif/native/av1/tables/quantizer_tables.d.ts +21 -0
  217. package/src/avif/native/av1/tables/quantizer_tables.d.ts.map +1 -0
  218. package/src/avif/native/av1/tables/quantizer_tables.js +160 -0
  219. package/src/avif/native/av1/tables/scan_tables.d.ts +321 -0
  220. package/src/avif/native/av1/tables/scan_tables.d.ts.map +1 -0
  221. package/src/avif/native/av1/tables/scan_tables.js +727 -0
  222. package/src/avif/native/av1/tables/segmentation_tables.d.ts +31 -0
  223. package/src/avif/native/av1/tables/segmentation_tables.d.ts.map +1 -0
  224. package/src/avif/native/av1/tables/segmentation_tables.js +48 -0
  225. package/src/avif/native/av1/tables/transform_tables.d.ts +91 -0
  226. package/src/avif/native/av1/tables/transform_tables.d.ts.map +1 -0
  227. package/src/avif/native/av1/tables/transform_tables.js +140 -0
  228. package/src/avif/native/av1/tables/unpack_table.d.ts +33 -0
  229. package/src/avif/native/av1/tables/unpack_table.d.ts.map +1 -0
  230. package/src/avif/native/av1/tables/unpack_table.js +73 -0
  231. package/src/avif/native/av1/transform/forward_transform_2d.d.ts +61 -0
  232. package/src/avif/native/av1/transform/forward_transform_2d.d.ts.map +1 -0
  233. package/src/avif/native/av1/transform/forward_transform_2d.js +574 -0
  234. package/src/avif/native/av1/transform/inverse_transform_1d.d.ts +76 -0
  235. package/src/avif/native/av1/transform/inverse_transform_1d.d.ts.map +1 -0
  236. package/src/avif/native/av1/transform/inverse_transform_1d.js +590 -0
  237. package/src/avif/native/av1/transform/inverse_transform_2d.d.ts +46 -0
  238. package/src/avif/native/av1/transform/inverse_transform_2d.d.ts.map +1 -0
  239. package/src/avif/native/av1/transform/inverse_transform_2d.js +180 -0
  240. package/src/avif/native/av1/util/ceil_log2.d.ts +13 -0
  241. package/src/avif/native/av1/util/ceil_log2.d.ts.map +1 -0
  242. package/src/avif/native/av1/util/ceil_log2.js +18 -0
  243. package/src/avif/native/av1/util/floor_log2.d.ts +20 -0
  244. package/src/avif/native/av1/util/floor_log2.d.ts.map +1 -0
  245. package/src/avif/native/av1/util/floor_log2.js +20 -0
  246. package/src/avif/native/av1/util/round2.d.ts +22 -0
  247. package/src/avif/native/av1/util/round2.d.ts.map +1 -0
  248. package/src/avif/native/av1/util/round2.js +27 -0
  249. package/src/avif/native/av1/util/round2_signed.d.ts +14 -0
  250. package/src/avif/native/av1/util/round2_signed.d.ts.map +1 -0
  251. package/src/avif/native/av1/util/round2_signed.js +17 -0
  252. package/src/avif/native/av1/util/tile_log2.d.ts +16 -0
  253. package/src/avif/native/av1/util/tile_log2.d.ts.map +1 -0
  254. package/src/avif/native/av1/util/tile_log2.js +23 -0
  255. package/src/avif/native/bitstream/BitReader.d.ts +174 -0
  256. package/src/avif/native/bitstream/BitReader.d.ts.map +1 -0
  257. package/src/avif/native/bitstream/BitReader.js +391 -0
  258. package/src/avif/native/bitstream/BitWriter.d.ts +122 -0
  259. package/src/avif/native/bitstream/BitWriter.d.ts.map +1 -0
  260. package/src/avif/native/bitstream/BitWriter.js +351 -0
  261. package/src/avif/native/color/ColourTransform.d.ts +62 -0
  262. package/src/avif/native/color/ColourTransform.d.ts.map +1 -0
  263. package/src/avif/native/color/ColourTransform.js +189 -0
  264. package/src/avif/native/color/YuvImage.d.ts +51 -0
  265. package/src/avif/native/color/YuvImage.d.ts.map +1 -0
  266. package/src/avif/native/color/YuvImage.js +66 -0
  267. package/src/avif/native/color/clamp_sample.d.ts +18 -0
  268. package/src/avif/native/color/clamp_sample.d.ts.map +1 -0
  269. package/src/avif/native/color/clamp_sample.js +25 -0
  270. package/src/avif/native/color/linear_to_transfer.d.ts +24 -0
  271. package/src/avif/native/color/linear_to_transfer.d.ts.map +1 -0
  272. package/src/avif/native/color/linear_to_transfer.js +126 -0
  273. package/src/avif/native/color/primaries.d.ts +20 -0
  274. package/src/avif/native/color/primaries.d.ts.map +1 -0
  275. package/src/avif/native/color/primaries.js +94 -0
  276. package/src/avif/native/color/rgb_row_to_ycbcr.d.ts +20 -0
  277. package/src/avif/native/color/rgb_row_to_ycbcr.d.ts.map +1 -0
  278. package/src/avif/native/color/rgb_row_to_ycbcr.js +78 -0
  279. package/src/avif/native/color/transfer_to_linear.d.ts +49 -0
  280. package/src/avif/native/color/transfer_to_linear.d.ts.map +1 -0
  281. package/src/avif/native/color/transfer_to_linear.js +171 -0
  282. package/src/avif/native/color/upsample_chroma_row.d.ts +35 -0
  283. package/src/avif/native/color/upsample_chroma_row.d.ts.map +1 -0
  284. package/src/avif/native/color/upsample_chroma_row.js +89 -0
  285. package/src/avif/native/color/ycbcr_row_to_rgb.d.ts +23 -0
  286. package/src/avif/native/color/ycbcr_row_to_rgb.d.ts.map +1 -0
  287. package/src/avif/native/color/ycbcr_row_to_rgb.js +78 -0
  288. package/src/avif/native/heif/AvifFile.d.ts +112 -0
  289. package/src/avif/native/heif/AvifFile.d.ts.map +1 -0
  290. package/src/avif/native/heif/AvifFile.js +142 -0
  291. package/src/avif/native/heif/ItemProperty.d.ts +244 -0
  292. package/src/avif/native/heif/ItemProperty.d.ts.map +1 -0
  293. package/src/avif/native/heif/ItemProperty.js +321 -0
  294. package/src/avif/native/heif/find_item_property.d.ts +17 -0
  295. package/src/avif/native/heif/find_item_property.d.ts.map +1 -0
  296. package/src/avif/native/heif/find_item_property.js +28 -0
  297. package/src/avif/native/heif/find_item_references.d.ts +16 -0
  298. package/src/avif/native/heif/find_item_references.d.ts.map +1 -0
  299. package/src/avif/native/heif/find_item_references.js +29 -0
  300. package/src/avif/native/heif/find_items_referencing.d.ts +17 -0
  301. package/src/avif/native/heif/find_items_referencing.d.ts.map +1 -0
  302. package/src/avif/native/heif/find_items_referencing.js +36 -0
  303. package/src/avif/native/heif/parse_avif_file.d.ts +15 -0
  304. package/src/avif/native/heif/parse_avif_file.d.ts.map +1 -0
  305. package/src/avif/native/heif/parse_avif_file.js +383 -0
  306. package/src/avif/native/heif/parse_image_grid.d.ts +18 -0
  307. package/src/avif/native/heif/parse_image_grid.d.ts.map +1 -0
  308. package/src/avif/native/heif/parse_image_grid.js +48 -0
  309. package/src/avif/native/heif/parse_item_property.d.ts +18 -0
  310. package/src/avif/native/heif/parse_item_property.d.ts.map +1 -0
  311. package/src/avif/native/heif/parse_item_property.js +243 -0
  312. package/src/avif/native/heif/read_item_data.d.ts +22 -0
  313. package/src/avif/native/heif/read_item_data.d.ts.map +1 -0
  314. package/src/avif/native/heif/read_item_data.js +97 -0
  315. package/src/avif/native/heif/write_avif_file.d.ts +50 -0
  316. package/src/avif/native/heif/write_avif_file.d.ts.map +1 -0
  317. package/src/avif/native/heif/write_avif_file.js +348 -0
  318. package/src/avif/native/heif/write_item_property.d.ts +16 -0
  319. package/src/avif/native/heif/write_item_property.d.ts.map +1 -0
  320. package/src/avif/native/heif/write_item_property.js +182 -0
  321. package/src/avif/native/index.d.ts +14 -0
  322. package/src/avif/native/index.d.ts.map +1 -0
  323. package/src/avif/native/index.js +56 -0
  324. package/src/avif/native/isobmff/BoxHeader.d.ts +50 -0
  325. package/src/avif/native/isobmff/BoxHeader.d.ts.map +1 -0
  326. package/src/avif/native/isobmff/BoxHeader.js +57 -0
  327. package/src/avif/native/isobmff/BoxWriter.d.ts +118 -0
  328. package/src/avif/native/isobmff/BoxWriter.d.ts.map +1 -0
  329. package/src/avif/native/isobmff/BoxWriter.js +264 -0
  330. package/src/avif/native/isobmff/ByteCursor.d.ts +125 -0
  331. package/src/avif/native/isobmff/ByteCursor.d.ts.map +1 -0
  332. package/src/avif/native/isobmff/ByteCursor.js +298 -0
  333. package/src/avif/native/isobmff/for_each_box.d.ts +23 -0
  334. package/src/avif/native/isobmff/for_each_box.d.ts.map +1 -0
  335. package/src/avif/native/isobmff/for_each_box.js +39 -0
  336. package/src/avif/native/isobmff/read_box_header.d.ts +22 -0
  337. package/src/avif/native/isobmff/read_box_header.d.ts.map +1 -0
  338. package/src/avif/native/isobmff/read_box_header.js +59 -0
  339. package/src/avif/native/isobmff/read_full_box_header.d.ts +26 -0
  340. package/src/avif/native/isobmff/read_full_box_header.d.ts.map +1 -0
  341. package/src/avif/native/isobmff/read_full_box_header.js +33 -0
  342. package/src/avif/threaded_image_encoder.d.ts +7 -2
  343. package/src/avif/threaded_image_encoder.d.ts.map +1 -1
  344. package/src/avif/threaded_image_encoder.js +107 -21
  345. package/src/core/binary/BinaryBuffer.d.ts +40 -0
  346. package/src/core/binary/BinaryBuffer.d.ts.map +1 -1
  347. package/src/core/binary/BinaryBuffer.js +100 -0
  348. package/src/core/binary/hash/crc32.d.ts +16 -0
  349. package/src/core/binary/hash/crc32.d.ts.map +1 -0
  350. package/src/core/binary/hash/crc32.js +96 -0
  351. package/src/core/binary/utf8/utf8_decode.d.ts +21 -0
  352. package/src/core/binary/utf8/utf8_decode.d.ts.map +1 -0
  353. package/src/core/binary/utf8/utf8_decode.js +43 -0
  354. package/src/core/binary/utf8/utf8_encode_into.d.ts +20 -0
  355. package/src/core/binary/utf8/utf8_encode_into.d.ts.map +1 -0
  356. package/src/core/binary/utf8/utf8_encode_into.js +48 -0
  357. package/src/core/binary/utf8/utf8_encoded_length.d.ts +14 -0
  358. package/src/core/binary/utf8/utf8_encoded_length.d.ts.map +1 -0
  359. package/src/core/binary/utf8/utf8_encoded_length.js +36 -0
  360. package/src/core/color/COLOR_FIX_PLAN_2026_08_28.md +417 -0
  361. package/src/core/color/COLOR_REVIEW_2026_08_28.md +779 -0
  362. package/src/core/color/Color.d.ts +128 -20
  363. package/src/core/color/Color.d.ts.map +1 -1
  364. package/src/core/color/Color.js +959 -866
  365. package/src/core/color/PQ/PQ_constants.d.ts +10 -0
  366. package/src/core/color/PQ/PQ_constants.d.ts.map +1 -1
  367. package/src/core/color/PQ/PQ_constants.js +10 -0
  368. package/src/core/color/PQ/linear_to_PQ.d.ts.map +1 -1
  369. package/src/core/color/PQ/linear_to_PQ.js +6 -0
  370. package/src/core/color/REC709_PRIMARIES.d.ts +50 -0
  371. package/src/core/color/REC709_PRIMARIES.d.ts.map +1 -0
  372. package/src/core/color/REC709_PRIMARIES.js +53 -0
  373. package/src/core/color/construct/color_from_hex.d.ts +21 -0
  374. package/src/core/color/construct/color_from_hex.d.ts.map +1 -0
  375. package/src/core/color/construct/color_from_hex.js +33 -0
  376. package/src/core/color/construct/color_from_temperature.d.ts +22 -0
  377. package/src/core/color/construct/color_from_temperature.d.ts.map +1 -0
  378. package/src/core/color/construct/color_from_temperature.js +33 -0
  379. package/src/core/color/construct/color_from_uint24.d.ts +19 -0
  380. package/src/core/color/construct/color_from_uint24.d.ts.map +1 -0
  381. package/src/core/color/construct/color_from_uint24.js +26 -0
  382. package/src/core/color/construct/color_from_uint32.d.ts +20 -0
  383. package/src/core/color/construct/color_from_uint32.d.ts.map +1 -0
  384. package/src/core/color/construct/color_from_uint32.js +39 -0
  385. package/src/core/color/construct/color_gray.d.ts +17 -0
  386. package/src/core/color/construct/color_gray.d.ts.map +1 -0
  387. package/src/core/color/construct/color_gray.js +22 -0
  388. package/src/core/color/hex/hex2rgb.d.ts +1 -11
  389. package/src/core/color/hex/hex2rgb.d.ts.map +1 -1
  390. package/src/core/color/hex/hex2rgb.js +7 -24
  391. package/src/core/color/hex/hex_to_rgb.d.ts +18 -0
  392. package/src/core/color/hex/hex_to_rgb.d.ts.map +1 -0
  393. package/src/core/color/hex/hex_to_rgb.js +62 -0
  394. package/src/core/color/hex/rgb2hex.d.ts +1 -8
  395. package/src/core/color/hex/rgb2hex.d.ts.map +1 -1
  396. package/src/core/color/hex/rgb2hex.js +7 -13
  397. package/src/core/color/hex/rgb_to_hex.d.ts +9 -0
  398. package/src/core/color/hex/rgb_to_hex.d.ts.map +1 -0
  399. package/src/core/color/hex/rgb_to_hex.js +13 -0
  400. package/src/core/color/hex/rgba_to_hex.d.ts +19 -0
  401. package/src/core/color/hex/rgba_to_hex.d.ts.map +1 -0
  402. package/src/core/color/hex/rgba_to_hex.js +23 -0
  403. package/src/core/color/hsv/hsv2rgb.d.ts +1 -12
  404. package/src/core/color/hsv/hsv2rgb.d.ts.map +1 -1
  405. package/src/core/color/hsv/hsv2rgb.js +8 -21
  406. package/src/core/color/hsv/hsv2rgb_float.d.ts +1 -12
  407. package/src/core/color/hsv/hsv2rgb_float.d.ts.map +1 -1
  408. package/src/core/color/hsv/hsv2rgb_float.js +8 -56
  409. package/src/core/color/hsv/hsv_to_rgb.d.ts +13 -0
  410. package/src/core/color/hsv/hsv_to_rgb.d.ts.map +1 -0
  411. package/src/core/color/hsv/hsv_to_rgb.js +39 -0
  412. package/src/core/color/hsv/hsv_to_rgb_uint8.d.ts +13 -0
  413. package/src/core/color/hsv/hsv_to_rgb_uint8.d.ts.map +1 -0
  414. package/src/core/color/hsv/hsv_to_rgb_uint8.js +21 -0
  415. package/src/core/color/hsv/hue_to_rgb_sextant.d.ts +24 -0
  416. package/src/core/color/hsv/hue_to_rgb_sextant.d.ts.map +1 -0
  417. package/src/core/color/hsv/hue_to_rgb_sextant.js +67 -0
  418. package/src/core/color/hsv/rgb2hsv.d.ts +1 -12
  419. package/src/core/color/hsv/rgb2hsv.d.ts.map +1 -1
  420. package/src/core/color/hsv/rgb2hsv.js +7 -42
  421. package/src/core/color/hsv/rgb_to_hsv.d.ts +13 -0
  422. package/src/core/color/hsv/rgb_to_hsv.d.ts.map +1 -0
  423. package/src/core/color/hsv/rgb_to_hsv.js +42 -0
  424. package/src/core/color/hunt/hpe_to_xyz.d.ts +2 -0
  425. package/src/core/color/hunt/hpe_to_xyz.d.ts.map +1 -0
  426. package/src/core/color/hunt/hpe_to_xyz.js +4 -0
  427. package/src/core/color/hunt/xyz_to_hpe.d.ts +1 -6
  428. package/src/core/color/hunt/xyz_to_hpe.d.ts.map +1 -1
  429. package/src/core/color/hunt/xyz_to_hpe.js +12 -15
  430. package/src/core/color/illuminant/D65_spd_tabulated.d.ts.map +1 -1
  431. package/src/core/color/illuminant/D65_spd_tabulated.js +107 -104
  432. package/src/core/color/int2rgb.d.ts +1 -10
  433. package/src/core/color/int2rgb.d.ts.map +1 -1
  434. package/src/core/color/int2rgb.js +7 -12
  435. package/src/core/color/int_to_rgb.d.ts +21 -0
  436. package/src/core/color/int_to_rgb.d.ts.map +1 -0
  437. package/src/core/color/int_to_rgb.js +33 -0
  438. package/src/core/color/kelvin/kelvin_to_rgb.d.ts.map +1 -1
  439. package/src/core/color/kelvin/kelvin_to_rgb.js +22 -2
  440. package/src/core/color/kelvin/rgb_to_kelvin.d.ts +22 -2
  441. package/src/core/color/kelvin/rgb_to_kelvin.d.ts.map +1 -1
  442. package/src/core/color/kelvin/rgb_to_kelvin.js +22 -2
  443. package/src/core/color/lab/lab_to_xyz.d.ts +20 -0
  444. package/src/core/color/lab/lab_to_xyz.d.ts.map +1 -0
  445. package/src/core/color/lab/lab_to_xyz.js +69 -0
  446. package/src/core/color/oklab/gamut_clip_adaptive_l0.d.ts +34 -0
  447. package/src/core/color/oklab/gamut_clip_adaptive_l0.d.ts.map +1 -0
  448. package/src/core/color/oklab/gamut_clip_adaptive_l0.js +46 -0
  449. package/src/core/color/oklab/gamut_clip_at_l0.d.ts +33 -0
  450. package/src/core/color/oklab/gamut_clip_at_l0.d.ts.map +1 -0
  451. package/src/core/color/oklab/gamut_clip_at_l0.js +84 -0
  452. package/src/core/color/oklab/gamut_clip_preserve_chroma.d.ts +24 -0
  453. package/src/core/color/oklab/gamut_clip_preserve_chroma.d.ts.map +1 -0
  454. package/src/core/color/oklab/gamut_clip_preserve_chroma.js +37 -0
  455. package/src/core/color/oklab/gamut_clip_project_to_lcusp.d.ts +23 -0
  456. package/src/core/color/oklab/gamut_clip_project_to_lcusp.d.ts.map +1 -0
  457. package/src/core/color/oklab/gamut_clip_project_to_lcusp.js +46 -0
  458. package/src/core/color/oklab/linear_srgb_to_okhsl.d.ts +19 -0
  459. package/src/core/color/oklab/linear_srgb_to_okhsl.d.ts.map +1 -0
  460. package/src/core/color/oklab/linear_srgb_to_okhsl.js +93 -0
  461. package/src/core/color/oklab/linear_srgb_to_okhsv.d.ts +12 -4
  462. package/src/core/color/oklab/linear_srgb_to_okhsv.d.ts.map +1 -1
  463. package/src/core/color/oklab/linear_srgb_to_okhsv.js +108 -84
  464. package/src/core/color/oklab/linear_srgb_to_oklab.d.ts +13 -4
  465. package/src/core/color/oklab/linear_srgb_to_oklab.d.ts.map +1 -1
  466. package/src/core/color/oklab/linear_srgb_to_oklab.js +28 -19
  467. package/src/core/color/oklab/okhsl_chroma_bounds.d.ts +51 -0
  468. package/src/core/color/oklab/okhsl_chroma_bounds.d.ts.map +1 -0
  469. package/src/core/color/oklab/okhsl_chroma_bounds.js +128 -0
  470. package/src/core/color/oklab/okhsl_to_linear_srgb.d.ts +19 -0
  471. package/src/core/color/oklab/okhsl_to_linear_srgb.d.ts.map +1 -0
  472. package/src/core/color/oklab/okhsl_to_linear_srgb.js +85 -0
  473. package/src/core/color/oklab/oklab_to_oklch.d.ts +24 -0
  474. package/src/core/color/oklab/oklab_to_oklch.d.ts.map +1 -0
  475. package/src/core/color/oklab/oklab_to_oklch.js +35 -0
  476. package/src/core/color/oklab/oklch_to_oklab.d.ts +18 -0
  477. package/src/core/color/oklab/oklch_to_oklab.d.ts.map +1 -0
  478. package/src/core/color/oklab/oklch_to_oklab.js +26 -0
  479. package/src/core/color/oklab/toe.d.ts +12 -0
  480. package/src/core/color/oklab/toe.d.ts.map +1 -1
  481. package/src/core/color/oklab/toe.js +34 -22
  482. package/src/core/color/operations/color_add.d.ts +21 -0
  483. package/src/core/color/operations/color_add.d.ts.map +1 -0
  484. package/src/core/color/operations/color_add.js +23 -0
  485. package/src/core/color/operations/color_add_scaled.d.ts +20 -0
  486. package/src/core/color/operations/color_add_scaled.d.ts.map +1 -0
  487. package/src/core/color/operations/color_add_scaled.js +30 -0
  488. package/src/core/color/operations/color_clamp.d.ts +22 -0
  489. package/src/core/color/operations/color_clamp.d.ts.map +1 -0
  490. package/src/core/color/operations/color_clamp.js +25 -0
  491. package/src/core/color/operations/color_darken.d.ts +2 -1
  492. package/src/core/color/operations/color_darken.d.ts.map +1 -1
  493. package/src/core/color/operations/color_darken.js +25 -24
  494. package/src/core/color/operations/color_desaturate.d.ts +2 -1
  495. package/src/core/color/operations/color_desaturate.d.ts.map +1 -1
  496. package/src/core/color/operations/color_desaturate.js +25 -24
  497. package/src/core/color/operations/color_get_hsl.d.ts +18 -0
  498. package/src/core/color/operations/color_get_hsl.d.ts.map +1 -0
  499. package/src/core/color/operations/color_get_hsl.js +60 -0
  500. package/src/core/color/operations/color_is_in_gamut.d.ts +20 -0
  501. package/src/core/color/operations/color_is_in_gamut.d.ts.map +1 -0
  502. package/src/core/color/operations/color_is_in_gamut.js +30 -0
  503. package/src/core/color/operations/color_lerp.d.ts +12 -3
  504. package/src/core/color/operations/color_lerp.d.ts.map +1 -1
  505. package/src/core/color/operations/color_lerp.js +55 -46
  506. package/src/core/color/operations/color_lighten.d.ts +9 -5
  507. package/src/core/color/operations/color_lighten.d.ts.map +1 -1
  508. package/src/core/color/operations/color_lighten.js +29 -24
  509. package/src/core/color/operations/color_mix_okhsv_channel.d.ts +24 -0
  510. package/src/core/color/operations/color_mix_okhsv_channel.d.ts.map +1 -0
  511. package/src/core/color/operations/color_mix_okhsv_channel.js +48 -0
  512. package/src/core/color/operations/color_multiply_rgb.d.ts +21 -0
  513. package/src/core/color/operations/color_multiply_rgb.d.ts.map +1 -0
  514. package/src/core/color/operations/color_multiply_rgb.js +26 -0
  515. package/src/core/color/operations/color_saturate.d.ts +9 -5
  516. package/src/core/color/operations/color_saturate.d.ts.map +1 -1
  517. package/src/core/color/operations/color_saturate.js +29 -24
  518. package/src/core/color/operations/color_scale_okhsv_channel.d.ts +1 -1
  519. package/src/core/color/operations/color_scale_okhsv_channel.d.ts.map +1 -1
  520. package/src/core/color/operations/color_scale_okhsv_channel.js +58 -45
  521. package/src/core/color/operations/color_srgb_apply.d.ts +28 -0
  522. package/src/core/color/operations/color_srgb_apply.d.ts.map +1 -0
  523. package/src/core/color/operations/color_srgb_apply.js +40 -0
  524. package/src/core/color/operations/color_sub.d.ts +16 -0
  525. package/src/core/color/operations/color_sub.d.ts.map +1 -0
  526. package/src/core/color/operations/color_sub.js +18 -0
  527. package/src/core/color/parse_color.d.ts +10 -1
  528. package/src/core/color/parse_color.d.ts.map +1 -1
  529. package/src/core/color/parse_color.js +100 -84
  530. package/src/core/color/parse_color_normalized.d.ts +24 -0
  531. package/src/core/color/parse_color_normalized.d.ts.map +1 -0
  532. package/src/core/color/parse_color_normalized.js +38 -0
  533. package/src/core/color/rgb2uint24.d.ts +1 -8
  534. package/src/core/color/rgb2uint24.d.ts.map +1 -1
  535. package/src/core/color/rgb2uint24.js +7 -20
  536. package/src/core/color/rgb2uint32.d.ts +1 -9
  537. package/src/core/color/rgb2uint32.d.ts.map +1 -1
  538. package/src/core/color/rgb2uint32.js +7 -18
  539. package/src/core/color/rgb_to_luminance.d.ts +14 -5
  540. package/src/core/color/rgb_to_luminance.d.ts.map +1 -1
  541. package/src/core/color/rgb_to_luminance.js +24 -13
  542. package/src/core/color/rgb_to_uint24.d.ts +9 -0
  543. package/src/core/color/rgb_to_uint24.d.ts.map +1 -0
  544. package/src/core/color/rgb_to_uint24.js +20 -0
  545. package/src/core/color/rgb_to_uint32.d.ts +10 -0
  546. package/src/core/color/rgb_to_uint32.d.ts.map +1 -0
  547. package/src/core/color/rgb_to_uint32.js +21 -0
  548. package/src/core/color/sRGB/linear_to_sRGB.d.ts +7 -0
  549. package/src/core/color/sRGB/linear_to_sRGB.d.ts.map +1 -1
  550. package/src/core/color/sRGB/linear_to_sRGB.js +39 -32
  551. package/src/core/color/xyz/hpe_to_xyz.d.ts +24 -0
  552. package/src/core/color/xyz/hpe_to_xyz.d.ts.map +1 -0
  553. package/src/core/color/xyz/hpe_to_xyz.js +39 -0
  554. package/src/core/color/xyz/rgb_to_xyz.d.ts +17 -2
  555. package/src/core/color/xyz/rgb_to_xyz.d.ts.map +1 -1
  556. package/src/core/color/xyz/rgb_to_xyz.js +44 -18
  557. package/src/core/color/xyz/xyz_cmf_tabulated.d.ts.map +1 -1
  558. package/src/core/color/xyz/xyz_cmf_tabulated.js +217 -211
  559. package/src/core/color/xyz/xyz_cmf_wyman.d.ts +4 -0
  560. package/src/core/color/xyz/xyz_cmf_wyman.d.ts.map +1 -1
  561. package/src/core/color/xyz/xyz_cmf_wyman.js +74 -65
  562. package/src/core/color/xyz/xyz_to_hpe.d.ts +18 -0
  563. package/src/core/color/xyz/xyz_to_hpe.d.ts.map +1 -0
  564. package/src/core/color/xyz/xyz_to_hpe.js +33 -0
  565. package/src/core/color/xyz/xyz_to_rgb.d.ts +17 -2
  566. package/src/core/color/xyz/xyz_to_rgb.d.ts.map +1 -1
  567. package/src/core/color/xyz/xyz_to_rgb.js +39 -16
  568. package/src/core/color/ycxcz/xyz_to_ycxcz.d.ts +7 -2
  569. package/src/core/color/ycxcz/xyz_to_ycxcz.d.ts.map +1 -1
  570. package/src/core/color/ycxcz/xyz_to_ycxcz.js +33 -28
  571. package/src/core/events/signal/Signal.js +820 -820
  572. package/src/core/math/clamp_index.d.ts +18 -0
  573. package/src/core/math/clamp_index.d.ts.map +1 -0
  574. package/src/core/math/clamp_index.js +23 -0
  575. package/src/engine/asset/loaders/image/IMAGE_CODEC_REVIEW_2026_08_28.md +803 -0
  576. package/src/engine/asset/loaders/image/jpeg/JpegFrame.d.ts +5 -3
  577. package/src/engine/asset/loaders/image/jpeg/JpegFrame.d.ts.map +1 -1
  578. package/src/engine/asset/loaders/image/jpeg/JpegFrame.js +5 -3
  579. package/src/engine/asset/loaders/image/jpeg/JpegFrameComponent.d.ts +2 -1
  580. package/src/engine/asset/loaders/image/jpeg/JpegFrameComponent.d.ts.map +1 -1
  581. package/src/engine/asset/loaders/image/jpeg/JpegFrameComponent.js +2 -1
  582. package/src/engine/asset/loaders/image/jpeg/JpegImage.d.ts +17 -0
  583. package/src/engine/asset/loaders/image/jpeg/JpegImage.d.ts.map +1 -1
  584. package/src/engine/asset/loaders/image/jpeg/JpegImage.js +197 -157
  585. package/src/engine/asset/loaders/image/jpeg/idct8x8_float.d.ts +0 -1
  586. package/src/engine/asset/loaders/image/jpeg/idct8x8_float.d.ts.map +1 -1
  587. package/src/engine/asset/loaders/image/jpeg/idct8x8_float.js +0 -1
  588. package/src/engine/asset/loaders/image/jpeg/jpeg_component_row.d.ts +28 -0
  589. package/src/engine/asset/loaders/image/jpeg/jpeg_component_row.d.ts.map +1 -0
  590. package/src/engine/asset/loaders/image/jpeg/jpeg_component_row.js +31 -0
  591. package/src/engine/asset/loaders/image/png/PNG.d.ts +3 -18
  592. package/src/engine/asset/loaders/image/png/PNG.d.ts.map +1 -1
  593. package/src/engine/asset/loaders/image/png/PNG.js +3 -139
  594. package/src/engine/asset/loaders/image/png/PNGReader.d.ts +16 -16
  595. package/src/engine/asset/loaders/image/png/PNGReader.d.ts.map +1 -1
  596. package/src/engine/asset/loaders/image/png/PNGReader.js +143 -160
  597. package/src/engine/asset/loaders/image/png/chunk/png_chunk_decode_iTXt.js +3 -3
  598. package/src/engine/asset/loaders/image/png/chunk/png_chunk_decode_zTXt.js +3 -3
  599. package/src/engine/asset/loaders/image/png/crc32.d.ts +1 -15
  600. package/src/engine/asset/loaders/image/png/crc32.d.ts.map +1 -1
  601. package/src/engine/asset/loaders/image/png/crc32.js +5 -89
  602. package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterNone.d.ts +12 -10
  603. package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterNone.d.ts.map +1 -1
  604. package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterNone.js +20 -45
  605. package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterSub.d.ts +2 -1
  606. package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterSub.d.ts.map +1 -1
  607. package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterSub.js +2 -0
  608. package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterUp.d.ts +2 -1
  609. package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterUp.d.ts.map +1 -1
  610. package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterUp.js +2 -0
  611. package/src/engine/asset/loaders/image/png/filter/png_unfilter.d.ts +22 -0
  612. package/src/engine/asset/loaders/image/png/filter/png_unfilter.d.ts.map +1 -0
  613. package/src/engine/asset/loaders/image/png/filter/png_unfilter.js +68 -0
  614. package/src/engine/asset/loaders/image/png/png_inflate.d.ts +20 -0
  615. package/src/engine/asset/loaders/image/png/png_inflate.d.ts.map +1 -0
  616. package/src/engine/asset/loaders/image/png/png_inflate.js +85 -0
  617. package/src/engine/asset/loaders/image/png/png_unpack_samples.d.ts +22 -0
  618. package/src/engine/asset/loaders/image/png/png_unpack_samples.d.ts.map +1 -0
  619. package/src/engine/asset/loaders/image/png/png_unpack_samples.js +38 -0
  620. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts.map +1 -1
  621. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +135 -132
  622. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +16 -3
  623. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts.map +1 -1
  624. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +1157 -1149
  625. package/src/engine/graphics/render/frame_graph/FrameGraph.js +900 -900
  626. package/src/engine/physics/ecs/PhysicsSystem.d.ts +72 -81
  627. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  628. package/src/engine/physics/ecs/PhysicsSystem.js +86 -77
  629. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  630. package/src/shade/device/IMMEDIATE_DATA_PLAN_2026_08_28.md +451 -0
  631. package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +625 -0
  632. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  633. package/src/shade/renderer/scene/serialization/decode_image_source_hdr.d.ts +14 -3
  634. package/src/shade/renderer/scene/serialization/decode_image_source_hdr.d.ts.map +1 -1
  635. package/src/shade/renderer/scene/serialization/decode_image_source_hdr.js +50 -51
  636. package/src/shade/renderer/scene/serialization/deserialize_scene.d.ts.map +1 -1
  637. package/src/shade/renderer/scene/serialization/deserialize_scene.js +531 -521
  638. package/src/shade/renderer/scene/serialization/write_image_source.d.ts.map +1 -1
  639. package/src/shade/renderer/scene/serialization/write_image_source.js +6 -4
  640. package/src/shade/renderer/shader/chunk/color/chunk_rgb_to_luminance.d.ts.map +1 -1
  641. package/src/shade/renderer/shader/chunk/color/chunk_rgb_to_luminance.js +34 -32
  642. package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_eotf_st2084.d.ts +31 -0
  643. package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_eotf_st2084.d.ts.map +1 -1
  644. package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_eotf_st2084.js +62 -31
  645. package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_inverse_eotf_st2084.d.ts +10 -0
  646. package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_inverse_eotf_st2084.d.ts.map +1 -1
  647. package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_inverse_eotf_st2084.js +32 -22
  648. package/src/shade/renderer/shader/chunk/color/sRGB/chunk_sRGBTransferOETF.d.ts.map +1 -1
  649. package/src/shade/renderer/shader/chunk/color/sRGB/chunk_sRGBTransferOETF.js +22 -21
  650. package/src/shade/renderer/shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.d.ts +6 -0
  651. package/src/shade/renderer/shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.d.ts.map +1 -1
  652. package/src/shade/renderer/shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.js +110 -104
  653. package/src/shade/renderer/shader/chunk/color/xyz/chunk_rgb_to_xyz.d.ts.map +1 -1
  654. package/src/shade/renderer/shader/chunk/color/xyz/chunk_rgb_to_xyz.js +23 -21
  655. package/src/view/elements/ColorPickerView.js +296 -296
  656. package/src/avif/codec/dec/Readme.md +0 -14
  657. package/src/avif/codec/dec/avif_dec.cpp +0 -234
  658. package/src/avif/codec/dec/avif_dec.d.ts +0 -3
  659. package/src/avif/codec/dec/avif_dec.d.ts.map +0 -1
  660. package/src/avif/codec/dec/avif_dec.js +0 -16
  661. package/src/avif/codec/dec/avif_dec.wasm +0 -0
  662. package/src/avif/codec/enc/README.md +0 -37
  663. package/src/avif/codec/enc/avif_enc.cpp +0 -216
  664. package/src/avif/codec/enc/avif_enc.d.ts +0 -3
  665. package/src/avif/codec/enc/avif_enc.d.ts.map +0 -1
  666. package/src/avif/codec/enc/avif_enc.js +0 -6144
  667. package/src/avif/codec/enc/avif_enc.wasm +0 -0
  668. package/src/avif/codec/enc/avif_enc_mt.d.ts +0 -3
  669. package/src/avif/codec/enc/avif_enc_mt.d.ts.map +0 -1
  670. package/src/avif/codec/enc/avif_enc_mt.js +0 -6811
  671. package/src/avif/codec/enc/avif_enc_mt.wasm +0 -0
  672. package/src/avif/codec/enc/avif_enc_mt.worker.d.mts +0 -2
  673. package/src/avif/codec/enc/avif_enc_mt.worker.d.mts.map +0 -1
  674. package/src/avif/codec/enc/avif_enc_mt.worker.d.ts +0 -11
  675. package/src/avif/codec/enc/avif_enc_mt.worker.d.ts.map +0 -1
  676. package/src/avif/codec/enc/avif_enc_mt.worker.js +0 -171
  677. package/src/avif/codec/enc/avif_enc_mt.worker.mjs +0 -1
  678. package/src/avif/decode.d.ts +0 -3
  679. package/src/avif/decode.d.ts.map +0 -1
  680. package/src/avif/decode.js +0 -42
  681. package/src/avif/encode.d.ts +0 -3
  682. package/src/avif/encode.d.ts.map +0 -1
  683. package/src/avif/encode.js +0 -75
  684. package/src/avif/meta.d.ts +0 -24
  685. package/src/avif/meta.d.ts.map +0 -1
  686. package/src/avif/meta.js +0 -23
  687. package/src/avif/tsconfig.tsbuildinfo +0 -1
  688. package/src/avif/utils.d.ts +0 -17
  689. package/src/avif/utils.d.ts.map +0 -1
  690. package/src/avif/utils.js +0 -31
  691. package/src/engine/asset/loaders/image/jpeg/idct8x8_fixed.d.ts +0 -23
  692. package/src/engine/asset/loaders/image/jpeg/idct8x8_fixed.d.ts.map +0 -1
  693. package/src/engine/asset/loaders/image/jpeg/idct8x8_fixed.js +0 -214
  694. package/src/engine/asset/loaders/image/png/inflate.d.ts +0 -7
  695. package/src/engine/asset/loaders/image/png/inflate.d.ts.map +0 -1
  696. package/src/engine/asset/loaders/image/png/inflate.js +0 -20
@@ -0,0 +1,189 @@
1
+ import { CP_BT_709, MC_IDENTITY, TC_SRGB } from "../tables/av1_symbols.js";
2
+
3
+ /**
4
+ * Emit a sequence header OBU payload from `header`.
5
+ *
6
+ * Exactly mirrors {@link parse_sequence_header}: a header that was parsed and is re-emitted is
7
+ * bit-identical, which is what makes the round-trip spec a meaningful check on both directions.
8
+ * Fields the syntax derives rather than codes — `bit_depth`, `num_planes`, `order_hint_bits` — are
9
+ * ignored here and recomputed by the reader.
10
+ *
11
+ * @param {BitWriter} writer
12
+ * @param {SequenceHeader} header
13
+ * @see AV1 spec 5.5.1 "General sequence header OBU syntax"
14
+ *
15
+ * @author Alex Goldring
16
+ * @copyright Company Named Limited (c) 2026
17
+ */
18
+ export function write_sequence_header(writer, header) {
19
+ writer.f(3, header.seq_profile);
20
+ writer.f(1, header.still_picture);
21
+ writer.f(1, header.reduced_still_picture_header);
22
+
23
+ if (header.reduced_still_picture_header === 1) {
24
+ writer.f(5, header.seq_level_idx[0]);
25
+ } else {
26
+ writer.f(1, header.timing_info_present_flag);
27
+
28
+ if (header.timing_info_present_flag === 1) {
29
+ writer.f(32, header.num_units_in_display_tick);
30
+ writer.f(32, header.time_scale);
31
+ writer.f(1, header.equal_picture_interval);
32
+
33
+ if (header.equal_picture_interval === 1) {
34
+ writer.uvlc(header.num_ticks_per_picture_minus_1);
35
+ }
36
+
37
+ writer.f(1, header.decoder_model_info_present_flag);
38
+
39
+ if (header.decoder_model_info_present_flag === 1) {
40
+ writer.f(5, header.buffer_delay_length_minus_1);
41
+ writer.f(32, header.num_units_in_decoding_tick);
42
+ writer.f(5, header.buffer_removal_time_length_minus_1);
43
+ writer.f(5, header.frame_presentation_time_length_minus_1);
44
+ }
45
+ }
46
+
47
+ writer.f(1, header.initial_display_delay_present_flag);
48
+ writer.f(5, header.operating_points_cnt_minus_1);
49
+
50
+ for (let i = 0; i <= header.operating_points_cnt_minus_1; i++) {
51
+ writer.f(12, header.operating_point_idc[i]);
52
+ writer.f(5, header.seq_level_idx[i]);
53
+
54
+ if (header.seq_level_idx[i] > 7) {
55
+ writer.f(1, header.seq_tier[i]);
56
+ }
57
+
58
+ if (header.decoder_model_info_present_flag === 1) {
59
+ writer.f(1, header.decoder_model_present_for_this_op[i]);
60
+
61
+ if (header.decoder_model_present_for_this_op[i] === 1) {
62
+ const n = header.buffer_delay_length_minus_1 + 1;
63
+
64
+ writer.f(n, header.decoder_buffer_delay[i]);
65
+ writer.f(n, header.encoder_buffer_delay[i]);
66
+ writer.f(1, header.low_delay_mode_flag[i]);
67
+ }
68
+ }
69
+
70
+ if (header.initial_display_delay_present_flag === 1) {
71
+ writer.f(1, header.initial_display_delay_present_for_this_op[i]);
72
+
73
+ if (header.initial_display_delay_present_for_this_op[i] === 1) {
74
+ writer.f(4, header.initial_display_delay_minus_1[i]);
75
+ }
76
+ }
77
+ }
78
+ }
79
+
80
+ writer.f(4, header.frame_width_bits_minus_1);
81
+ writer.f(4, header.frame_height_bits_minus_1);
82
+ writer.f(header.frame_width_bits_minus_1 + 1, header.max_frame_width_minus_1);
83
+ writer.f(header.frame_height_bits_minus_1 + 1, header.max_frame_height_minus_1);
84
+
85
+ if (header.reduced_still_picture_header === 0) {
86
+ writer.f(1, header.frame_id_numbers_present_flag);
87
+ }
88
+
89
+ if (header.frame_id_numbers_present_flag === 1) {
90
+ writer.f(4, header.delta_frame_id_length_minus_2);
91
+ writer.f(3, header.additional_frame_id_length_minus_1);
92
+ }
93
+
94
+ writer.f(1, header.use_128x128_superblock);
95
+ writer.f(1, header.enable_filter_intra);
96
+ writer.f(1, header.enable_intra_edge_filter);
97
+
98
+ if (header.reduced_still_picture_header === 0) {
99
+ writer.f(1, header.enable_interintra_compound);
100
+ writer.f(1, header.enable_masked_compound);
101
+ writer.f(1, header.enable_warped_motion);
102
+ writer.f(1, header.enable_dual_filter);
103
+ writer.f(1, header.enable_order_hint);
104
+
105
+ if (header.enable_order_hint === 1) {
106
+ writer.f(1, header.enable_jnt_comp);
107
+ writer.f(1, header.enable_ref_frame_mvs);
108
+ }
109
+
110
+ writer.f(1, header.seq_choose_screen_content_tools);
111
+
112
+ if (header.seq_choose_screen_content_tools === 0) {
113
+ writer.f(1, header.seq_force_screen_content_tools);
114
+ }
115
+
116
+ if (header.seq_force_screen_content_tools > 0) {
117
+ writer.f(1, header.seq_choose_integer_mv);
118
+
119
+ if (header.seq_choose_integer_mv === 0) {
120
+ writer.f(1, header.seq_force_integer_mv);
121
+ }
122
+ }
123
+
124
+ if (header.enable_order_hint === 1) {
125
+ writer.f(3, header.order_hint_bits_minus_1);
126
+ }
127
+ }
128
+
129
+ writer.f(1, header.enable_superres);
130
+ writer.f(1, header.enable_cdef);
131
+ writer.f(1, header.enable_restoration);
132
+
133
+ write_color_config(writer, header);
134
+
135
+ writer.f(1, header.film_grain_params_present);
136
+ }
137
+
138
+ /**
139
+ * @param {BitWriter} writer
140
+ * @param {SequenceHeader} header
141
+ * @see AV1 spec 5.5.2 "Color config syntax"
142
+ */
143
+ function write_color_config(writer, header) {
144
+ writer.f(1, header.high_bitdepth);
145
+
146
+ if (header.seq_profile === 2 && header.high_bitdepth === 1) {
147
+ writer.f(1, header.twelve_bit);
148
+ }
149
+
150
+ if (header.seq_profile !== 1) {
151
+ writer.f(1, header.mono_chrome);
152
+ }
153
+
154
+ writer.f(1, header.color_description_present_flag);
155
+
156
+ if (header.color_description_present_flag === 1) {
157
+ writer.f(8, header.color_primaries);
158
+ writer.f(8, header.transfer_characteristics);
159
+ writer.f(8, header.matrix_coefficients);
160
+ }
161
+
162
+ if (header.mono_chrome === 1) {
163
+ writer.f(1, header.color_range);
164
+
165
+ return;
166
+ }
167
+
168
+ if (header.color_primaries === CP_BT_709
169
+ && header.transfer_characteristics === TC_SRGB
170
+ && header.matrix_coefficients === MC_IDENTITY) {
171
+ // this combination codes neither range nor subsampling
172
+ } else {
173
+ writer.f(1, header.color_range);
174
+
175
+ if (header.seq_profile === 2 && header.bit_depth === 12) {
176
+ writer.f(1, header.subsampling_x);
177
+
178
+ if (header.subsampling_x === 1) {
179
+ writer.f(1, header.subsampling_y);
180
+ }
181
+ }
182
+
183
+ if (header.subsampling_x === 1 && header.subsampling_y === 1) {
184
+ writer.f(2, header.chroma_sample_position);
185
+ }
186
+ }
187
+
188
+ writer.f(1, header.separate_uv_delta_q);
189
+ }
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Where index `0` of an edge buffer sits.
3
+ *
4
+ * The specification indexes `AboveRow` and `LeftCol` from `-2`: `-1` is the corner sample, and the
5
+ * upsample process writes one further back still. Shifting every access by a constant is cheaper
6
+ * and clearer than carrying two arrays.
7
+ * @type {number}
8
+ */
9
+ export const EDGE_ORIGIN: number;
10
+ /**
11
+ * Entries an edge buffer must hold.
12
+ *
13
+ * `AboveRow` runs to `w + h - 1`, at most 127. Upsampling doubles that reach to `2 * numPx - 2`,
14
+ * with `numPx` at most 128, so index 254 is addressable. Plus the two negative entries and one for
15
+ * the interpolation's `base + 1` read at the far end.
16
+ * @type {number}
17
+ */
18
+ export const EDGE_CAPACITY: number;
19
+ /**
20
+ * Everything the intra prediction process needs beyond the pixels themselves.
21
+ *
22
+ * Allocated once per decode and refilled per block, so prediction allocates nothing. Keeping it a
23
+ * struct rather than a reference to the tile decoder is what lets `predict/` stay independent of
24
+ * the decoder's state, as the module contract requires.
25
+ *
26
+ * @author Alex Goldring
27
+ * @copyright Company Named Limited (c) 2026
28
+ */
29
+ export class IntraPredictionState {
30
+ /** @type {Int32Array} `AboveRow`, offset by {@link EDGE_ORIGIN} */
31
+ above: Int32Array;
32
+ /** @type {Int32Array} `LeftCol`, offset by {@link EDGE_ORIGIN} */
33
+ left: Int32Array;
34
+ /** @type {Int32Array} scratch for the upsample process */
35
+ upsample_scratch: Int32Array;
36
+ /** @type {number} */
37
+ bit_depth: number;
38
+ /** @type {number} from the sequence header */
39
+ enable_intra_edge_filter: number;
40
+ /** @type {number} `AngleDeltaY` or `AngleDeltaUV`, per the plane being predicted */
41
+ angle_delta: number;
42
+ /** @type {number} `1` when the block uses recursive filter intra prediction */
43
+ use_filter_intra: number;
44
+ /** @type {number} */
45
+ filter_intra_mode: number;
46
+ /** @type {number} `1` when a neighbouring block used a smooth mode */
47
+ filter_type: number;
48
+ }
49
+ //# sourceMappingURL=IntraPredictionState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IntraPredictionState.d.ts","sourceRoot":"","sources":["../../../../../../src/avif/native/av1/predict/IntraPredictionState.js"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,0BAFU,MAAM,CAEa;AAE7B;;;;;;;GAOG;AACH,4BAFU,MAAM,CAE+B;AAE/C;;;;;;;;;GASG;AACH;IACI,mEAAmE;IACnE,OADW,UAAU,CACiB;IAEtC,kEAAkE;IAClE,MADW,UAAU,CACgB;IAErC,0DAA0D;IAC1D,kBADW,UAAU,CACgC;IAErD,qBAAqB;IACrB,WADW,MAAM,CACH;IAEd,8CAA8C;IAC9C,0BADW,MAAM,CACY;IAE7B,oFAAoF;IACpF,aADW,MAAM,CACD;IAEhB,+EAA+E;IAC/E,kBADW,MAAM,CACI;IAErB,qBAAqB;IACrB,mBADW,MAAM,CACK;IAEtB,sEAAsE;IACtE,aADW,MAAM,CACD;CACnB"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Where index `0` of an edge buffer sits.
3
+ *
4
+ * The specification indexes `AboveRow` and `LeftCol` from `-2`: `-1` is the corner sample, and the
5
+ * upsample process writes one further back still. Shifting every access by a constant is cheaper
6
+ * and clearer than carrying two arrays.
7
+ * @type {number}
8
+ */
9
+ export const EDGE_ORIGIN = 2;
10
+
11
+ /**
12
+ * Entries an edge buffer must hold.
13
+ *
14
+ * `AboveRow` runs to `w + h - 1`, at most 127. Upsampling doubles that reach to `2 * numPx - 2`,
15
+ * with `numPx` at most 128, so index 254 is addressable. Plus the two negative entries and one for
16
+ * the interpolation's `base + 1` read at the far end.
17
+ * @type {number}
18
+ */
19
+ export const EDGE_CAPACITY = EDGE_ORIGIN + 256;
20
+
21
+ /**
22
+ * Everything the intra prediction process needs beyond the pixels themselves.
23
+ *
24
+ * Allocated once per decode and refilled per block, so prediction allocates nothing. Keeping it a
25
+ * struct rather than a reference to the tile decoder is what lets `predict/` stay independent of
26
+ * the decoder's state, as the module contract requires.
27
+ *
28
+ * @author Alex Goldring
29
+ * @copyright Company Named Limited (c) 2026
30
+ */
31
+ export class IntraPredictionState {
32
+ /** @type {Int32Array} `AboveRow`, offset by {@link EDGE_ORIGIN} */
33
+ above = new Int32Array(EDGE_CAPACITY);
34
+
35
+ /** @type {Int32Array} `LeftCol`, offset by {@link EDGE_ORIGIN} */
36
+ left = new Int32Array(EDGE_CAPACITY);
37
+
38
+ /** @type {Int32Array} scratch for the upsample process */
39
+ upsample_scratch = new Int32Array(EDGE_CAPACITY + 4);
40
+
41
+ /** @type {number} */
42
+ bit_depth = 8;
43
+
44
+ /** @type {number} from the sequence header */
45
+ enable_intra_edge_filter = 1;
46
+
47
+ /** @type {number} `AngleDeltaY` or `AngleDeltaUV`, per the plane being predicted */
48
+ angle_delta = 0;
49
+
50
+ /** @type {number} `1` when the block uses recursive filter intra prediction */
51
+ use_filter_intra = 0;
52
+
53
+ /** @type {number} */
54
+ filter_intra_mode = 0;
55
+
56
+ /** @type {number} `1` when a neighbouring block used a smooth mode */
57
+ filter_type = 0;
58
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Whether a block's intra edge should be filtered smoothly.
3
+ *
4
+ * Shared between the decoder and the encoder: the encoder predicts with exactly the same edge the
5
+ * decoder will, or its residual would be a residual against a different picture.
6
+ *
7
+ * @author Alex Goldring
8
+ * @copyright Company Named Limited (c) 2026
9
+ */
10
+ /**
11
+ * @param {Av1FrameContext} ctx
12
+ * @param {number} plane
13
+ * @returns {number}
14
+ * @see AV1 spec 7.11.2.8 "Intra filter type process"
15
+ */
16
+ export function get_filter_type(ctx: Av1FrameContext, plane: number): number;
17
+ //# sourceMappingURL=intra_filter_type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intra_filter_type.d.ts","sourceRoot":"","sources":["../../../../../../src/avif/native/av1/predict/intra_filter_type.js"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH;;;;;GAKG;AACH,6DAJW,MAAM,GACJ,MAAM,CA4ClB"}
@@ -0,0 +1,79 @@
1
+ import { is_smooth_mode } from "./predict_intra.js";
2
+
3
+ /**
4
+ * Whether a block's intra edge should be filtered smoothly.
5
+ *
6
+ * Shared between the decoder and the encoder: the encoder predicts with exactly the same edge the
7
+ * decoder will, or its residual would be a residual against a different picture.
8
+ *
9
+ * @author Alex Goldring
10
+ * @copyright Company Named Limited (c) 2026
11
+ */
12
+
13
+ /**
14
+ * @param {Av1FrameContext} ctx
15
+ * @param {number} plane
16
+ * @returns {number}
17
+ * @see AV1 spec 7.11.2.8 "Intra filter type process"
18
+ */
19
+ export function get_filter_type(ctx, plane) {
20
+ const stride = ctx.mi_stride;
21
+
22
+ let above_smooth = 0;
23
+ let left_smooth = 0;
24
+
25
+ if ((plane === 0 ? ctx.avail_u : ctx.avail_u_chroma) === 1) {
26
+ let r = ctx.mi_row - 1;
27
+ let c = ctx.mi_col;
28
+
29
+ if (plane > 0) {
30
+ if (ctx.subsampling_x === 1 && (ctx.mi_col & 1) === 0) {
31
+ c++;
32
+ }
33
+
34
+ if (ctx.subsampling_y === 1 && (ctx.mi_row & 1) === 1) {
35
+ r--;
36
+ }
37
+ }
38
+
39
+ above_smooth = is_smooth_at(ctx, r, c, plane) ? 1 : 0;
40
+ }
41
+
42
+ if ((plane === 0 ? ctx.avail_l : ctx.avail_l_chroma) === 1) {
43
+ let r = ctx.mi_row;
44
+ let c = ctx.mi_col - 1;
45
+
46
+ if (plane > 0) {
47
+ if (ctx.subsampling_x === 1 && (ctx.mi_col & 1) === 1) {
48
+ c--;
49
+ }
50
+
51
+ if (ctx.subsampling_y === 1 && (ctx.mi_row & 1) === 0) {
52
+ r++;
53
+ }
54
+ }
55
+
56
+ left_smooth = is_smooth_at(ctx, r, c, plane) ? 1 : 0;
57
+ }
58
+
59
+ return above_smooth !== 0 || left_smooth !== 0 ? 1 : 0;
60
+ }
61
+
62
+ /**
63
+ * @param {Av1FrameContext} ctx
64
+ * @param {number} row
65
+ * @param {number} col
66
+ * @param {number} plane
67
+ * @returns {boolean}
68
+ */
69
+ function is_smooth_at(ctx, row, col, plane) {
70
+ if (row < 0 || col < 0 || row >= ctx.mi_rows || col >= ctx.mi_cols) {
71
+ return false;
72
+ }
73
+
74
+ const index = row * ctx.mi_stride + col;
75
+
76
+ const mode = plane === 0 ? ctx.y_modes[index] : ctx.uv_modes[index];
77
+
78
+ return is_smooth_mode(mode);
79
+ }
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Reduce the reconstructed luma under a chroma transform block to what chroma is predicted from.
3
+ *
4
+ * Subsampled the way the chroma plane is, carried at three fractional bits, and with its own average
5
+ * removed — so what is left is the shape of the luma and not its level, which is what a chroma
6
+ * block wants to borrow. The block's own DC prediction supplies the level.
7
+ *
8
+ * Shared with the encoder, which fits the scaling factor against exactly these numbers. Fitting
9
+ * against anything else would be fitting to a prediction the decoder does not make.
10
+ *
11
+ * @param {Uint16Array} luma
12
+ * @param {number} luma_stride
13
+ * @param {number} start_x left edge of the chroma transform block
14
+ * @param {number} start_y
15
+ * @param {number} tx_size
16
+ * @param {number} subsampling_x
17
+ * @param {number} subsampling_y
18
+ * @param {number} max_luma_w largest luma width available for this block
19
+ * @param {number} max_luma_h
20
+ * @returns {Int32Array} `w * h` of it, valid until the next call
21
+ * @see AV1 spec 7.11.5, the part before the scaling
22
+ */
23
+ export function chroma_from_luma_ac(luma: Uint16Array, luma_stride: number, start_x: number, start_y: number, tx_size: number, subsampling_x: number, subsampling_y: number, max_luma_w: number, max_luma_h: number): Int32Array;
24
+ /**
25
+ * Add the high frequencies of the reconstructed luma to an already DC-predicted chroma block.
26
+ *
27
+ * The chroma block must already hold its DC prediction: this process reads it back, adds a scaled
28
+ * copy of the luma's deviation from its own average, and writes the sum. That is why it is a
29
+ * separate step rather than another mode inside `predict_intra`.
30
+ *
31
+ * @param {Uint16Array} chroma the plane being predicted
32
+ * @param {number} chroma_stride
33
+ * @param {Uint16Array} luma
34
+ * @param {number} luma_stride
35
+ * @param {number} start_x left edge of the chroma transform block
36
+ * @param {number} start_y top edge of the chroma transform block
37
+ * @param {number} tx_size
38
+ * @param {number} alpha `CflAlphaU` or `CflAlphaV`
39
+ * @param {number} subsampling_x
40
+ * @param {number} subsampling_y
41
+ * @param {number} max_luma_w largest luma width available for this block
42
+ * @param {number} max_luma_h largest luma height available for this block
43
+ * @param {number} bit_depth
44
+ * @see AV1 spec 7.11.5 "Predict chroma from luma process"
45
+ *
46
+ * @author Alex Goldring
47
+ * @copyright Company Named Limited (c) 2026
48
+ */
49
+ export function predict_chroma_from_luma(chroma: Uint16Array, chroma_stride: number, luma: Uint16Array, luma_stride: number, start_x: number, start_y: number, tx_size: number, alpha: number, subsampling_x: number, subsampling_y: number, max_luma_w: number, max_luma_h: number, bit_depth: number): void;
50
+ //# sourceMappingURL=predict_chroma_from_luma.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"predict_chroma_from_luma.d.ts","sourceRoot":"","sources":["../../../../../../src/avif/native/av1/predict/predict_chroma_from_luma.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,0CAZW,WAAW,eACX,MAAM,WACN,MAAM,WACN,MAAM,WACN,MAAM,iBACN,MAAM,iBACN,MAAM,cACN,MAAM,cACN,MAAM,GACJ,UAAU,CAoDtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,iDAlBW,WAAW,iBACX,MAAM,QACN,WAAW,eACX,MAAM,WACN,MAAM,WACN,MAAM,WACN,MAAM,SACN,MAAM,iBACN,MAAM,iBACN,MAAM,cACN,MAAM,cACN,MAAM,aACN,MAAM,QA+ChB"}
@@ -0,0 +1,153 @@
1
+ import { clamp } from "../../../../core/math/clamp.js";
2
+ import { TX_HEIGHT, TX_HEIGHT_LOG2, TX_WIDTH, TX_WIDTH_LOG2 } from "../tables/block_tables.js";
3
+ import { round2 } from "../util/round2.js";
4
+ import { round2_signed } from "../util/round2_signed.js";
5
+
6
+ /**
7
+ * Subsampled luma, with three fractional bits and its own average taken out, for one chroma
8
+ * transform block. Sized for the largest chroma transform, and module-level so prediction allocates
9
+ * nothing.
10
+ * @type {Int32Array}
11
+ */
12
+ const LUMA_SCRATCH = new Int32Array(32 * 32);
13
+
14
+ /**
15
+ * Reduce the reconstructed luma under a chroma transform block to what chroma is predicted from.
16
+ *
17
+ * Subsampled the way the chroma plane is, carried at three fractional bits, and with its own average
18
+ * removed — so what is left is the shape of the luma and not its level, which is what a chroma
19
+ * block wants to borrow. The block's own DC prediction supplies the level.
20
+ *
21
+ * Shared with the encoder, which fits the scaling factor against exactly these numbers. Fitting
22
+ * against anything else would be fitting to a prediction the decoder does not make.
23
+ *
24
+ * @param {Uint16Array} luma
25
+ * @param {number} luma_stride
26
+ * @param {number} start_x left edge of the chroma transform block
27
+ * @param {number} start_y
28
+ * @param {number} tx_size
29
+ * @param {number} subsampling_x
30
+ * @param {number} subsampling_y
31
+ * @param {number} max_luma_w largest luma width available for this block
32
+ * @param {number} max_luma_h
33
+ * @returns {Int32Array} `w * h` of it, valid until the next call
34
+ * @see AV1 spec 7.11.5, the part before the scaling
35
+ */
36
+ export function chroma_from_luma_ac(
37
+ luma,
38
+ luma_stride,
39
+ start_x,
40
+ start_y,
41
+ tx_size,
42
+ subsampling_x,
43
+ subsampling_y,
44
+ max_luma_w,
45
+ max_luma_h
46
+ ) {
47
+ const w = TX_WIDTH[tx_size];
48
+ const h = TX_HEIGHT[tx_size];
49
+
50
+ let luma_average = 0;
51
+
52
+ for (let i = 0; i < h; i++) {
53
+ let luma_y = (start_y + i) << subsampling_y;
54
+
55
+ luma_y = Math.min(luma_y, max_luma_h - (1 << subsampling_y));
56
+
57
+ for (let j = 0; j < w; j++) {
58
+ let luma_x = (start_x + j) << subsampling_x;
59
+
60
+ luma_x = Math.min(luma_x, max_luma_w - (1 << subsampling_x));
61
+
62
+ let t = 0;
63
+
64
+ for (let dy = 0; dy <= subsampling_y; dy++) {
65
+ for (let dx = 0; dx <= subsampling_x; dx++) {
66
+ t += luma[(luma_y + dy) * luma_stride + luma_x + dx];
67
+ }
68
+ }
69
+
70
+ // three fractional bits, less however many the subsampling sum already contributed
71
+ const v = t << (3 - subsampling_x - subsampling_y);
72
+
73
+ LUMA_SCRATCH[i * w + j] = v;
74
+ luma_average += v;
75
+ }
76
+ }
77
+
78
+ luma_average = round2(luma_average, TX_WIDTH_LOG2[tx_size] + TX_HEIGHT_LOG2[tx_size]);
79
+
80
+ for (let i = 0; i < w * h; i++) {
81
+ LUMA_SCRATCH[i] -= luma_average;
82
+ }
83
+
84
+ return LUMA_SCRATCH;
85
+ }
86
+
87
+ /**
88
+ * Add the high frequencies of the reconstructed luma to an already DC-predicted chroma block.
89
+ *
90
+ * The chroma block must already hold its DC prediction: this process reads it back, adds a scaled
91
+ * copy of the luma's deviation from its own average, and writes the sum. That is why it is a
92
+ * separate step rather than another mode inside `predict_intra`.
93
+ *
94
+ * @param {Uint16Array} chroma the plane being predicted
95
+ * @param {number} chroma_stride
96
+ * @param {Uint16Array} luma
97
+ * @param {number} luma_stride
98
+ * @param {number} start_x left edge of the chroma transform block
99
+ * @param {number} start_y top edge of the chroma transform block
100
+ * @param {number} tx_size
101
+ * @param {number} alpha `CflAlphaU` or `CflAlphaV`
102
+ * @param {number} subsampling_x
103
+ * @param {number} subsampling_y
104
+ * @param {number} max_luma_w largest luma width available for this block
105
+ * @param {number} max_luma_h largest luma height available for this block
106
+ * @param {number} bit_depth
107
+ * @see AV1 spec 7.11.5 "Predict chroma from luma process"
108
+ *
109
+ * @author Alex Goldring
110
+ * @copyright Company Named Limited (c) 2026
111
+ */
112
+ export function predict_chroma_from_luma(
113
+ chroma,
114
+ chroma_stride,
115
+ luma,
116
+ luma_stride,
117
+ start_x,
118
+ start_y,
119
+ tx_size,
120
+ alpha,
121
+ subsampling_x,
122
+ subsampling_y,
123
+ max_luma_w,
124
+ max_luma_h,
125
+ bit_depth
126
+ ) {
127
+ const w = TX_WIDTH[tx_size];
128
+ const h = TX_HEIGHT[tx_size];
129
+
130
+ const max_value = (1 << bit_depth) - 1;
131
+
132
+ const ac = chroma_from_luma_ac(
133
+ luma,
134
+ luma_stride,
135
+ start_x,
136
+ start_y,
137
+ tx_size,
138
+ subsampling_x,
139
+ subsampling_y,
140
+ max_luma_w,
141
+ max_luma_h
142
+ );
143
+
144
+ for (let i = 0; i < h; i++) {
145
+ const row = (start_y + i) * chroma_stride + start_x;
146
+
147
+ for (let j = 0; j < w; j++) {
148
+ const scaled = round2_signed(alpha * ac[i * w + j], 6);
149
+
150
+ chroma[row + j] = clamp(chroma[row + j] + scaled, 0, max_value);
151
+ }
152
+ }
153
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Whether `mode` predicts along an angle.
3
+ * @param {number} mode
4
+ * @returns {boolean}
5
+ * @see AV1 spec 7.11.2 "Intra prediction process"
6
+ */
7
+ export function is_directional_mode(mode: number): boolean;
8
+ /**
9
+ * Whether `mode` is one of the smooth modes, which is what `get_filter_type` tests for.
10
+ * @param {number} mode
11
+ * @returns {boolean}
12
+ */
13
+ export function is_smooth_mode(mode: number): boolean;
14
+ /**
15
+ * Intra-predict a transform block, writing the prediction straight into the plane.
16
+ *
17
+ * The specification builds a `pred` array and copies it into `CurrFrame` afterwards. Writing
18
+ * directly is equivalent and saves the copy: the only process that reads back what it has already
19
+ * predicted is the recursive filter, and the samples it reads are exactly the ones just written.
20
+ *
21
+ * @param {IntraPredictionState} state
22
+ * @param {Uint16Array} plane samples of the plane being predicted
23
+ * @param {number} stride
24
+ * @param {number} plane_index `0` luma, `1` U, `2` V
25
+ * @param {number} x left edge of the transform block, in samples
26
+ * @param {number} y top edge of the transform block, in samples
27
+ * @param {number} max_x largest valid x coordinate in this plane
28
+ * @param {number} max_y largest valid y coordinate in this plane
29
+ * @param {number} have_left
30
+ * @param {number} have_above
31
+ * @param {number} have_above_right
32
+ * @param {number} have_below_left
33
+ * @param {number} mode
34
+ * @param {number} log2_w
35
+ * @param {number} log2_h
36
+ * @see AV1 spec 7.11.2 "Intra prediction process"
37
+ *
38
+ * @author Alex Goldring
39
+ * @copyright Company Named Limited (c) 2026
40
+ */
41
+ export function predict_intra(state: IntraPredictionState, plane: Uint16Array, stride: number, plane_index: number, x: number, y: number, max_x: number, max_y: number, have_left: number, have_above: number, have_above_right: number, have_below_left: number, mode: number, log2_w: number, log2_h: number): void;
42
+ //# sourceMappingURL=predict_intra.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"predict_intra.d.ts","sourceRoot":"","sources":["../../../../../../src/avif/native/av1/predict/predict_intra.js"],"names":[],"mappings":"AAyCA;;;;;GAKG;AACH,0CAJW,MAAM,GACJ,OAAO,CAKnB;AAED;;;;GAIG;AACH,qCAHW,MAAM,GACJ,OAAO,CAInB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,kEAnBW,WAAW,UACX,MAAM,eACN,MAAM,KACN,MAAM,KACN,MAAM,SACN,MAAM,SACN,MAAM,aACN,MAAM,cACN,MAAM,oBACN,MAAM,mBACN,MAAM,QACN,MAAM,UACN,MAAM,UACN,MAAM,QA0DhB"}