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,383 @@
1
+ /**
2
+ * NodeAvImageDecoder - Node-av based image decoder
3
+ *
4
+ * Decodes still images and animated images (GIF, APNG) using node-av
5
+ * native bindings (FFmpeg's libav* libraries).
6
+ *
7
+ * Note: Animated WebP is NOT fully supported due to FFmpeg's webp demuxer
8
+ * skipping ANIM/ANMF chunks. Consider using a dedicated WebP library for
9
+ * animated WebP support.
10
+ */
11
+ import { Decoder, Demuxer, FilterAPI } from 'node-av/api';
12
+ import { FormatContext, Packet, Rational } from 'node-av/lib';
13
+ import { AVMEDIA_TYPE_VIDEO } from 'node-av/constants';
14
+ import { extractColorSpaceFromFrame } from '../../../formats/color-space.js';
15
+ import { pixelFormatToFFmpeg } from '../../../codec-utils/formats.js';
16
+ import { MIME_TO_CODEC_ID, DEMUXER_FORMATS, DEFAULT_FRAME_DURATION, probeImageDimensions, } from './decoder/index.js';
17
+ export { probeImageDimensions };
18
+ /**
19
+ * Decode images using node-av native bindings
20
+ */
21
+ export class NodeAvImageDecoder {
22
+ decoder = null;
23
+ demuxer = null;
24
+ formatContext = null;
25
+ stream = null;
26
+ filter = null;
27
+ config;
28
+ frames = [];
29
+ closed = false;
30
+ // Use a dummy time_base for still images (required by node-av)
31
+ static DUMMY_TIME_BASE = new Rational(1, 25);
32
+ constructor(config) {
33
+ this.config = config;
34
+ }
35
+ /**
36
+ * Decode all frames from the image data
37
+ */
38
+ async decode() {
39
+ if (this.closed) {
40
+ throw new Error('Decoder is closed');
41
+ }
42
+ const codecId = this.getCodecId();
43
+ if (!codecId) {
44
+ throw new Error(`Unsupported image type: ${this.config.mimeType}`);
45
+ }
46
+ try {
47
+ if (this.usesDemuxer()) {
48
+ // Use Demuxer for animated formats (GIF, APNG)
49
+ await this.decodeWithDemuxer();
50
+ }
51
+ else {
52
+ // Use raw Decoder for static images
53
+ await this.initializeDecoder(codecId);
54
+ await this.decodeData();
55
+ await this.flush();
56
+ }
57
+ }
58
+ finally {
59
+ this.cleanup();
60
+ }
61
+ return this.frames;
62
+ }
63
+ /**
64
+ * Check if this format requires Demuxer for proper decoding
65
+ */
66
+ usesDemuxer() {
67
+ return DEMUXER_FORMATS.includes(this.config.mimeType.toLowerCase());
68
+ }
69
+ /**
70
+ * Get the codec ID for the MIME type
71
+ */
72
+ getCodecId() {
73
+ return MIME_TO_CODEC_ID[this.config.mimeType.toLowerCase()] ?? null;
74
+ }
75
+ /**
76
+ * Decode animated images using Demuxer API
77
+ * This properly parses container formats like GIF and APNG
78
+ */
79
+ async decodeWithDemuxer() {
80
+ // Open demuxer from buffer
81
+ this.demuxer = await Demuxer.open(Buffer.from(this.config.data));
82
+ // Find video stream
83
+ const videoStream = this.demuxer.streams.find((s) => s.codecpar.codecType === AVMEDIA_TYPE_VIDEO);
84
+ if (!videoStream) {
85
+ throw new Error('No video stream found in image');
86
+ }
87
+ // Store stream reference and create decoder
88
+ this.stream = videoStream;
89
+ this.decoder = await Decoder.create(videoStream, { exitOnError: false });
90
+ // Get time base for duration calculation
91
+ const timeBase = videoStream.timeBase;
92
+ const timeBaseNum = timeBase?.num ?? 1;
93
+ const timeBaseDen = timeBase?.den ?? 1;
94
+ // Read and decode all packets
95
+ for await (const packet of this.demuxer.packets()) {
96
+ if (!packet)
97
+ break;
98
+ if (packet.streamIndex === videoStream.index) {
99
+ // Calculate timestamp and duration in microseconds
100
+ const pts = Number(packet.pts ?? 0n);
101
+ const duration = Number(packet.duration ?? 0n);
102
+ const timestampUs = Math.round((pts * timeBaseNum / timeBaseDen) * 1_000_000);
103
+ const durationUs = duration > 0
104
+ ? Math.round((duration * timeBaseNum / timeBaseDen) * 1_000_000)
105
+ : DEFAULT_FRAME_DURATION;
106
+ // Decode packet
107
+ await this.decoder.decode(packet);
108
+ // Drain frames
109
+ let frame = await this.decoder.receive();
110
+ while (frame) {
111
+ const converted = await this.convertFrameWithTiming(frame, timestampUs, durationUs);
112
+ frame.unref();
113
+ if (converted) {
114
+ this.frames.push(converted);
115
+ }
116
+ frame = await this.decoder.receive();
117
+ }
118
+ }
119
+ packet.unref();
120
+ }
121
+ // Flush decoder
122
+ try {
123
+ await this.decoder.flush();
124
+ let frame = await this.decoder.receive();
125
+ while (frame) {
126
+ const lastTimestamp = this.frames.length > 0
127
+ ? this.frames[this.frames.length - 1].timestamp + this.frames[this.frames.length - 1].duration
128
+ : 0;
129
+ const converted = await this.convertFrameWithTiming(frame, lastTimestamp, DEFAULT_FRAME_DURATION);
130
+ frame.unref();
131
+ if (converted) {
132
+ this.frames.push(converted);
133
+ }
134
+ frame = await this.decoder.receive();
135
+ }
136
+ }
137
+ catch {
138
+ // Ignore flush errors
139
+ }
140
+ }
141
+ /**
142
+ * Get the FFmpeg format string for the target output format
143
+ */
144
+ getTargetFormat() {
145
+ const preferred = this.config.preferredFormat;
146
+ if (!preferred || preferred === 'RGBA') {
147
+ return { ffmpegFormat: 'rgba', webCodecsFormat: 'RGBA' };
148
+ }
149
+ // Convert WebCodecs format to FFmpeg format
150
+ const ffmpegFormat = pixelFormatToFFmpeg(preferred);
151
+ return { ffmpegFormat, webCodecsFormat: preferred };
152
+ }
153
+ /**
154
+ * Convert a decoded frame to target format with specific timing
155
+ */
156
+ async convertFrameWithTiming(frame, timestamp, duration) {
157
+ const width = frame.width;
158
+ const height = frame.height;
159
+ if (width === 0 || height === 0) {
160
+ return null;
161
+ }
162
+ // Extract colorSpace from bitstream BEFORE filtering (color info is lost after format conversion)
163
+ // This preserves HDR/color information from AVIF, HEIC, and other formats with embedded color metadata
164
+ const bitstreamColorSpace = extractColorSpaceFromFrame({
165
+ colorPrimaries: frame.colorPrimaries,
166
+ colorTrc: frame.colorTrc,
167
+ colorSpace: frame.colorSpace,
168
+ colorRange: frame.colorRange,
169
+ });
170
+ // Determine target format
171
+ const { ffmpegFormat, webCodecsFormat } = this.getTargetFormat();
172
+ // Build filter description for scaling and format conversion
173
+ let filterDesc = '';
174
+ if (this.config.desiredWidth || this.config.desiredHeight) {
175
+ const scaleW = this.config.desiredWidth || -1;
176
+ const scaleH = this.config.desiredHeight || -1;
177
+ filterDesc = `scale=${scaleW}:${scaleH},format=${ffmpegFormat}`;
178
+ }
179
+ else {
180
+ filterDesc = `format=${ffmpegFormat}`;
181
+ }
182
+ // Create or reuse filter
183
+ if (!this.filter) {
184
+ this.filter = FilterAPI.create(filterDesc, {});
185
+ }
186
+ await this.filter.process(frame);
187
+ let filtered = await this.filter.receive();
188
+ let attempts = 0;
189
+ while (filtered === null && attempts < 10) {
190
+ filtered = await this.filter.receive();
191
+ attempts++;
192
+ }
193
+ if (!filtered) {
194
+ return null;
195
+ }
196
+ const outputWidth = this.config.desiredWidth || width;
197
+ const outputHeight = this.config.desiredHeight || height;
198
+ const buffer = filtered.toBuffer();
199
+ filtered.unref();
200
+ // Use bitstream colorSpace if extracted, otherwise use config colorSpace
201
+ // Bitstream takes precedence as it represents the actual encoded color information
202
+ const outputColorSpace = bitstreamColorSpace ?? this.config.colorSpace;
203
+ return {
204
+ data: new Uint8Array(buffer),
205
+ width: outputWidth,
206
+ height: outputHeight,
207
+ timestamp,
208
+ duration,
209
+ complete: true,
210
+ colorSpace: outputColorSpace,
211
+ format: webCodecsFormat,
212
+ };
213
+ }
214
+ /**
215
+ * Initialize the decoder with the given codec (for static images)
216
+ */
217
+ async initializeDecoder(codecId) {
218
+ this.formatContext = new FormatContext();
219
+ this.formatContext.allocContext();
220
+ this.stream = this.formatContext.newStream();
221
+ this.stream.timeBase = NodeAvImageDecoder.DUMMY_TIME_BASE;
222
+ const params = this.stream.codecpar;
223
+ params.codecType = AVMEDIA_TYPE_VIDEO;
224
+ params.codecId = codecId;
225
+ params.width = 0;
226
+ params.height = 0;
227
+ this.decoder = await Decoder.create(this.stream, {
228
+ exitOnError: false,
229
+ });
230
+ }
231
+ /**
232
+ * Decode static image data
233
+ */
234
+ async decodeData() {
235
+ if (!this.decoder || !this.stream) {
236
+ throw new Error('Decoder not initialized');
237
+ }
238
+ await this.sendPacket(Buffer.from(this.config.data), 0);
239
+ await this.drainFrames();
240
+ }
241
+ /**
242
+ * Send a packet to the decoder
243
+ */
244
+ async sendPacket(data, pts) {
245
+ if (!this.decoder || !this.stream)
246
+ return;
247
+ const packet = new Packet();
248
+ packet.alloc();
249
+ packet.streamIndex = this.stream.index;
250
+ packet.pts = BigInt(pts);
251
+ packet.dts = BigInt(pts);
252
+ packet.timeBase = NodeAvImageDecoder.DUMMY_TIME_BASE;
253
+ packet.data = data;
254
+ packet.duration = 1n;
255
+ await this.decoder.decode(packet);
256
+ packet.unref();
257
+ }
258
+ /**
259
+ * Drain decoded frames from the decoder
260
+ */
261
+ async drainFrames() {
262
+ if (!this.decoder)
263
+ return;
264
+ let frame = await this.decoder.receive();
265
+ while (frame) {
266
+ const converted = await this.convertFrame(frame);
267
+ frame.unref();
268
+ if (converted) {
269
+ this.frames.push(converted);
270
+ }
271
+ frame = await this.decoder.receive();
272
+ }
273
+ }
274
+ /**
275
+ * Convert a decoded frame to target format (for static images)
276
+ */
277
+ async convertFrame(frame) {
278
+ const width = frame.width;
279
+ const height = frame.height;
280
+ if (width === 0 || height === 0) {
281
+ return null;
282
+ }
283
+ // Extract colorSpace from bitstream BEFORE filtering (color info is lost after format conversion)
284
+ const bitstreamColorSpace = extractColorSpaceFromFrame({
285
+ colorPrimaries: frame.colorPrimaries,
286
+ colorTrc: frame.colorTrc,
287
+ colorSpace: frame.colorSpace,
288
+ colorRange: frame.colorRange,
289
+ });
290
+ // Determine target format
291
+ const { ffmpegFormat, webCodecsFormat } = this.getTargetFormat();
292
+ let filterDesc = '';
293
+ if (this.config.desiredWidth || this.config.desiredHeight) {
294
+ const scaleW = this.config.desiredWidth || -1;
295
+ const scaleH = this.config.desiredHeight || -1;
296
+ filterDesc = `scale=${scaleW}:${scaleH},format=${ffmpegFormat}`;
297
+ }
298
+ else {
299
+ filterDesc = `format=${ffmpegFormat}`;
300
+ }
301
+ if (!this.filter) {
302
+ this.filter = FilterAPI.create(filterDesc, {});
303
+ }
304
+ await this.filter.process(frame);
305
+ let filtered = await this.filter.receive();
306
+ let attempts = 0;
307
+ while (filtered === null && attempts < 10) {
308
+ filtered = await this.filter.receive();
309
+ attempts++;
310
+ }
311
+ if (!filtered) {
312
+ return null;
313
+ }
314
+ const outputWidth = this.config.desiredWidth || width;
315
+ const outputHeight = this.config.desiredHeight || height;
316
+ const buffer = filtered.toBuffer();
317
+ filtered.unref();
318
+ // Use bitstream colorSpace if extracted, otherwise use config colorSpace
319
+ const outputColorSpace = bitstreamColorSpace ?? this.config.colorSpace;
320
+ // Static images have timestamp 0 and duration 0
321
+ return {
322
+ data: new Uint8Array(buffer),
323
+ width: outputWidth,
324
+ height: outputHeight,
325
+ timestamp: 0,
326
+ duration: 0,
327
+ complete: true,
328
+ colorSpace: outputColorSpace,
329
+ format: webCodecsFormat,
330
+ };
331
+ }
332
+ /**
333
+ * Flush the decoder to get any remaining frames
334
+ */
335
+ async flush() {
336
+ if (!this.decoder)
337
+ return;
338
+ try {
339
+ await this.decoder.flush();
340
+ await this.drainFrames();
341
+ }
342
+ catch {
343
+ // Ignore flush errors
344
+ }
345
+ }
346
+ /**
347
+ * Clean up resources
348
+ */
349
+ cleanup() {
350
+ this.filter?.close();
351
+ this.filter = null;
352
+ this.decoder?.close();
353
+ this.decoder = null;
354
+ this.demuxer?.close();
355
+ this.demuxer = null;
356
+ this.formatContext = null;
357
+ this.stream = null;
358
+ }
359
+ /**
360
+ * Close the decoder
361
+ */
362
+ close() {
363
+ if (this.closed)
364
+ return;
365
+ this.closed = true;
366
+ this.cleanup();
367
+ this.frames = [];
368
+ }
369
+ /**
370
+ * Check if a MIME type is supported
371
+ */
372
+ static isTypeSupported(mimeType) {
373
+ return mimeType.toLowerCase() in MIME_TO_CODEC_ID;
374
+ }
375
+ /**
376
+ * Check if animated decoding is supported for this type
377
+ * (GIF and APNG work, WebP does not due to FFmpeg limitations)
378
+ */
379
+ static isAnimatedTypeSupported(mimeType) {
380
+ return DEMUXER_FORMATS.includes(mimeType.toLowerCase());
381
+ }
382
+ }
383
+ //# sourceMappingURL=NodeAvImageDecoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeAvImageDecoder.js","sourceRoot":"","sources":["../../../../src/backends/node-av/image/NodeAvImageDecoder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * WebPImageDecoder - WebP image decoder using node-webpmux
3
+ *
4
+ * Provides full support for WebP images including animated WebP,
5
+ * which FFmpeg's webp demuxer does not support (skips ANIM/ANMF chunks).
6
+ */
7
+ import type { VideoColorSpaceInit } from '../../../formats/index.js';
8
+ import type { VideoPixelFormat } from '../../../core/VideoFrame.js';
9
+ export interface DecodedWebPFrame {
10
+ data: Uint8Array;
11
+ width: number;
12
+ height: number;
13
+ timestamp: number;
14
+ duration: number;
15
+ complete: boolean;
16
+ colorSpace?: VideoColorSpaceInit;
17
+ /** WebP decoder always outputs RGBA (node-webpmux limitation) */
18
+ format: VideoPixelFormat;
19
+ }
20
+ export interface WebPDecoderConfig {
21
+ data: Uint8Array;
22
+ desiredWidth?: number;
23
+ desiredHeight?: number;
24
+ colorSpace?: VideoColorSpaceInit;
25
+ }
26
+ /**
27
+ * Decode WebP images using node-webpmux
28
+ * Supports both static and animated WebP
29
+ */
30
+ export declare class WebPImageDecoder {
31
+ private config;
32
+ private frames;
33
+ private closed;
34
+ constructor(config: WebPDecoderConfig);
35
+ /**
36
+ * Decode all frames from the WebP data
37
+ */
38
+ decode(): Promise<DecodedWebPFrame[]>;
39
+ /**
40
+ * Composite a frame onto a canvas at the specified position
41
+ */
42
+ private compositeFrame;
43
+ /**
44
+ * Scale the frame if desired dimensions are specified
45
+ * Uses simple nearest-neighbor scaling for performance
46
+ */
47
+ private scaleIfNeeded;
48
+ /**
49
+ * Close the decoder and release resources
50
+ */
51
+ close(): void;
52
+ /**
53
+ * Check if WebP MIME type is supported
54
+ */
55
+ static isTypeSupported(mimeType: string): boolean;
56
+ }
57
+ //# sourceMappingURL=WebPImageDecoder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebPImageDecoder.d.ts","sourceRoot":"","sources":["../../../../src/backends/node-av/image/WebPImageDecoder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,iEAAiE;IACjE,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,UAAU,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,mBAAmB,CAAC;CAClC;AAqBD;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,iBAAiB;IAIrC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAiF3C;;OAEG;IACH,OAAO,CAAC,cAAc;IAkCtB;;;OAGG;IACH,OAAO,CAAC,aAAa;IA0CrB;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAIlD"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * WebPImageDecoder - WebP image decoder using node-webpmux
3
+ *
4
+ * Provides full support for WebP images including animated WebP,
5
+ * which FFmpeg's webp demuxer does not support (skips ANIM/ANMF chunks).
6
+ */
7
+ import WebP from 'node-webpmux';
8
+ // Track if the WASM library has been initialized
9
+ let libInitialized = false;
10
+ let libInitPromise = null;
11
+ /**
12
+ * Ensure the node-webpmux WASM library is initialized
13
+ */
14
+ async function ensureLibInitialized() {
15
+ if (libInitialized)
16
+ return;
17
+ if (libInitPromise) {
18
+ await libInitPromise;
19
+ return;
20
+ }
21
+ libInitPromise = WebP.Image.initLib().then(() => {
22
+ libInitialized = true;
23
+ });
24
+ await libInitPromise;
25
+ }
26
+ /**
27
+ * Decode WebP images using node-webpmux
28
+ * Supports both static and animated WebP
29
+ */
30
+ export class WebPImageDecoder {
31
+ config;
32
+ frames = [];
33
+ closed = false;
34
+ constructor(config) {
35
+ this.config = config;
36
+ }
37
+ /**
38
+ * Decode all frames from the WebP data
39
+ */
40
+ async decode() {
41
+ if (this.closed) {
42
+ throw new Error('Decoder is closed');
43
+ }
44
+ await ensureLibInitialized();
45
+ const img = new WebP.Image();
46
+ await img.load(Buffer.from(this.config.data));
47
+ const width = img.width;
48
+ const height = img.height;
49
+ const hasAnim = img.hasAnim;
50
+ if (hasAnim && img.frames && img.frames.length > 0) {
51
+ // Animated WebP - decode each frame
52
+ let timestamp = 0;
53
+ for (let i = 0; i < img.frames.length; i++) {
54
+ const frameInfo = img.frames[i];
55
+ const rgbaData = await img.getFrameData(i);
56
+ // Frame duration in microseconds (frameInfo.delay is in ms)
57
+ const durationUs = (frameInfo.delay || 100) * 1000;
58
+ // Handle frame positioning if frame is smaller than canvas
59
+ let frameData;
60
+ if (frameInfo.width === width && frameInfo.height === height &&
61
+ frameInfo.x === 0 && frameInfo.y === 0) {
62
+ // Frame fills entire canvas
63
+ frameData = new Uint8Array(rgbaData);
64
+ }
65
+ else {
66
+ // Frame is positioned within canvas - composite it
67
+ frameData = this.compositeFrame(rgbaData, frameInfo.width, frameInfo.height, frameInfo.x, frameInfo.y, width, height);
68
+ }
69
+ // Apply scaling if desired dimensions specified
70
+ const scaled = this.scaleIfNeeded(frameData, width, height);
71
+ this.frames.push({
72
+ data: scaled.data,
73
+ width: scaled.width,
74
+ height: scaled.height,
75
+ timestamp,
76
+ duration: durationUs,
77
+ complete: true,
78
+ colorSpace: this.config.colorSpace,
79
+ format: 'RGBA', // node-webpmux always outputs RGBA
80
+ });
81
+ timestamp += durationUs;
82
+ }
83
+ }
84
+ else {
85
+ // Static WebP - single frame
86
+ const rgbaData = await img.getImageData();
87
+ // Apply scaling if desired dimensions specified
88
+ const scaled = this.scaleIfNeeded(new Uint8Array(rgbaData), width, height);
89
+ this.frames.push({
90
+ data: scaled.data,
91
+ width: scaled.width,
92
+ height: scaled.height,
93
+ timestamp: 0,
94
+ duration: 0,
95
+ complete: true,
96
+ colorSpace: this.config.colorSpace,
97
+ format: 'RGBA', // node-webpmux always outputs RGBA
98
+ });
99
+ }
100
+ return this.frames;
101
+ }
102
+ /**
103
+ * Composite a frame onto a canvas at the specified position
104
+ */
105
+ compositeFrame(frameData, frameWidth, frameHeight, frameX, frameY, canvasWidth, canvasHeight) {
106
+ // Create full canvas with transparent background
107
+ const canvas = new Uint8Array(canvasWidth * canvasHeight * 4);
108
+ // Copy frame pixels to their position on canvas
109
+ for (let y = 0; y < frameHeight; y++) {
110
+ const canvasY = frameY + y;
111
+ if (canvasY < 0 || canvasY >= canvasHeight)
112
+ continue;
113
+ for (let x = 0; x < frameWidth; x++) {
114
+ const canvasX = frameX + x;
115
+ if (canvasX < 0 || canvasX >= canvasWidth)
116
+ continue;
117
+ const srcIdx = (y * frameWidth + x) * 4;
118
+ const dstIdx = (canvasY * canvasWidth + canvasX) * 4;
119
+ canvas[dstIdx] = frameData[srcIdx];
120
+ canvas[dstIdx + 1] = frameData[srcIdx + 1];
121
+ canvas[dstIdx + 2] = frameData[srcIdx + 2];
122
+ canvas[dstIdx + 3] = frameData[srcIdx + 3];
123
+ }
124
+ }
125
+ return canvas;
126
+ }
127
+ /**
128
+ * Scale the frame if desired dimensions are specified
129
+ * Uses simple nearest-neighbor scaling for performance
130
+ */
131
+ scaleIfNeeded(data, width, height) {
132
+ const desiredW = this.config.desiredWidth;
133
+ const desiredH = this.config.desiredHeight;
134
+ if (!desiredW && !desiredH) {
135
+ return { data, width, height };
136
+ }
137
+ // Calculate target dimensions maintaining aspect ratio if only one dimension specified
138
+ let targetW = desiredW || Math.round(width * (desiredH / height));
139
+ let targetH = desiredH || Math.round(height * (desiredW / width));
140
+ if (targetW === width && targetH === height) {
141
+ return { data, width, height };
142
+ }
143
+ // Nearest-neighbor scaling
144
+ const scaled = new Uint8Array(targetW * targetH * 4);
145
+ const xRatio = width / targetW;
146
+ const yRatio = height / targetH;
147
+ for (let y = 0; y < targetH; y++) {
148
+ const srcY = Math.floor(y * yRatio);
149
+ for (let x = 0; x < targetW; x++) {
150
+ const srcX = Math.floor(x * xRatio);
151
+ const srcIdx = (srcY * width + srcX) * 4;
152
+ const dstIdx = (y * targetW + x) * 4;
153
+ scaled[dstIdx] = data[srcIdx];
154
+ scaled[dstIdx + 1] = data[srcIdx + 1];
155
+ scaled[dstIdx + 2] = data[srcIdx + 2];
156
+ scaled[dstIdx + 3] = data[srcIdx + 3];
157
+ }
158
+ }
159
+ return { data: scaled, width: targetW, height: targetH };
160
+ }
161
+ /**
162
+ * Close the decoder and release resources
163
+ */
164
+ close() {
165
+ if (this.closed)
166
+ return;
167
+ this.closed = true;
168
+ this.frames = [];
169
+ }
170
+ /**
171
+ * Check if WebP MIME type is supported
172
+ */
173
+ static isTypeSupported(mimeType) {
174
+ const type = mimeType.toLowerCase();
175
+ return type === 'image/webp';
176
+ }
177
+ }
178
+ //# sourceMappingURL=WebPImageDecoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebPImageDecoder.js","sourceRoot":"","sources":["../../../../src/backends/node-av/image/WebPImageDecoder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Image decoder constants
3
+ */
4
+ import { type AVCodecID } from 'node-av/constants';
5
+ /** MIME type to AVCodecID mapping */
6
+ export declare const MIME_TO_CODEC_ID: Record<string, AVCodecID>;
7
+ /**
8
+ * Formats that require Demuxer for proper decoding (container formats)
9
+ * Note: WebP is excluded because FFmpeg's webp demuxer doesn't support ANIM/ANMF
10
+ */
11
+ export declare const DEMUXER_FORMATS: string[];
12
+ /** Default frame duration in microseconds (100ms) */
13
+ export declare const DEFAULT_FRAME_DURATION = 100000;
14
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/image/decoder/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAQL,KAAK,SAAS,EACf,MAAM,mBAAmB,CAAC;AAE3B,qCAAqC;AACrC,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAUtD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,UAA4C,CAAC;AAEzE,qDAAqD;AACrD,eAAO,MAAM,sBAAsB,SAAS,CAAC"}