webcodecs-node 0.7.2 → 0.8.5

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 (507) hide show
  1. package/README.md +106 -16
  2. package/dist/backends/node-av/HardwarePipeline.d.ts +36 -0
  3. package/dist/backends/node-av/HardwarePipeline.d.ts.map +1 -0
  4. package/dist/backends/node-av/HardwarePipeline.js +203 -0
  5. package/dist/backends/node-av/HardwarePipeline.js.map +1 -0
  6. package/dist/backends/node-av/audio/NodeAvAudioDecoder.d.ts +46 -0
  7. package/dist/backends/node-av/audio/NodeAvAudioDecoder.d.ts.map +1 -0
  8. package/dist/backends/node-av/audio/NodeAvAudioDecoder.js +277 -0
  9. package/dist/backends/node-av/audio/NodeAvAudioDecoder.js.map +1 -0
  10. package/dist/backends/node-av/audio/NodeAvAudioEncoder.d.ts +47 -0
  11. package/dist/backends/node-av/audio/NodeAvAudioEncoder.d.ts.map +1 -0
  12. package/dist/backends/node-av/audio/NodeAvAudioEncoder.js +363 -0
  13. package/dist/backends/node-av/audio/NodeAvAudioEncoder.js.map +1 -0
  14. package/dist/backends/node-av/audio/decoder/channel-layout.d.ts +12 -0
  15. package/dist/backends/node-av/audio/decoder/channel-layout.d.ts.map +1 -0
  16. package/dist/backends/node-av/audio/decoder/channel-layout.js +24 -0
  17. package/dist/backends/node-av/audio/decoder/channel-layout.js.map +1 -0
  18. package/dist/backends/node-av/audio/decoder/codec-mapping.d.ts +9 -0
  19. package/dist/backends/node-av/audio/decoder/codec-mapping.d.ts.map +1 -0
  20. package/dist/backends/node-av/audio/decoder/codec-mapping.js +40 -0
  21. package/dist/backends/node-av/audio/decoder/codec-mapping.js.map +1 -0
  22. package/dist/backends/node-av/audio/decoder/constants.d.ts +6 -0
  23. package/dist/backends/node-av/audio/decoder/constants.d.ts.map +1 -0
  24. package/dist/backends/node-av/audio/decoder/constants.js +6 -0
  25. package/dist/backends/node-av/audio/decoder/constants.js.map +1 -0
  26. package/dist/backends/node-av/audio/decoder/index.d.ts +8 -0
  27. package/dist/backends/node-av/audio/decoder/index.d.ts.map +1 -0
  28. package/dist/backends/node-av/audio/decoder/index.js +8 -0
  29. package/dist/backends/node-av/audio/decoder/index.js.map +1 -0
  30. package/dist/backends/node-av/audio/decoder/sample-format.d.ts +14 -0
  31. package/dist/backends/node-av/audio/decoder/sample-format.d.ts.map +1 -0
  32. package/dist/backends/node-av/audio/decoder/sample-format.js +54 -0
  33. package/dist/backends/node-av/audio/decoder/sample-format.js.map +1 -0
  34. package/dist/backends/node-av/audio/encoder/channel-layout.d.ts +12 -0
  35. package/dist/backends/node-av/audio/encoder/channel-layout.d.ts.map +1 -0
  36. package/dist/backends/node-av/audio/encoder/channel-layout.js +24 -0
  37. package/dist/backends/node-av/audio/encoder/channel-layout.js.map +1 -0
  38. package/dist/backends/node-av/audio/encoder/codec-description.d.ts +33 -0
  39. package/dist/backends/node-av/audio/encoder/codec-description.d.ts.map +1 -0
  40. package/dist/backends/node-av/audio/encoder/codec-description.js +137 -0
  41. package/dist/backends/node-av/audio/encoder/codec-description.js.map +1 -0
  42. package/dist/backends/node-av/audio/encoder/codec-mapping.d.ts +12 -0
  43. package/dist/backends/node-av/audio/encoder/codec-mapping.d.ts.map +1 -0
  44. package/dist/backends/node-av/audio/encoder/codec-mapping.js +61 -0
  45. package/dist/backends/node-av/audio/encoder/codec-mapping.js.map +1 -0
  46. package/dist/backends/node-av/audio/encoder/constants.d.ts +6 -0
  47. package/dist/backends/node-av/audio/encoder/constants.d.ts.map +1 -0
  48. package/dist/backends/node-av/audio/encoder/constants.js +6 -0
  49. package/dist/backends/node-av/audio/encoder/constants.js.map +1 -0
  50. package/dist/backends/node-av/audio/encoder/drain.d.ts +32 -0
  51. package/dist/backends/node-av/audio/encoder/drain.d.ts.map +1 -0
  52. package/dist/backends/node-av/audio/encoder/drain.js +51 -0
  53. package/dist/backends/node-av/audio/encoder/drain.js.map +1 -0
  54. package/dist/backends/node-av/audio/encoder/index.d.ts +20 -0
  55. package/dist/backends/node-av/audio/encoder/index.d.ts.map +1 -0
  56. package/dist/backends/node-av/audio/encoder/index.js +20 -0
  57. package/dist/backends/node-av/audio/encoder/index.js.map +1 -0
  58. package/dist/backends/node-av/audio/encoder/options.d.ts +40 -0
  59. package/dist/backends/node-av/audio/encoder/options.d.ts.map +1 -0
  60. package/dist/backends/node-av/audio/encoder/options.js +127 -0
  61. package/dist/backends/node-av/audio/encoder/options.js.map +1 -0
  62. package/dist/backends/node-av/audio/encoder/sample-format-convert.d.ts +40 -0
  63. package/dist/backends/node-av/audio/encoder/sample-format-convert.d.ts.map +1 -0
  64. package/dist/backends/node-av/audio/encoder/sample-format-convert.js +152 -0
  65. package/dist/backends/node-av/audio/encoder/sample-format-convert.js.map +1 -0
  66. package/dist/backends/node-av/hardware-pipeline/capabilities.d.ts +10 -0
  67. package/dist/backends/node-av/hardware-pipeline/capabilities.d.ts.map +1 -0
  68. package/dist/backends/node-av/hardware-pipeline/capabilities.js +45 -0
  69. package/dist/backends/node-av/hardware-pipeline/capabilities.js.map +1 -0
  70. package/dist/backends/node-av/hardware-pipeline/index.d.ts +6 -0
  71. package/dist/backends/node-av/hardware-pipeline/index.d.ts.map +1 -0
  72. package/dist/backends/node-av/hardware-pipeline/index.js +5 -0
  73. package/dist/backends/node-av/hardware-pipeline/index.js.map +1 -0
  74. package/dist/backends/node-av/hardware-pipeline/types.d.ts +13 -0
  75. package/dist/backends/node-av/hardware-pipeline/types.d.ts.map +1 -0
  76. package/dist/backends/node-av/hardware-pipeline/types.js +5 -0
  77. package/dist/backends/node-av/hardware-pipeline/types.js.map +1 -0
  78. package/dist/backends/node-av/image/NodeAvImageDecoder.d.ts +95 -0
  79. package/dist/backends/node-av/image/NodeAvImageDecoder.d.ts.map +1 -0
  80. package/dist/backends/node-av/image/NodeAvImageDecoder.js +383 -0
  81. package/dist/backends/node-av/image/NodeAvImageDecoder.js.map +1 -0
  82. package/dist/backends/node-av/image/WebPImageDecoder.d.ts +57 -0
  83. package/dist/backends/node-av/image/WebPImageDecoder.d.ts.map +1 -0
  84. package/dist/backends/node-av/image/WebPImageDecoder.js +178 -0
  85. package/dist/backends/node-av/image/WebPImageDecoder.js.map +1 -0
  86. package/dist/backends/node-av/image/decoder/constants.d.ts +14 -0
  87. package/dist/backends/node-av/image/decoder/constants.d.ts.map +1 -0
  88. package/dist/backends/node-av/image/decoder/constants.js +24 -0
  89. package/dist/backends/node-av/image/decoder/constants.js.map +1 -0
  90. package/dist/backends/node-av/image/decoder/index.d.ts +7 -0
  91. package/dist/backends/node-av/image/decoder/index.d.ts.map +1 -0
  92. package/dist/backends/node-av/image/decoder/index.js +6 -0
  93. package/dist/backends/node-av/image/decoder/index.js.map +1 -0
  94. package/dist/backends/node-av/image/decoder/probe.d.ts +12 -0
  95. package/dist/backends/node-av/image/decoder/probe.d.ts.map +1 -0
  96. package/dist/backends/node-av/image/decoder/probe.js +57 -0
  97. package/dist/backends/node-av/image/decoder/probe.js.map +1 -0
  98. package/dist/backends/node-av/image/decoder/types.d.ts +25 -0
  99. package/dist/backends/node-av/image/decoder/types.d.ts.map +1 -0
  100. package/dist/backends/node-av/image/decoder/types.js +5 -0
  101. package/dist/backends/node-av/image/decoder/types.js.map +1 -0
  102. package/dist/backends/node-av/video/NodeAvVideoDecoder.d.ts +44 -0
  103. package/dist/backends/node-av/video/NodeAvVideoDecoder.d.ts.map +1 -0
  104. package/dist/backends/node-av/video/NodeAvVideoDecoder.js +326 -0
  105. package/dist/backends/node-av/video/NodeAvVideoDecoder.js.map +1 -0
  106. package/dist/backends/node-av/video/NodeAvVideoEncoder.d.ts +49 -0
  107. package/dist/backends/node-av/video/NodeAvVideoEncoder.d.ts.map +1 -0
  108. package/dist/backends/node-av/video/NodeAvVideoEncoder.js +317 -0
  109. package/dist/backends/node-av/video/NodeAvVideoEncoder.js.map +1 -0
  110. package/dist/backends/node-av/video/decoder/codec-mapping.d.ts +9 -0
  111. package/dist/backends/node-av/video/decoder/codec-mapping.d.ts.map +1 -0
  112. package/dist/backends/node-av/video/decoder/codec-mapping.js +25 -0
  113. package/dist/backends/node-av/video/decoder/codec-mapping.js.map +1 -0
  114. package/dist/backends/node-av/video/decoder/constants.d.ts +13 -0
  115. package/dist/backends/node-av/video/decoder/constants.d.ts.map +1 -0
  116. package/dist/backends/node-av/video/decoder/constants.js +13 -0
  117. package/dist/backends/node-av/video/decoder/constants.js.map +1 -0
  118. package/dist/backends/node-av/video/decoder/index.d.ts +7 -0
  119. package/dist/backends/node-av/video/decoder/index.d.ts.map +1 -0
  120. package/dist/backends/node-av/video/decoder/index.js +7 -0
  121. package/dist/backends/node-av/video/decoder/index.js.map +1 -0
  122. package/dist/backends/node-av/video/decoder/pixel-format.d.ts +13 -0
  123. package/dist/backends/node-av/video/decoder/pixel-format.d.ts.map +1 -0
  124. package/dist/backends/node-av/video/decoder/pixel-format.js +88 -0
  125. package/dist/backends/node-av/video/decoder/pixel-format.js.map +1 -0
  126. package/dist/backends/node-av/video/encoder/codec-description.d.ts +26 -0
  127. package/dist/backends/node-av/video/encoder/codec-description.d.ts.map +1 -0
  128. package/dist/backends/node-av/video/encoder/codec-description.js +86 -0
  129. package/dist/backends/node-av/video/encoder/codec-description.js.map +1 -0
  130. package/dist/backends/node-av/video/encoder/drain.d.ts +34 -0
  131. package/dist/backends/node-av/video/encoder/drain.d.ts.map +1 -0
  132. package/dist/backends/node-av/video/encoder/drain.js +51 -0
  133. package/dist/backends/node-av/video/encoder/drain.js.map +1 -0
  134. package/dist/backends/node-av/video/encoder/filters.d.ts +37 -0
  135. package/dist/backends/node-av/video/encoder/filters.d.ts.map +1 -0
  136. package/dist/backends/node-av/video/encoder/filters.js +71 -0
  137. package/dist/backends/node-av/video/encoder/filters.js.map +1 -0
  138. package/dist/backends/node-av/video/encoder/gpu-filters.d.ts +9 -0
  139. package/dist/backends/node-av/video/encoder/gpu-filters.d.ts.map +1 -0
  140. package/dist/backends/node-av/video/encoder/gpu-filters.js +26 -0
  141. package/dist/backends/node-av/video/encoder/gpu-filters.js.map +1 -0
  142. package/dist/backends/node-av/video/encoder/hardware-constraints.d.ts +12 -0
  143. package/dist/backends/node-av/video/encoder/hardware-constraints.d.ts.map +1 -0
  144. package/dist/backends/node-av/video/encoder/hardware-constraints.js +31 -0
  145. package/dist/backends/node-av/video/encoder/hardware-constraints.js.map +1 -0
  146. package/dist/backends/node-av/video/encoder/index.d.ts +28 -0
  147. package/dist/backends/node-av/video/encoder/index.d.ts.map +1 -0
  148. package/dist/backends/node-av/video/encoder/index.js +28 -0
  149. package/dist/backends/node-av/video/encoder/index.js.map +1 -0
  150. package/dist/backends/node-av/video/encoder/options.d.ts +39 -0
  151. package/dist/backends/node-av/video/encoder/options.d.ts.map +1 -0
  152. package/dist/backends/node-av/video/encoder/options.js +195 -0
  153. package/dist/backends/node-av/video/encoder/options.js.map +1 -0
  154. package/dist/backends/node-av/video/encoder/pixel-format-config.d.ts +42 -0
  155. package/dist/backends/node-av/video/encoder/pixel-format-config.d.ts.map +1 -0
  156. package/dist/backends/node-av/video/encoder/pixel-format-config.js +122 -0
  157. package/dist/backends/node-av/video/encoder/pixel-format-config.js.map +1 -0
  158. package/dist/backends/node-av/video/encoder/pixel-format.d.ts +13 -0
  159. package/dist/backends/node-av/video/encoder/pixel-format.d.ts.map +1 -0
  160. package/dist/backends/node-av/video/encoder/pixel-format.js +68 -0
  161. package/dist/backends/node-av/video/encoder/pixel-format.js.map +1 -0
  162. package/dist/backends/node-av/video/encoder/setup.d.ts +33 -0
  163. package/dist/backends/node-av/video/encoder/setup.d.ts.map +1 -0
  164. package/dist/backends/node-av/video/encoder/setup.js +62 -0
  165. package/dist/backends/node-av/video/encoder/setup.js.map +1 -0
  166. package/dist/backends/node-av/video/encoder/software-encoders.d.ts +8 -0
  167. package/dist/backends/node-av/video/encoder/software-encoders.d.ts.map +1 -0
  168. package/dist/backends/node-av/video/encoder/software-encoders.js +17 -0
  169. package/dist/backends/node-av/video/encoder/software-encoders.js.map +1 -0
  170. package/dist/backends/node-av/video/encoder/timestamp.d.ts +34 -0
  171. package/dist/backends/node-av/video/encoder/timestamp.d.ts.map +1 -0
  172. package/dist/backends/node-av/video/encoder/timestamp.js +39 -0
  173. package/dist/backends/node-av/video/encoder/timestamp.js.map +1 -0
  174. package/dist/backends/types.d.ts +44 -0
  175. package/dist/backends/types.d.ts.map +1 -1
  176. package/dist/backends/types.js.map +1 -1
  177. package/dist/codec-utils/formats.d.ts.map +1 -1
  178. package/dist/codec-utils/formats.js +78 -0
  179. package/dist/codec-utils/formats.js.map +1 -1
  180. package/dist/codec-utils/types.d.ts +1 -1
  181. package/dist/codecs/aac.d.ts +10 -0
  182. package/dist/codecs/aac.d.ts.map +1 -0
  183. package/dist/codecs/aac.js +10 -0
  184. package/dist/codecs/aac.js.map +1 -0
  185. package/dist/codecs/avc.d.ts +11 -0
  186. package/dist/codecs/avc.d.ts.map +1 -0
  187. package/dist/codecs/avc.js +11 -0
  188. package/dist/codecs/avc.js.map +1 -0
  189. package/dist/codecs/hevc.d.ts +11 -0
  190. package/dist/codecs/hevc.d.ts.map +1 -0
  191. package/dist/codecs/hevc.js +11 -0
  192. package/dist/codecs/hevc.js.map +1 -0
  193. package/dist/codecs/index.d.ts +10 -0
  194. package/dist/codecs/index.d.ts.map +1 -0
  195. package/dist/codecs/index.js +14 -0
  196. package/dist/codecs/index.js.map +1 -0
  197. package/dist/codecs/validation/audio.d.ts +19 -0
  198. package/dist/codecs/validation/audio.d.ts.map +1 -0
  199. package/dist/codecs/validation/audio.js +111 -0
  200. package/dist/codecs/validation/audio.js.map +1 -0
  201. package/dist/codecs/validation/config.d.ts +27 -0
  202. package/dist/codecs/validation/config.d.ts.map +1 -0
  203. package/dist/codecs/validation/config.js +154 -0
  204. package/dist/codecs/validation/config.js.map +1 -0
  205. package/dist/codecs/validation/index.d.ts +9 -0
  206. package/dist/codecs/validation/index.d.ts.map +1 -0
  207. package/dist/codecs/validation/index.js +12 -0
  208. package/dist/codecs/validation/index.js.map +1 -0
  209. package/dist/codecs/validation/video.d.ts +24 -0
  210. package/dist/codecs/validation/video.d.ts.map +1 -0
  211. package/dist/codecs/validation/video.js +196 -0
  212. package/dist/codecs/validation/video.js.map +1 -0
  213. package/dist/config/webcodecs-config.d.ts +58 -0
  214. package/dist/config/webcodecs-config.d.ts.map +1 -0
  215. package/dist/config/webcodecs-config.js +187 -0
  216. package/dist/config/webcodecs-config.js.map +1 -0
  217. package/dist/containers/Demuxer.d.ts +3 -1
  218. package/dist/containers/Demuxer.d.ts.map +1 -1
  219. package/dist/containers/Demuxer.js +26 -19
  220. package/dist/containers/Demuxer.js.map +1 -1
  221. package/dist/containers/FFmpegMuxer.d.ts +42 -0
  222. package/dist/containers/FFmpegMuxer.d.ts.map +1 -0
  223. package/dist/containers/FFmpegMuxer.js +311 -0
  224. package/dist/containers/FFmpegMuxer.js.map +1 -0
  225. package/dist/containers/Muxer.d.ts +75 -107
  226. package/dist/containers/Muxer.d.ts.map +1 -1
  227. package/dist/containers/Muxer.js +184 -243
  228. package/dist/containers/Muxer.js.map +1 -1
  229. package/dist/containers/NodeAvMuxer.d.ts +125 -0
  230. package/dist/containers/NodeAvMuxer.d.ts.map +1 -0
  231. package/dist/containers/NodeAvMuxer.js +458 -0
  232. package/dist/containers/NodeAvMuxer.js.map +1 -0
  233. package/dist/containers/extract.d.ts.map +1 -1
  234. package/dist/containers/extract.js +3 -1
  235. package/dist/containers/extract.js.map +1 -1
  236. package/dist/containers/index.d.ts +20 -14
  237. package/dist/containers/index.d.ts.map +1 -1
  238. package/dist/containers/index.js +21 -14
  239. package/dist/containers/index.js.map +1 -1
  240. package/dist/containers/muxer-types.d.ts +117 -0
  241. package/dist/containers/muxer-types.d.ts.map +1 -0
  242. package/dist/containers/muxer-types.js +45 -0
  243. package/dist/containers/muxer-types.js.map +1 -0
  244. package/dist/containers/transcode.d.ts.map +1 -1
  245. package/dist/containers/transcode.js +171 -150
  246. package/dist/containers/transcode.js.map +1 -1
  247. package/dist/core/AudioData.d.ts.map +1 -1
  248. package/dist/core/AudioData.js +54 -12
  249. package/dist/core/AudioData.js.map +1 -1
  250. package/dist/core/EncodedAudioChunk.d.ts.map +1 -1
  251. package/dist/core/EncodedAudioChunk.js +74 -6
  252. package/dist/core/EncodedAudioChunk.js.map +1 -1
  253. package/dist/core/EncodedVideoChunk.d.ts +2 -0
  254. package/dist/core/EncodedVideoChunk.d.ts.map +1 -1
  255. package/dist/core/EncodedVideoChunk.js +70 -2
  256. package/dist/core/EncodedVideoChunk.js.map +1 -1
  257. package/dist/core/VideoFrame.d.ts +27 -2
  258. package/dist/core/VideoFrame.d.ts.map +1 -1
  259. package/dist/core/VideoFrame.js +245 -125
  260. package/dist/core/VideoFrame.js.map +1 -1
  261. package/dist/core/video-frame/layout.d.ts +10 -0
  262. package/dist/core/video-frame/layout.d.ts.map +1 -0
  263. package/dist/core/video-frame/layout.js +97 -0
  264. package/dist/core/video-frame/layout.js.map +1 -0
  265. package/dist/core/video-frame/orientation.d.ts +23 -0
  266. package/dist/core/video-frame/orientation.d.ts.map +1 -0
  267. package/dist/core/video-frame/orientation.js +49 -0
  268. package/dist/core/video-frame/orientation.js.map +1 -0
  269. package/dist/core/video-frame/transfer.d.ts +19 -0
  270. package/dist/core/video-frame/transfer.d.ts.map +1 -0
  271. package/dist/core/video-frame/transfer.js +78 -0
  272. package/dist/core/video-frame/transfer.js.map +1 -0
  273. package/dist/core/video-frame/validation.d.ts +28 -0
  274. package/dist/core/video-frame/validation.d.ts.map +1 -0
  275. package/dist/core/video-frame/validation.js +76 -0
  276. package/dist/core/video-frame/validation.js.map +1 -0
  277. package/dist/decoders/AudioDecoder.d.ts +2 -19
  278. package/dist/decoders/AudioDecoder.d.ts.map +1 -1
  279. package/dist/decoders/AudioDecoder.js +27 -11
  280. package/dist/decoders/AudioDecoder.js.map +1 -1
  281. package/dist/decoders/ImageDecoder.d.ts +34 -41
  282. package/dist/decoders/ImageDecoder.d.ts.map +1 -1
  283. package/dist/decoders/ImageDecoder.js +158 -266
  284. package/dist/decoders/ImageDecoder.js.map +1 -1
  285. package/dist/decoders/VideoDecoder.d.ts +3 -38
  286. package/dist/decoders/VideoDecoder.d.ts.map +1 -1
  287. package/dist/decoders/VideoDecoder.js +126 -124
  288. package/dist/decoders/VideoDecoder.js.map +1 -1
  289. package/dist/decoders/audio/config.d.ts +23 -0
  290. package/dist/decoders/audio/config.d.ts.map +1 -0
  291. package/dist/decoders/audio/config.js +112 -0
  292. package/dist/decoders/audio/config.js.map +1 -0
  293. package/dist/decoders/audio/constants.d.ts +6 -0
  294. package/dist/decoders/audio/constants.d.ts.map +1 -0
  295. package/dist/decoders/audio/constants.js +6 -0
  296. package/dist/decoders/audio/constants.js.map +1 -0
  297. package/dist/decoders/audio/types.d.ts +21 -0
  298. package/dist/decoders/audio/types.d.ts.map +1 -0
  299. package/dist/decoders/audio/types.js +5 -0
  300. package/dist/decoders/audio/types.js.map +1 -0
  301. package/dist/decoders/image/orientation.d.ts +16 -0
  302. package/dist/decoders/image/orientation.d.ts.map +1 -0
  303. package/dist/decoders/image/orientation.js +170 -0
  304. package/dist/decoders/image/orientation.js.map +1 -0
  305. package/dist/decoders/image/stream.d.ts +12 -0
  306. package/dist/decoders/image/stream.d.ts.map +1 -0
  307. package/dist/decoders/image/stream.js +41 -0
  308. package/dist/decoders/image/stream.js.map +1 -0
  309. package/dist/decoders/image/tracks.d.ts +76 -0
  310. package/dist/decoders/image/tracks.d.ts.map +1 -0
  311. package/dist/decoders/image/tracks.js +136 -0
  312. package/dist/decoders/image/tracks.js.map +1 -0
  313. package/dist/decoders/image/types.d.ts +36 -0
  314. package/dist/decoders/image/types.d.ts.map +1 -0
  315. package/dist/decoders/image/types.js +5 -0
  316. package/dist/decoders/image/types.js.map +1 -0
  317. package/dist/decoders/video/codec-specific.d.ts +19 -0
  318. package/dist/decoders/video/codec-specific.d.ts.map +1 -0
  319. package/dist/decoders/video/codec-specific.js +62 -0
  320. package/dist/decoders/video/codec-specific.js.map +1 -0
  321. package/dist/decoders/video/config.d.ts +17 -0
  322. package/dist/decoders/video/config.d.ts.map +1 -0
  323. package/dist/decoders/video/config.js +91 -0
  324. package/dist/decoders/video/config.js.map +1 -0
  325. package/dist/decoders/video/constants.d.ts +8 -0
  326. package/dist/decoders/video/constants.d.ts.map +1 -0
  327. package/dist/decoders/video/constants.js +13 -0
  328. package/dist/decoders/video/constants.js.map +1 -0
  329. package/dist/decoders/video/queue.d.ts +9 -0
  330. package/dist/decoders/video/queue.d.ts.map +1 -0
  331. package/dist/decoders/video/queue.js +17 -0
  332. package/dist/decoders/video/queue.js.map +1 -0
  333. package/dist/decoders/video/types.d.ts +41 -0
  334. package/dist/decoders/video/types.d.ts.map +1 -0
  335. package/dist/decoders/video/types.js +5 -0
  336. package/dist/decoders/video/types.js.map +1 -0
  337. package/dist/demos/demo-audio-visualizer.js +74 -48
  338. package/dist/demos/demo-audio-visualizer.js.map +1 -1
  339. package/dist/demos/demo-dvd-logo.js +26 -23
  340. package/dist/demos/demo-dvd-logo.js.map +1 -1
  341. package/dist/demos/demo-flow-field.d.ts +11 -0
  342. package/dist/demos/demo-flow-field.d.ts.map +1 -0
  343. package/dist/demos/demo-flow-field.js +305 -0
  344. package/dist/demos/demo-flow-field.js.map +1 -0
  345. package/dist/demos/demo-four-corners.js +56 -120
  346. package/dist/demos/demo-four-corners.js.map +1 -1
  347. package/dist/demos/demo-image.js +24 -19
  348. package/dist/demos/demo-image.js.map +1 -1
  349. package/dist/demos/demo-matrix-rain.d.ts +11 -0
  350. package/dist/demos/demo-matrix-rain.d.ts.map +1 -0
  351. package/dist/demos/demo-matrix-rain.js +246 -0
  352. package/dist/demos/demo-matrix-rain.js.map +1 -0
  353. package/dist/demos/demo-pipeline.js +56 -51
  354. package/dist/demos/demo-pipeline.js.map +1 -1
  355. package/dist/demos/demo-samples.js +56 -402
  356. package/dist/demos/demo-samples.js.map +1 -1
  357. package/dist/encoders/AudioEncoder.d.ts +4 -28
  358. package/dist/encoders/AudioEncoder.d.ts.map +1 -1
  359. package/dist/encoders/AudioEncoder.js +83 -20
  360. package/dist/encoders/AudioEncoder.js.map +1 -1
  361. package/dist/encoders/VideoEncoder.d.ts +25 -46
  362. package/dist/encoders/VideoEncoder.d.ts.map +1 -1
  363. package/dist/encoders/VideoEncoder.js +180 -88
  364. package/dist/encoders/VideoEncoder.js.map +1 -1
  365. package/dist/encoders/audio/config.d.ts +30 -0
  366. package/dist/encoders/audio/config.d.ts.map +1 -0
  367. package/dist/encoders/audio/config.js +169 -0
  368. package/dist/encoders/audio/config.js.map +1 -0
  369. package/dist/encoders/audio/constants.d.ts +8 -0
  370. package/dist/encoders/audio/constants.d.ts.map +1 -0
  371. package/dist/encoders/audio/constants.js +8 -0
  372. package/dist/encoders/audio/constants.js.map +1 -0
  373. package/dist/encoders/audio/types.d.ts +70 -0
  374. package/dist/encoders/audio/types.d.ts.map +1 -0
  375. package/dist/encoders/audio/types.js +5 -0
  376. package/dist/encoders/audio/types.js.map +1 -0
  377. package/dist/encoders/video/config.d.ts +25 -0
  378. package/dist/encoders/video/config.d.ts.map +1 -0
  379. package/dist/encoders/video/config.js +132 -0
  380. package/dist/encoders/video/config.js.map +1 -0
  381. package/dist/encoders/video/constants.d.ts +8 -0
  382. package/dist/encoders/video/constants.d.ts.map +1 -0
  383. package/dist/encoders/video/constants.js +8 -0
  384. package/dist/encoders/video/constants.js.map +1 -0
  385. package/dist/encoders/video/queue.d.ts +9 -0
  386. package/dist/encoders/video/queue.d.ts.map +1 -0
  387. package/dist/encoders/video/queue.js +17 -0
  388. package/dist/encoders/video/queue.js.map +1 -0
  389. package/dist/encoders/video/types.d.ts +104 -0
  390. package/dist/encoders/video/types.d.ts.map +1 -0
  391. package/dist/encoders/video/types.js +5 -0
  392. package/dist/encoders/video/types.js.map +1 -0
  393. package/dist/formats/color-space/convert.d.ts +27 -0
  394. package/dist/formats/color-space/convert.d.ts.map +1 -0
  395. package/dist/formats/color-space/convert.js +91 -0
  396. package/dist/formats/color-space/convert.js.map +1 -0
  397. package/dist/formats/color-space/extract.d.ts +32 -0
  398. package/dist/formats/color-space/extract.d.ts.map +1 -0
  399. package/dist/formats/color-space/extract.js +116 -0
  400. package/dist/formats/color-space/extract.js.map +1 -0
  401. package/dist/formats/color-space/index.d.ts +10 -0
  402. package/dist/formats/color-space/index.d.ts.map +1 -0
  403. package/dist/formats/color-space/index.js +14 -0
  404. package/dist/formats/color-space/index.js.map +1 -0
  405. package/dist/formats/color-space/maps.d.ts +70 -0
  406. package/dist/formats/color-space/maps.d.ts.map +1 -0
  407. package/dist/formats/color-space/maps.js +70 -0
  408. package/dist/formats/color-space/maps.js.map +1 -0
  409. package/dist/formats/color-space/types.d.ts +68 -0
  410. package/dist/formats/color-space/types.d.ts.map +1 -0
  411. package/dist/formats/color-space/types.js +49 -0
  412. package/dist/formats/color-space/types.js.map +1 -0
  413. package/dist/formats/color-space.d.ts +4 -124
  414. package/dist/formats/color-space.d.ts.map +1 -1
  415. package/dist/formats/color-space.js +5 -108
  416. package/dist/formats/color-space.js.map +1 -1
  417. package/dist/formats/conversions/frame-converter.d.ts +8 -3
  418. package/dist/formats/conversions/frame-converter.d.ts.map +1 -1
  419. package/dist/formats/conversions/frame-converter.js +16 -12
  420. package/dist/formats/conversions/frame-converter.js.map +1 -1
  421. package/dist/formats/pixel-format/helpers.d.ts +49 -0
  422. package/dist/formats/pixel-format/helpers.d.ts.map +1 -0
  423. package/dist/formats/pixel-format/helpers.js +117 -0
  424. package/dist/formats/pixel-format/helpers.js.map +1 -0
  425. package/dist/formats/pixel-format/index.d.ts +9 -0
  426. package/dist/formats/pixel-format/index.d.ts.map +1 -0
  427. package/dist/formats/pixel-format/index.js +10 -0
  428. package/dist/formats/pixel-format/index.js.map +1 -0
  429. package/dist/formats/pixel-format/sizes.d.ts +17 -0
  430. package/dist/formats/pixel-format/sizes.d.ts.map +1 -0
  431. package/dist/formats/pixel-format/sizes.js +159 -0
  432. package/dist/formats/pixel-format/sizes.js.map +1 -0
  433. package/dist/formats/pixel-format/types.d.ts +13 -0
  434. package/dist/formats/pixel-format/types.d.ts.map +1 -0
  435. package/dist/formats/pixel-format/types.js +5 -0
  436. package/dist/formats/pixel-format/types.js.map +1 -0
  437. package/dist/formats/pixel-formats.d.ts +4 -53
  438. package/dist/formats/pixel-formats.d.ts.map +1 -1
  439. package/dist/formats/pixel-formats.js +5 -179
  440. package/dist/formats/pixel-formats.js.map +1 -1
  441. package/dist/hardware/decoder-args.d.ts.map +1 -1
  442. package/dist/hardware/decoder-args.js +35 -14
  443. package/dist/hardware/decoder-args.js.map +1 -1
  444. package/dist/hardware/detection.d.ts.map +1 -1
  445. package/dist/hardware/detection.js +39 -0
  446. package/dist/hardware/detection.js.map +1 -1
  447. package/dist/hardware/encoder-args.d.ts.map +1 -1
  448. package/dist/hardware/encoder-args.js +43 -5
  449. package/dist/hardware/encoder-args.js.map +1 -1
  450. package/dist/hardware/types.d.ts.map +1 -1
  451. package/dist/hardware/types.js +36 -28
  452. package/dist/hardware/types.js.map +1 -1
  453. package/dist/node-av/NodeAvVideoEncoder.d.ts +5 -0
  454. package/dist/node-av/NodeAvVideoEncoder.d.ts.map +1 -1
  455. package/dist/node-av/NodeAvVideoEncoder.js +76 -23
  456. package/dist/node-av/NodeAvVideoEncoder.js.map +1 -1
  457. package/dist/transfer/detach.d.ts +42 -0
  458. package/dist/transfer/detach.d.ts.map +1 -0
  459. package/dist/transfer/detach.js +93 -0
  460. package/dist/transfer/detach.js.map +1 -0
  461. package/dist/transfer/index.d.ts +9 -0
  462. package/dist/transfer/index.d.ts.map +1 -0
  463. package/dist/transfer/index.js +11 -0
  464. package/dist/transfer/index.js.map +1 -0
  465. package/dist/transfer/validate.d.ts +45 -0
  466. package/dist/transfer/validate.d.ts.map +1 -0
  467. package/dist/transfer/validate.js +98 -0
  468. package/dist/transfer/validate.js.map +1 -0
  469. package/dist/types/video.d.ts +16 -0
  470. package/dist/types/video.d.ts.map +1 -1
  471. package/dist/utils/avc.d.ts +2 -0
  472. package/dist/utils/avc.d.ts.map +1 -1
  473. package/dist/utils/avc.js +36 -8
  474. package/dist/utils/avc.js.map +1 -1
  475. package/dist/utils/codec-validation.d.ts +3 -28
  476. package/dist/utils/codec-validation.d.ts.map +1 -1
  477. package/dist/utils/codec-validation.js +4 -238
  478. package/dist/utils/codec-validation.js.map +1 -1
  479. package/dist/utils/hevc.d.ts +2 -0
  480. package/dist/utils/hevc.d.ts.map +1 -1
  481. package/dist/utils/hevc.js +42 -8
  482. package/dist/utils/hevc.js.map +1 -1
  483. package/docs/api.md +24 -4
  484. package/docs/architecture-refactor-plan.md +149 -0
  485. package/docs/architecture.md +258 -0
  486. package/docs/configuration.md +10 -7
  487. package/package.json +6 -4
  488. package/dist/config/ffmpeg-quality.d.ts +0 -14
  489. package/dist/config/ffmpeg-quality.d.ts.map +0 -1
  490. package/dist/config/ffmpeg-quality.js +0 -41
  491. package/dist/config/ffmpeg-quality.js.map +0 -1
  492. package/dist/polyfills/CanvasRenderingContext2DPolyfill.d.ts +0 -72
  493. package/dist/polyfills/CanvasRenderingContext2DPolyfill.d.ts.map +0 -1
  494. package/dist/polyfills/CanvasRenderingContext2DPolyfill.js +0 -293
  495. package/dist/polyfills/CanvasRenderingContext2DPolyfill.js.map +0 -1
  496. package/dist/polyfills/ImageDataPolyfill.d.ts +0 -12
  497. package/dist/polyfills/ImageDataPolyfill.d.ts.map +0 -1
  498. package/dist/polyfills/ImageDataPolyfill.js +0 -22
  499. package/dist/polyfills/ImageDataPolyfill.js.map +0 -1
  500. package/dist/polyfills/OffscreenCanvasPolyfill.d.ts +0 -16
  501. package/dist/polyfills/OffscreenCanvasPolyfill.d.ts.map +0 -1
  502. package/dist/polyfills/OffscreenCanvasPolyfill.js +0 -46
  503. package/dist/polyfills/OffscreenCanvasPolyfill.js.map +0 -1
  504. package/dist/polyfills/VideoFramePolyfill.d.ts +0 -44
  505. package/dist/polyfills/VideoFramePolyfill.d.ts.map +0 -1
  506. package/dist/polyfills/VideoFramePolyfill.js +0 -98
  507. package/dist/polyfills/VideoFramePolyfill.js.map +0 -1
@@ -0,0 +1,112 @@
1
+ /**
2
+ * AudioDecoder configuration validation and support checking
3
+ */
4
+ import { AUDIO_DECODER_CODEC_MAP, AUDIO_OUTPUT_FORMAT_MAP } from '../../codec-utils/audio-codecs.js';
5
+ import { getCodecBase } from '../../utils/codec-cache.js';
6
+ /**
7
+ * Validate required AudioDecoderConfig fields
8
+ */
9
+ export function validateRequiredFields(config) {
10
+ if (!config || typeof config !== 'object') {
11
+ throw new TypeError('config must be an object');
12
+ }
13
+ if (config.codec === undefined || config.codec === null) {
14
+ throw new TypeError("Failed to read the 'codec' property from 'AudioDecoderConfig': Required member is undefined.");
15
+ }
16
+ if (typeof config.codec !== 'string' || config.codec === '') {
17
+ throw new TypeError('codec must be a non-empty string');
18
+ }
19
+ if (config.sampleRate === undefined || config.sampleRate === null) {
20
+ throw new TypeError("Failed to read the 'sampleRate' property from 'AudioDecoderConfig': Required member is undefined.");
21
+ }
22
+ if (typeof config.sampleRate !== 'number' || !Number.isFinite(config.sampleRate) || config.sampleRate <= 0) {
23
+ throw new TypeError('sampleRate must be a finite positive number');
24
+ }
25
+ if (config.numberOfChannels === undefined || config.numberOfChannels === null) {
26
+ throw new TypeError("Failed to read the 'numberOfChannels' property from 'AudioDecoderConfig': Required member is undefined.");
27
+ }
28
+ if (typeof config.numberOfChannels !== 'number' || !Number.isFinite(config.numberOfChannels) || config.numberOfChannels <= 0 || !Number.isInteger(config.numberOfChannels)) {
29
+ throw new TypeError('numberOfChannels must be a positive integer');
30
+ }
31
+ }
32
+ /**
33
+ * Validate description buffer is not detached
34
+ * Uses the 'detached' property (Node.js 20+) when available.
35
+ * On Node <20, we can only detect detachment via view/buffer mismatch.
36
+ */
37
+ export function validateDescription(config) {
38
+ if (config.description !== undefined) {
39
+ const desc = config.description;
40
+ if (desc instanceof ArrayBuffer) {
41
+ // Use the 'detached' property if available (Node.js 20+)
42
+ if ('detached' in desc && desc.detached === true) {
43
+ throw new TypeError('description buffer is detached');
44
+ }
45
+ // On Node <20, we cannot reliably detect detachment for ArrayBuffers
46
+ // without false positives on new ArrayBuffer(0).
47
+ }
48
+ else if (ArrayBuffer.isView(desc)) {
49
+ // Use the 'detached' property if available (Node.js 20+)
50
+ if ('detached' in desc.buffer && desc.buffer.detached === true) {
51
+ throw new TypeError('description buffer is detached');
52
+ }
53
+ // Also check for views that reference detached buffers:
54
+ // If buffer.byteLength is 0 but view.byteLength is not, the buffer is definitely detached
55
+ if (desc.buffer.byteLength === 0 && desc.byteLength !== 0) {
56
+ throw new TypeError('description buffer is detached');
57
+ }
58
+ }
59
+ }
60
+ }
61
+ /**
62
+ * Clone an AudioDecoderConfig per WebCodecs spec
63
+ */
64
+ export function cloneConfig(config) {
65
+ const clonedConfig = {
66
+ codec: config.codec,
67
+ sampleRate: config.sampleRate,
68
+ numberOfChannels: config.numberOfChannels,
69
+ };
70
+ // Copy description if provided (clone the buffer)
71
+ if (config.description !== undefined) {
72
+ const desc = config.description;
73
+ if (desc instanceof ArrayBuffer) {
74
+ clonedConfig.description = desc.slice(0);
75
+ }
76
+ else if (ArrayBuffer.isView(desc)) {
77
+ // Create a new Uint8Array copy to ensure we have an ArrayBuffer
78
+ const copy = new Uint8Array(desc.byteLength);
79
+ copy.set(new Uint8Array(desc.buffer, desc.byteOffset, desc.byteLength));
80
+ clonedConfig.description = copy.buffer;
81
+ }
82
+ }
83
+ // Copy outputFormat if valid
84
+ if (config.outputFormat !== undefined) {
85
+ if (config.outputFormat in AUDIO_OUTPUT_FORMAT_MAP) {
86
+ clonedConfig.outputFormat = config.outputFormat;
87
+ }
88
+ else {
89
+ throw new TypeError(`Invalid outputFormat: ${config.outputFormat}`);
90
+ }
91
+ }
92
+ return clonedConfig;
93
+ }
94
+ /**
95
+ * Check if an AudioDecoderConfig is supported
96
+ */
97
+ export async function checkConfigSupport(config) {
98
+ // Validate required fields and types - throw TypeError for invalid types
99
+ validateRequiredFields(config);
100
+ // Validate description is not detached
101
+ validateDescription(config);
102
+ // Clone the config per WebCodecs spec (strip unknown fields)
103
+ const clonedConfig = cloneConfig(config);
104
+ const codecBase = getCodecBase(config.codec);
105
+ // Opus with >2 channels requires description (mapping table)
106
+ if (codecBase === 'opus' && config.numberOfChannels > 2 && config.description === undefined) {
107
+ return { supported: false, config: clonedConfig };
108
+ }
109
+ const supported = codecBase in AUDIO_DECODER_CODEC_MAP || config.codec in AUDIO_DECODER_CODEC_MAP;
110
+ return { supported, config: clonedConfig };
111
+ }
112
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/decoders/audio/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * AudioDecoder constants
3
+ */
4
+ export declare const DEFAULT_FLUSH_TIMEOUT = 30000;
5
+ export declare const MAX_QUEUE_SIZE = 100;
6
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/decoders/audio/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAC3C,eAAO,MAAM,cAAc,MAAM,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * AudioDecoder constants
3
+ */
4
+ export const DEFAULT_FLUSH_TIMEOUT = 30000;
5
+ export const MAX_QUEUE_SIZE = 100; // Prevent unbounded memory growth
6
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/decoders/audio/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAC3C,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC,CAAC,kCAAkC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * AudioDecoder type definitions
3
+ */
4
+ import type { AudioSampleFormat } from '../../core/AudioData.js';
5
+ export type CodecState = 'unconfigured' | 'configured' | 'closed';
6
+ export interface AudioDecoderConfig {
7
+ codec: string;
8
+ sampleRate: number;
9
+ numberOfChannels: number;
10
+ description?: ArrayBuffer | ArrayBufferView;
11
+ outputFormat?: AudioSampleFormat;
12
+ }
13
+ export interface AudioDecoderInit {
14
+ output: (data: import('../../core/AudioData.js').AudioData) => void;
15
+ error: (error: Error) => void;
16
+ }
17
+ export interface AudioDecoderSupport {
18
+ supported: boolean;
19
+ config: AudioDecoderConfig;
20
+ }
21
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/decoders/audio/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,YAAY,GAAG,QAAQ,CAAC;AAElE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,WAAW,GAAG,eAAe,CAAC;IAC5C,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,yBAAyB,EAAE,SAAS,KAAK,IAAI,CAAC;IACpE,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,kBAAkB,CAAC;CAC5B"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * AudioDecoder type definitions
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/decoders/audio/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * EXIF orientation parsing and image transformation
3
+ */
4
+ /**
5
+ * Parse EXIF orientation from JPEG data
6
+ */
7
+ export declare function parseExifOrientation(data: Uint8Array): number | null;
8
+ /**
9
+ * Apply EXIF orientation transformation to image data
10
+ */
11
+ export declare function applyOrientation(data: Uint8Array, width: number, height: number, orientation: number): {
12
+ data: Uint8Array;
13
+ width: number;
14
+ height: number;
15
+ };
16
+ //# sourceMappingURL=orientation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orientation.d.ts","sourceRoot":"","sources":["../../../src/decoders/image/orientation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CA+HpE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAgErD"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * EXIF orientation parsing and image transformation
3
+ */
4
+ /**
5
+ * Parse EXIF orientation from JPEG data
6
+ */
7
+ export function parseExifOrientation(data) {
8
+ if (data.length < 4 || data[0] !== 0xFF || data[1] !== 0xD8) {
9
+ return null;
10
+ }
11
+ const readUint16 = (buffer, offset, littleEndian) => {
12
+ if (littleEndian) {
13
+ return buffer[offset] | (buffer[offset + 1] << 8);
14
+ }
15
+ return (buffer[offset] << 8) | buffer[offset + 1];
16
+ };
17
+ const readUint32 = (buffer, offset, littleEndian) => {
18
+ if (littleEndian) {
19
+ return (buffer[offset] |
20
+ (buffer[offset + 1] << 8) |
21
+ (buffer[offset + 2] << 16) |
22
+ (buffer[offset + 3] << 24));
23
+ }
24
+ return ((buffer[offset] << 24) |
25
+ (buffer[offset + 1] << 16) |
26
+ (buffer[offset + 2] << 8) |
27
+ buffer[offset + 3]);
28
+ };
29
+ let offset = 2;
30
+ while (offset + 4 < data.length) {
31
+ if (data[offset] !== 0xFF) {
32
+ break;
33
+ }
34
+ const marker = data[offset + 1];
35
+ offset += 2;
36
+ if (marker === 0xD9 || marker === 0xDA) {
37
+ break;
38
+ }
39
+ if (offset + 2 > data.length) {
40
+ break;
41
+ }
42
+ const segmentLength = (data[offset] << 8) | data[offset + 1];
43
+ if (segmentLength < 2) {
44
+ break;
45
+ }
46
+ const segmentStart = offset + 2;
47
+ const segmentEnd = segmentStart + segmentLength - 2;
48
+ if (segmentEnd > data.length) {
49
+ break;
50
+ }
51
+ if (marker === 0xE1 && segmentLength >= 8) {
52
+ const hasExifHeader = data[segmentStart] === 0x45 && // E
53
+ data[segmentStart + 1] === 0x78 && // x
54
+ data[segmentStart + 2] === 0x69 && // i
55
+ data[segmentStart + 3] === 0x66 && // f
56
+ data[segmentStart + 4] === 0x00 &&
57
+ data[segmentStart + 5] === 0x00;
58
+ if (hasExifHeader) {
59
+ const tiffStart = segmentStart + 6;
60
+ if (tiffStart + 8 > data.length) {
61
+ return null;
62
+ }
63
+ const byteOrder = String.fromCharCode(data[tiffStart], data[tiffStart + 1]);
64
+ const littleEndian = byteOrder === 'II';
65
+ const bigEndian = byteOrder === 'MM';
66
+ if (!littleEndian && !bigEndian) {
67
+ return null;
68
+ }
69
+ const isLittleEndian = littleEndian;
70
+ const firstIFDOffset = readUint32(data, tiffStart + 4, isLittleEndian);
71
+ let ifdOffset = tiffStart + firstIFDOffset;
72
+ if (ifdOffset < tiffStart || ifdOffset + 2 > data.length) {
73
+ return null;
74
+ }
75
+ let entryCount = readUint16(data, ifdOffset, isLittleEndian);
76
+ const entrySize = 12;
77
+ const maxEntries = Math.floor((data.length - (ifdOffset + 2)) / entrySize);
78
+ if (entryCount > maxEntries) {
79
+ entryCount = maxEntries;
80
+ }
81
+ for (let i = 0; i < entryCount; i++) {
82
+ const entryOffset = ifdOffset + 2 + i * entrySize;
83
+ if (entryOffset + entrySize > data.length) {
84
+ break;
85
+ }
86
+ const tag = readUint16(data, entryOffset, isLittleEndian);
87
+ if (tag !== 0x0112) {
88
+ continue;
89
+ }
90
+ const type = readUint16(data, entryOffset + 2, isLittleEndian);
91
+ const count = readUint32(data, entryOffset + 4, isLittleEndian);
92
+ if (type !== 3 || count < 1) {
93
+ return null;
94
+ }
95
+ const valueOffset = entryOffset + 8;
96
+ if (valueOffset + 2 > data.length) {
97
+ return null;
98
+ }
99
+ const orientation = readUint16(data, valueOffset, isLittleEndian);
100
+ return orientation;
101
+ }
102
+ }
103
+ }
104
+ offset = segmentEnd;
105
+ }
106
+ return null;
107
+ }
108
+ /**
109
+ * Apply EXIF orientation transformation to image data
110
+ */
111
+ export function applyOrientation(data, width, height, orientation) {
112
+ if (orientation === 1 || orientation < 1 || orientation > 8) {
113
+ return { data, width, height };
114
+ }
115
+ const shouldSwapDimensions = orientation >= 5 && orientation <= 8;
116
+ const newWidth = shouldSwapDimensions ? height : width;
117
+ const newHeight = shouldSwapDimensions ? width : height;
118
+ const transformed = new Uint8Array(newWidth * newHeight * 4);
119
+ const copyPixel = (destX, destY, srcIndex) => {
120
+ const destIndex = (destY * newWidth + destX) * 4;
121
+ transformed[destIndex] = data[srcIndex];
122
+ transformed[destIndex + 1] = data[srcIndex + 1];
123
+ transformed[destIndex + 2] = data[srcIndex + 2];
124
+ transformed[destIndex + 3] = data[srcIndex + 3];
125
+ };
126
+ for (let y = 0; y < height; y++) {
127
+ for (let x = 0; x < width; x++) {
128
+ const srcIndex = (y * width + x) * 4;
129
+ let destX = x;
130
+ let destY = y;
131
+ switch (orientation) {
132
+ case 2:
133
+ destX = width - 1 - x;
134
+ destY = y;
135
+ break;
136
+ case 3:
137
+ destX = width - 1 - x;
138
+ destY = height - 1 - y;
139
+ break;
140
+ case 4:
141
+ destX = x;
142
+ destY = height - 1 - y;
143
+ break;
144
+ case 5:
145
+ destX = y;
146
+ destY = x;
147
+ break;
148
+ case 6:
149
+ destX = height - 1 - y;
150
+ destY = x;
151
+ break;
152
+ case 7:
153
+ destX = height - 1 - y;
154
+ destY = width - 1 - x;
155
+ break;
156
+ case 8:
157
+ destX = y;
158
+ destY = width - 1 - x;
159
+ break;
160
+ default:
161
+ destX = x;
162
+ destY = y;
163
+ break;
164
+ }
165
+ copyPixel(destX, destY, srcIndex);
166
+ }
167
+ }
168
+ return { data: transformed, width: newWidth, height: newHeight };
169
+ }
170
+ //# sourceMappingURL=orientation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orientation.js","sourceRoot":"","sources":["../../../src/decoders/image/orientation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Stream utilities for ImageDecoder
3
+ */
4
+ /**
5
+ * Check if an object is a ReadableStream
6
+ */
7
+ export declare function isReadableStream(obj: unknown): obj is ReadableStream;
8
+ /**
9
+ * Read entire ReadableStream into a Uint8Array
10
+ */
11
+ export declare function readStreamToBuffer(stream: ReadableStream<ArrayBufferView>): Promise<Uint8Array>;
12
+ //# sourceMappingURL=stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../src/decoders/image/stream.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,cAAc,CAEpE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,cAAc,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CA4BrG"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Stream utilities for ImageDecoder
3
+ */
4
+ /**
5
+ * Check if an object is a ReadableStream
6
+ */
7
+ export function isReadableStream(obj) {
8
+ return typeof obj === 'object' && obj !== null && typeof obj.getReader === 'function';
9
+ }
10
+ /**
11
+ * Read entire ReadableStream into a Uint8Array
12
+ */
13
+ export async function readStreamToBuffer(stream) {
14
+ const reader = stream.getReader();
15
+ const chunks = [];
16
+ let totalReceived = 0;
17
+ try {
18
+ while (true) {
19
+ const { done, value } = await reader.read();
20
+ if (done)
21
+ break;
22
+ if (value) {
23
+ const chunk = new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
24
+ chunks.push(chunk);
25
+ totalReceived += chunk.length;
26
+ }
27
+ }
28
+ // Concatenate all chunks
29
+ const result = new Uint8Array(totalReceived);
30
+ let offset = 0;
31
+ for (const chunk of chunks) {
32
+ result.set(chunk, offset);
33
+ offset += chunk.length;
34
+ }
35
+ return result;
36
+ }
37
+ finally {
38
+ reader.releaseLock();
39
+ }
40
+ }
41
+ //# sourceMappingURL=stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../src/decoders/image/stream.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,OAAQ,GAAsB,CAAC,SAAS,KAAK,UAAU,CAAC;AAC5G,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAuC;IAC9E,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IAClC,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,IAAI;gBAAE,MAAM;YAChB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC/E,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnB,aAAa,IAAI,KAAK,CAAC,MAAM,CAAC;YAChC,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,aAAa,CAAC,CAAC;QAC7C,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;QACzB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * ImageTrack and ImageTrackList implementations
3
+ */
4
+ /**
5
+ * ImageTrack - Represents an individual image track
6
+ */
7
+ export declare class ImageTrack {
8
+ private _animated;
9
+ private _frameCount;
10
+ private _repetitionCount;
11
+ private _selected;
12
+ private _trackList;
13
+ private _index;
14
+ constructor(options: {
15
+ animated: boolean;
16
+ frameCount: number;
17
+ repetitionCount: number;
18
+ selected: boolean;
19
+ });
20
+ get animated(): boolean;
21
+ get frameCount(): number;
22
+ get repetitionCount(): number;
23
+ get selected(): boolean;
24
+ /**
25
+ * Set the selected state of this track.
26
+ * Setting to true deselects any previously selected track.
27
+ * Per WebCodecs spec, this allows switching between tracks.
28
+ */
29
+ set selected(value: boolean);
30
+ /** @internal */
31
+ _setTrackList(trackList: ImageTrackList, index: number): void;
32
+ }
33
+ /**
34
+ * ImageTrackList - A list of image tracks
35
+ * Uses a Proxy to support bracket notation (tracks[0]) at runtime
36
+ */
37
+ declare class ImageTrackListImpl {
38
+ private _tracks;
39
+ private _selectedIndex;
40
+ private _ready;
41
+ private _resolveReady;
42
+ constructor();
43
+ get ready(): Promise<void>;
44
+ get length(): number;
45
+ get selectedIndex(): number;
46
+ get selectedTrack(): ImageTrack | null;
47
+ /** @internal */
48
+ _addTrack(track: ImageTrack): void;
49
+ /** @internal */
50
+ _markReady(): void;
51
+ /** @internal - Deselect all tracks (called when selecting a new track) */
52
+ _deselectAll(): void;
53
+ /** @internal - Update the selected index */
54
+ _updateSelectedIndex(index: number): void;
55
+ /**
56
+ * Get track by index
57
+ */
58
+ get(index: number): ImageTrack | undefined;
59
+ [Symbol.iterator](): Iterator<ImageTrack>;
60
+ }
61
+ /**
62
+ * ImageTrackList interface with numeric indexing support
63
+ */
64
+ export interface ImageTrackList extends ImageTrackListImpl {
65
+ [index: number]: ImageTrack | undefined;
66
+ }
67
+ /**
68
+ * Create an ImageTrackList with Proxy for bracket notation support
69
+ * Per WebCodecs spec, tracks[0] should work at runtime
70
+ */
71
+ export declare function createImageTrackList(): ImageTrackList;
72
+ export declare const ImageTrackListClass: {
73
+ new (): ImageTrackList;
74
+ };
75
+ export {};
76
+ //# sourceMappingURL=tracks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracks.d.ts","sourceRoot":"","sources":["../../../src/decoders/image/tracks.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,MAAM,CAAc;gBAEhB,OAAO,EAAE;QACnB,QAAQ,EAAE,OAAO,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,MAAM,CAAC;QACxB,QAAQ,EAAE,OAAO,CAAC;KACnB;IAOD,IAAI,QAAQ,IAAI,OAAO,CAA2B;IAClD,IAAI,UAAU,IAAI,MAAM,CAA6B;IACrD,IAAI,eAAe,IAAI,MAAM,CAAkC;IAC/D,IAAI,QAAQ,IAAI,OAAO,CAA2B;IAElD;;;;OAIG;IACH,IAAI,QAAQ,CAAC,KAAK,EAAE,OAAO,EAc1B;IAED,gBAAgB;IAChB,aAAa,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CAI9D;AAED;;;GAGG;AACH,cAAM,kBAAkB;IACtB,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,aAAa,CAAc;;IAQnC,IAAI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAwB;IAClD,IAAI,MAAM,IAAI,MAAM,CAAgC;IACpD,IAAI,aAAa,IAAI,MAAM,CAAgC;IAE3D,IAAI,aAAa,IAAI,UAAU,GAAG,IAAI,CAKrC;IAED,gBAAgB;IAChB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IASlC,gBAAgB;IAChB,UAAU,IAAI,IAAI;IAIlB,0EAA0E;IAC1E,YAAY,IAAI,IAAI;IAMpB,4CAA4C;IAC5C,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIzC;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI1C,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC;CAG1C;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,kBAAkB;IACxD,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;CACzC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAkBrD;AAGD,eAAO,MAAM,mBAAmB,EAIhB;IAAE,QAAO,cAAc,CAAA;CAAE,CAAC"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * ImageTrack and ImageTrackList implementations
3
+ */
4
+ /**
5
+ * ImageTrack - Represents an individual image track
6
+ */
7
+ export class ImageTrack {
8
+ _animated;
9
+ _frameCount;
10
+ _repetitionCount;
11
+ _selected;
12
+ _trackList = null;
13
+ _index = -1;
14
+ constructor(options) {
15
+ this._animated = options.animated;
16
+ this._frameCount = options.frameCount;
17
+ this._repetitionCount = options.repetitionCount;
18
+ this._selected = options.selected;
19
+ }
20
+ get animated() { return this._animated; }
21
+ get frameCount() { return this._frameCount; }
22
+ get repetitionCount() { return this._repetitionCount; }
23
+ get selected() { return this._selected; }
24
+ /**
25
+ * Set the selected state of this track.
26
+ * Setting to true deselects any previously selected track.
27
+ * Per WebCodecs spec, this allows switching between tracks.
28
+ */
29
+ set selected(value) {
30
+ if (value === this._selected)
31
+ return;
32
+ if (value && this._trackList) {
33
+ // Deselect the currently selected track
34
+ this._trackList._deselectAll();
35
+ this._selected = true;
36
+ this._trackList._updateSelectedIndex(this._index);
37
+ }
38
+ else {
39
+ this._selected = value;
40
+ if (!value && this._trackList) {
41
+ this._trackList._updateSelectedIndex(-1);
42
+ }
43
+ }
44
+ }
45
+ /** @internal */
46
+ _setTrackList(trackList, index) {
47
+ this._trackList = trackList;
48
+ this._index = index;
49
+ }
50
+ }
51
+ /**
52
+ * ImageTrackList - A list of image tracks
53
+ * Uses a Proxy to support bracket notation (tracks[0]) at runtime
54
+ */
55
+ class ImageTrackListImpl {
56
+ _tracks = [];
57
+ _selectedIndex = -1;
58
+ _ready;
59
+ _resolveReady;
60
+ constructor() {
61
+ this._ready = new Promise((resolve) => {
62
+ this._resolveReady = resolve;
63
+ });
64
+ }
65
+ get ready() { return this._ready; }
66
+ get length() { return this._tracks.length; }
67
+ get selectedIndex() { return this._selectedIndex; }
68
+ get selectedTrack() {
69
+ if (this._selectedIndex >= 0 && this._selectedIndex < this._tracks.length) {
70
+ return this._tracks[this._selectedIndex];
71
+ }
72
+ return null;
73
+ }
74
+ /** @internal */
75
+ _addTrack(track) {
76
+ const index = this._tracks.length;
77
+ this._tracks.push(track);
78
+ track._setTrackList(this, index);
79
+ if (track.selected && this._selectedIndex === -1) {
80
+ this._selectedIndex = index;
81
+ }
82
+ }
83
+ /** @internal */
84
+ _markReady() {
85
+ this._resolveReady();
86
+ }
87
+ /** @internal - Deselect all tracks (called when selecting a new track) */
88
+ _deselectAll() {
89
+ for (const track of this._tracks) {
90
+ track._selected = false;
91
+ }
92
+ }
93
+ /** @internal - Update the selected index */
94
+ _updateSelectedIndex(index) {
95
+ this._selectedIndex = index;
96
+ }
97
+ /**
98
+ * Get track by index
99
+ */
100
+ get(index) {
101
+ return this._tracks[index];
102
+ }
103
+ [Symbol.iterator]() {
104
+ return this._tracks[Symbol.iterator]();
105
+ }
106
+ }
107
+ /**
108
+ * Create an ImageTrackList with Proxy for bracket notation support
109
+ * Per WebCodecs spec, tracks[0] should work at runtime
110
+ */
111
+ export function createImageTrackList() {
112
+ const impl = new ImageTrackListImpl();
113
+ return new Proxy(impl, {
114
+ get(target, prop, receiver) {
115
+ // Handle numeric string properties (e.g., "0", "1")
116
+ if (typeof prop === 'string' && /^\d+$/.test(prop)) {
117
+ return target.get(parseInt(prop, 10));
118
+ }
119
+ return Reflect.get(target, prop, receiver);
120
+ },
121
+ has(target, prop) {
122
+ if (typeof prop === 'string' && /^\d+$/.test(prop)) {
123
+ const index = parseInt(prop, 10);
124
+ return index >= 0 && index < target.length;
125
+ }
126
+ return Reflect.has(target, prop);
127
+ },
128
+ });
129
+ }
130
+ // For backwards compatibility, also export a class that creates the proxy
131
+ export const ImageTrackListClass = class {
132
+ constructor() {
133
+ return createImageTrackList();
134
+ }
135
+ };
136
+ //# sourceMappingURL=tracks.js.map