webcodecs-node 0.2.2

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 (455) hide show
  1. package/LICENSE +656 -0
  2. package/README.md +607 -0
  3. package/dist/AudioData.d.ts +6 -0
  4. package/dist/AudioData.d.ts.map +1 -0
  5. package/dist/AudioData.js +6 -0
  6. package/dist/AudioData.js.map +1 -0
  7. package/dist/AudioDecoder.d.ts +6 -0
  8. package/dist/AudioDecoder.d.ts.map +1 -0
  9. package/dist/AudioDecoder.js +6 -0
  10. package/dist/AudioDecoder.js.map +1 -0
  11. package/dist/AudioEncoder.d.ts +6 -0
  12. package/dist/AudioEncoder.d.ts.map +1 -0
  13. package/dist/AudioEncoder.js +6 -0
  14. package/dist/AudioEncoder.js.map +1 -0
  15. package/dist/EncodedAudioChunk.d.ts +6 -0
  16. package/dist/EncodedAudioChunk.d.ts.map +1 -0
  17. package/dist/EncodedAudioChunk.js +6 -0
  18. package/dist/EncodedAudioChunk.js.map +1 -0
  19. package/dist/EncodedVideoChunk.d.ts +6 -0
  20. package/dist/EncodedVideoChunk.d.ts.map +1 -0
  21. package/dist/EncodedVideoChunk.js +6 -0
  22. package/dist/EncodedVideoChunk.js.map +1 -0
  23. package/dist/FFmpegProcess.d.ts +6 -0
  24. package/dist/FFmpegProcess.d.ts.map +1 -0
  25. package/dist/FFmpegProcess.js +6 -0
  26. package/dist/FFmpegProcess.js.map +1 -0
  27. package/dist/HardwareAcceleration.d.ts +6 -0
  28. package/dist/HardwareAcceleration.d.ts.map +1 -0
  29. package/dist/HardwareAcceleration.js +6 -0
  30. package/dist/HardwareAcceleration.js.map +1 -0
  31. package/dist/ImageDecoder.d.ts +6 -0
  32. package/dist/ImageDecoder.d.ts.map +1 -0
  33. package/dist/ImageDecoder.js +6 -0
  34. package/dist/ImageDecoder.js.map +1 -0
  35. package/dist/Logger.d.ts +6 -0
  36. package/dist/Logger.d.ts.map +1 -0
  37. package/dist/Logger.js +6 -0
  38. package/dist/Logger.js.map +1 -0
  39. package/dist/MediaCapabilities.d.ts +9 -0
  40. package/dist/MediaCapabilities.d.ts.map +1 -0
  41. package/dist/MediaCapabilities.js +8 -0
  42. package/dist/MediaCapabilities.js.map +1 -0
  43. package/dist/VideoDecoder.d.ts +6 -0
  44. package/dist/VideoDecoder.d.ts.map +1 -0
  45. package/dist/VideoDecoder.js +6 -0
  46. package/dist/VideoDecoder.js.map +1 -0
  47. package/dist/VideoEncoder.d.ts +6 -0
  48. package/dist/VideoEncoder.d.ts.map +1 -0
  49. package/dist/VideoEncoder.js +6 -0
  50. package/dist/VideoEncoder.js.map +1 -0
  51. package/dist/VideoFrame.d.ts +10 -0
  52. package/dist/VideoFrame.d.ts.map +1 -0
  53. package/dist/VideoFrame.js +9 -0
  54. package/dist/VideoFrame.js.map +1 -0
  55. package/dist/__tests__/AudioData.test.d.ts +5 -0
  56. package/dist/__tests__/AudioData.test.d.ts.map +1 -0
  57. package/dist/__tests__/AudioData.test.js +179 -0
  58. package/dist/__tests__/AudioData.test.js.map +1 -0
  59. package/dist/__tests__/AudioDecoder.test.d.ts +5 -0
  60. package/dist/__tests__/AudioDecoder.test.d.ts.map +1 -0
  61. package/dist/__tests__/AudioDecoder.test.js +733 -0
  62. package/dist/__tests__/AudioDecoder.test.js.map +1 -0
  63. package/dist/__tests__/AudioEncoder.test.d.ts +5 -0
  64. package/dist/__tests__/AudioEncoder.test.d.ts.map +1 -0
  65. package/dist/__tests__/AudioEncoder.test.js +247 -0
  66. package/dist/__tests__/AudioEncoder.test.js.map +1 -0
  67. package/dist/__tests__/EncodedChunks.test.d.ts +5 -0
  68. package/dist/__tests__/EncodedChunks.test.d.ts.map +1 -0
  69. package/dist/__tests__/EncodedChunks.test.js +99 -0
  70. package/dist/__tests__/EncodedChunks.test.js.map +1 -0
  71. package/dist/__tests__/HardwareAcceleration.test.d.ts +5 -0
  72. package/dist/__tests__/HardwareAcceleration.test.d.ts.map +1 -0
  73. package/dist/__tests__/HardwareAcceleration.test.js +84 -0
  74. package/dist/__tests__/HardwareAcceleration.test.js.map +1 -0
  75. package/dist/__tests__/ImageDecoder.test.d.ts +5 -0
  76. package/dist/__tests__/ImageDecoder.test.d.ts.map +1 -0
  77. package/dist/__tests__/ImageDecoder.test.js +587 -0
  78. package/dist/__tests__/ImageDecoder.test.js.map +1 -0
  79. package/dist/__tests__/MediaCapabilities.test.d.ts +5 -0
  80. package/dist/__tests__/MediaCapabilities.test.d.ts.map +1 -0
  81. package/dist/__tests__/MediaCapabilities.test.js +346 -0
  82. package/dist/__tests__/MediaCapabilities.test.js.map +1 -0
  83. package/dist/__tests__/VideoDecoder.test.d.ts +5 -0
  84. package/dist/__tests__/VideoDecoder.test.d.ts.map +1 -0
  85. package/dist/__tests__/VideoDecoder.test.js +675 -0
  86. package/dist/__tests__/VideoDecoder.test.js.map +1 -0
  87. package/dist/__tests__/VideoEncoder.test.d.ts +5 -0
  88. package/dist/__tests__/VideoEncoder.test.d.ts.map +1 -0
  89. package/dist/__tests__/VideoEncoder.test.js +468 -0
  90. package/dist/__tests__/VideoEncoder.test.js.map +1 -0
  91. package/dist/__tests__/VideoFrame.test.d.ts +5 -0
  92. package/dist/__tests__/VideoFrame.test.d.ts.map +1 -0
  93. package/dist/__tests__/VideoFrame.test.js +243 -0
  94. package/dist/__tests__/VideoFrame.test.js.map +1 -0
  95. package/dist/__tests__/aac-utils.test.d.ts +2 -0
  96. package/dist/__tests__/aac-utils.test.d.ts.map +1 -0
  97. package/dist/__tests__/aac-utils.test.js +37 -0
  98. package/dist/__tests__/aac-utils.test.js.map +1 -0
  99. package/dist/__tests__/avc-utils.test.d.ts +2 -0
  100. package/dist/__tests__/avc-utils.test.d.ts.map +1 -0
  101. package/dist/__tests__/avc-utils.test.js +63 -0
  102. package/dist/__tests__/avc-utils.test.js.map +1 -0
  103. package/dist/__tests__/hevc-utils.test.d.ts +2 -0
  104. package/dist/__tests__/hevc-utils.test.d.ts.map +1 -0
  105. package/dist/__tests__/hevc-utils.test.js +78 -0
  106. package/dist/__tests__/hevc-utils.test.js.map +1 -0
  107. package/dist/capabilities/MediaCapabilities.d.ts +78 -0
  108. package/dist/capabilities/MediaCapabilities.d.ts.map +1 -0
  109. package/dist/capabilities/MediaCapabilities.js +276 -0
  110. package/dist/capabilities/MediaCapabilities.js.map +1 -0
  111. package/dist/capabilities/codecs.d.ts +72 -0
  112. package/dist/capabilities/codecs.d.ts.map +1 -0
  113. package/dist/capabilities/codecs.js +153 -0
  114. package/dist/capabilities/codecs.js.map +1 -0
  115. package/dist/capabilities/index.d.ts +7 -0
  116. package/dist/capabilities/index.d.ts.map +1 -0
  117. package/dist/capabilities/index.js +8 -0
  118. package/dist/capabilities/index.js.map +1 -0
  119. package/dist/capabilities/types.d.ts +77 -0
  120. package/dist/capabilities/types.d.ts.map +1 -0
  121. package/dist/capabilities/types.js +5 -0
  122. package/dist/capabilities/types.js.map +1 -0
  123. package/dist/core/AudioData.d.ts +36 -0
  124. package/dist/core/AudioData.d.ts.map +1 -0
  125. package/dist/core/AudioData.js +229 -0
  126. package/dist/core/AudioData.js.map +1 -0
  127. package/dist/core/EncodedAudioChunk.d.ts +26 -0
  128. package/dist/core/EncodedAudioChunk.d.ts.map +1 -0
  129. package/dist/core/EncodedAudioChunk.js +58 -0
  130. package/dist/core/EncodedAudioChunk.js.map +1 -0
  131. package/dist/core/EncodedVideoChunk.d.ts +23 -0
  132. package/dist/core/EncodedVideoChunk.d.ts.map +1 -0
  133. package/dist/core/EncodedVideoChunk.js +55 -0
  134. package/dist/core/EncodedVideoChunk.js.map +1 -0
  135. package/dist/core/VideoFrame.d.ts +61 -0
  136. package/dist/core/VideoFrame.d.ts.map +1 -0
  137. package/dist/core/VideoFrame.js +385 -0
  138. package/dist/core/VideoFrame.js.map +1 -0
  139. package/dist/core/index.d.ts +8 -0
  140. package/dist/core/index.d.ts.map +1 -0
  141. package/dist/core/index.js +8 -0
  142. package/dist/core/index.js.map +1 -0
  143. package/dist/debug-h264.d.ts +5 -0
  144. package/dist/debug-h264.d.ts.map +1 -0
  145. package/dist/debug-h264.js +103 -0
  146. package/dist/debug-h264.js.map +1 -0
  147. package/dist/decoders/AudioDecoder.d.ts +57 -0
  148. package/dist/decoders/AudioDecoder.d.ts.map +1 -0
  149. package/dist/decoders/AudioDecoder.js +333 -0
  150. package/dist/decoders/AudioDecoder.js.map +1 -0
  151. package/dist/decoders/ImageDecoder.d.ts +111 -0
  152. package/dist/decoders/ImageDecoder.d.ts.map +1 -0
  153. package/dist/decoders/ImageDecoder.js +686 -0
  154. package/dist/decoders/ImageDecoder.js.map +1 -0
  155. package/dist/decoders/VideoDecoder.d.ts +70 -0
  156. package/dist/decoders/VideoDecoder.d.ts.map +1 -0
  157. package/dist/decoders/VideoDecoder.js +410 -0
  158. package/dist/decoders/VideoDecoder.js.map +1 -0
  159. package/dist/decoders/index.d.ts +8 -0
  160. package/dist/decoders/index.d.ts.map +1 -0
  161. package/dist/decoders/index.js +7 -0
  162. package/dist/decoders/index.js.map +1 -0
  163. package/dist/demos/demo-audio-opus.d.ts +5 -0
  164. package/dist/demos/demo-audio-opus.d.ts.map +1 -0
  165. package/dist/demos/demo-audio-opus.js +107 -0
  166. package/dist/demos/demo-audio-opus.js.map +1 -0
  167. package/dist/demos/demo-audio.d.ts +10 -0
  168. package/dist/demos/demo-audio.d.ts.map +1 -0
  169. package/dist/demos/demo-audio.js +135 -0
  170. package/dist/demos/demo-audio.js.map +1 -0
  171. package/dist/demos/demo-conversion.d.ts +13 -0
  172. package/dist/demos/demo-conversion.d.ts.map +1 -0
  173. package/dist/demos/demo-conversion.js +301 -0
  174. package/dist/demos/demo-conversion.js.map +1 -0
  175. package/dist/demos/demo-h264.d.ts +7 -0
  176. package/dist/demos/demo-h264.d.ts.map +1 -0
  177. package/dist/demos/demo-h264.js +134 -0
  178. package/dist/demos/demo-h264.js.map +1 -0
  179. package/dist/demos/demo-hwaccel-conversion.d.ts +8 -0
  180. package/dist/demos/demo-hwaccel-conversion.d.ts.map +1 -0
  181. package/dist/demos/demo-hwaccel-conversion.js +161 -0
  182. package/dist/demos/demo-hwaccel-conversion.js.map +1 -0
  183. package/dist/demos/demo-hwaccel.d.ts +7 -0
  184. package/dist/demos/demo-hwaccel.d.ts.map +1 -0
  185. package/dist/demos/demo-hwaccel.js +51 -0
  186. package/dist/demos/demo-hwaccel.js.map +1 -0
  187. package/dist/demos/demo-image.d.ts +12 -0
  188. package/dist/demos/demo-image.d.ts.map +1 -0
  189. package/dist/demos/demo-image.js +178 -0
  190. package/dist/demos/demo-image.js.map +1 -0
  191. package/dist/demos/demo-mediabunny.d.ts +7 -0
  192. package/dist/demos/demo-mediabunny.d.ts.map +1 -0
  193. package/dist/demos/demo-mediabunny.js +78 -0
  194. package/dist/demos/demo-mediabunny.js.map +1 -0
  195. package/dist/demos/demo-pipeline.d.ts +8 -0
  196. package/dist/demos/demo-pipeline.d.ts.map +1 -0
  197. package/dist/demos/demo-pipeline.js +83 -0
  198. package/dist/demos/demo-pipeline.js.map +1 -0
  199. package/dist/demos/demo-samples.d.ts +9 -0
  200. package/dist/demos/demo-samples.d.ts.map +1 -0
  201. package/dist/demos/demo-samples.js +413 -0
  202. package/dist/demos/demo-samples.js.map +1 -0
  203. package/dist/demos/demo-streaming.d.ts +8 -0
  204. package/dist/demos/demo-streaming.d.ts.map +1 -0
  205. package/dist/demos/demo-streaming.js +299 -0
  206. package/dist/demos/demo-streaming.js.map +1 -0
  207. package/dist/demos/demo-webcodecs.d.ts +8 -0
  208. package/dist/demos/demo-webcodecs.d.ts.map +1 -0
  209. package/dist/demos/demo-webcodecs.js +316 -0
  210. package/dist/demos/demo-webcodecs.js.map +1 -0
  211. package/dist/demos/demo.d.ts +10 -0
  212. package/dist/demos/demo.d.ts.map +1 -0
  213. package/dist/demos/demo.js +123 -0
  214. package/dist/demos/demo.js.map +1 -0
  215. package/dist/encoders/AudioEncoder.d.ts +69 -0
  216. package/dist/encoders/AudioEncoder.d.ts.map +1 -0
  217. package/dist/encoders/AudioEncoder.js +425 -0
  218. package/dist/encoders/AudioEncoder.js.map +1 -0
  219. package/dist/encoders/VideoEncoder.d.ts +80 -0
  220. package/dist/encoders/VideoEncoder.d.ts.map +1 -0
  221. package/dist/encoders/VideoEncoder.js +386 -0
  222. package/dist/encoders/VideoEncoder.js.map +1 -0
  223. package/dist/encoders/codecs/av1.d.ts +31 -0
  224. package/dist/encoders/codecs/av1.d.ts.map +1 -0
  225. package/dist/encoders/codecs/av1.js +66 -0
  226. package/dist/encoders/codecs/av1.js.map +1 -0
  227. package/dist/encoders/codecs/h264.d.ts +28 -0
  228. package/dist/encoders/codecs/h264.d.ts.map +1 -0
  229. package/dist/encoders/codecs/h264.js +95 -0
  230. package/dist/encoders/codecs/h264.js.map +1 -0
  231. package/dist/encoders/codecs/hevc.d.ts +28 -0
  232. package/dist/encoders/codecs/hevc.d.ts.map +1 -0
  233. package/dist/encoders/codecs/hevc.js +73 -0
  234. package/dist/encoders/codecs/hevc.js.map +1 -0
  235. package/dist/encoders/codecs/index.d.ts +19 -0
  236. package/dist/encoders/codecs/index.d.ts.map +1 -0
  237. package/dist/encoders/codecs/index.js +60 -0
  238. package/dist/encoders/codecs/index.js.map +1 -0
  239. package/dist/encoders/codecs/vp9.d.ts +29 -0
  240. package/dist/encoders/codecs/vp9.d.ts.map +1 -0
  241. package/dist/encoders/codecs/vp9.js +58 -0
  242. package/dist/encoders/codecs/vp9.js.map +1 -0
  243. package/dist/encoders/index.d.ts +8 -0
  244. package/dist/encoders/index.d.ts.map +1 -0
  245. package/dist/encoders/index.js +8 -0
  246. package/dist/encoders/index.js.map +1 -0
  247. package/dist/ffmpeg/FFmpegProcess.d.ts +111 -0
  248. package/dist/ffmpeg/FFmpegProcess.d.ts.map +1 -0
  249. package/dist/ffmpeg/FFmpegProcess.js +543 -0
  250. package/dist/ffmpeg/FFmpegProcess.js.map +1 -0
  251. package/dist/ffmpeg/audio-codecs.d.ts +59 -0
  252. package/dist/ffmpeg/audio-codecs.d.ts.map +1 -0
  253. package/dist/ffmpeg/audio-codecs.js +99 -0
  254. package/dist/ffmpeg/audio-codecs.js.map +1 -0
  255. package/dist/ffmpeg/formats.d.ts +42 -0
  256. package/dist/ffmpeg/formats.d.ts.map +1 -0
  257. package/dist/ffmpeg/formats.js +147 -0
  258. package/dist/ffmpeg/formats.js.map +1 -0
  259. package/dist/ffmpeg/index.d.ts +9 -0
  260. package/dist/ffmpeg/index.d.ts.map +1 -0
  261. package/dist/ffmpeg/index.js +13 -0
  262. package/dist/ffmpeg/index.js.map +1 -0
  263. package/dist/ffmpeg/parsers/annexb.d.ts +88 -0
  264. package/dist/ffmpeg/parsers/annexb.d.ts.map +1 -0
  265. package/dist/ffmpeg/parsers/annexb.js +201 -0
  266. package/dist/ffmpeg/parsers/annexb.js.map +1 -0
  267. package/dist/ffmpeg/parsers/index.d.ts +6 -0
  268. package/dist/ffmpeg/parsers/index.d.ts.map +1 -0
  269. package/dist/ffmpeg/parsers/index.js +8 -0
  270. package/dist/ffmpeg/parsers/index.js.map +1 -0
  271. package/dist/ffmpeg/parsers/ivf.d.ts +54 -0
  272. package/dist/ffmpeg/parsers/ivf.d.ts.map +1 -0
  273. package/dist/ffmpeg/parsers/ivf.js +109 -0
  274. package/dist/ffmpeg/parsers/ivf.js.map +1 -0
  275. package/dist/ffmpeg/types.d.ts +85 -0
  276. package/dist/ffmpeg/types.d.ts.map +1 -0
  277. package/dist/ffmpeg/types.js +8 -0
  278. package/dist/ffmpeg/types.js.map +1 -0
  279. package/dist/formats/audio-formats.d.ts +61 -0
  280. package/dist/formats/audio-formats.d.ts.map +1 -0
  281. package/dist/formats/audio-formats.js +113 -0
  282. package/dist/formats/audio-formats.js.map +1 -0
  283. package/dist/formats/color-space.d.ts +35 -0
  284. package/dist/formats/color-space.d.ts.map +1 -0
  285. package/dist/formats/color-space.js +62 -0
  286. package/dist/formats/color-space.js.map +1 -0
  287. package/dist/formats/conversions/frame-converter.d.ts +42 -0
  288. package/dist/formats/conversions/frame-converter.d.ts.map +1 -0
  289. package/dist/formats/conversions/frame-converter.js +244 -0
  290. package/dist/formats/conversions/frame-converter.js.map +1 -0
  291. package/dist/formats/conversions/index.d.ts +8 -0
  292. package/dist/formats/conversions/index.d.ts.map +1 -0
  293. package/dist/formats/conversions/index.js +10 -0
  294. package/dist/formats/conversions/index.js.map +1 -0
  295. package/dist/formats/index.d.ts +9 -0
  296. package/dist/formats/index.d.ts.map +1 -0
  297. package/dist/formats/index.js +14 -0
  298. package/dist/formats/index.js.map +1 -0
  299. package/dist/formats/parsers/index.d.ts +5 -0
  300. package/dist/formats/parsers/index.d.ts.map +1 -0
  301. package/dist/formats/parsers/index.js +5 -0
  302. package/dist/formats/parsers/index.js.map +1 -0
  303. package/dist/formats/parsers/webp.d.ts +16 -0
  304. package/dist/formats/parsers/webp.d.ts.map +1 -0
  305. package/dist/formats/parsers/webp.js +116 -0
  306. package/dist/formats/parsers/webp.js.map +1 -0
  307. package/dist/formats/pixel-formats.d.ts +41 -0
  308. package/dist/formats/pixel-formats.d.ts.map +1 -0
  309. package/dist/formats/pixel-formats.js +113 -0
  310. package/dist/formats/pixel-formats.js.map +1 -0
  311. package/dist/hardware/HardwareAcceleration.d.ts +6 -0
  312. package/dist/hardware/HardwareAcceleration.d.ts.map +1 -0
  313. package/dist/hardware/HardwareAcceleration.js +6 -0
  314. package/dist/hardware/HardwareAcceleration.js.map +1 -0
  315. package/dist/hardware/decoder-args.d.ts +25 -0
  316. package/dist/hardware/decoder-args.d.ts.map +1 -0
  317. package/dist/hardware/decoder-args.js +84 -0
  318. package/dist/hardware/decoder-args.js.map +1 -0
  319. package/dist/hardware/detection.d.ts +39 -0
  320. package/dist/hardware/detection.d.ts.map +1 -0
  321. package/dist/hardware/detection.js +178 -0
  322. package/dist/hardware/detection.js.map +1 -0
  323. package/dist/hardware/encoder-args.d.ts +38 -0
  324. package/dist/hardware/encoder-args.d.ts.map +1 -0
  325. package/dist/hardware/encoder-args.js +177 -0
  326. package/dist/hardware/encoder-args.js.map +1 -0
  327. package/dist/hardware/index.d.ts +12 -0
  328. package/dist/hardware/index.d.ts.map +1 -0
  329. package/dist/hardware/index.js +14 -0
  330. package/dist/hardware/index.js.map +1 -0
  331. package/dist/hardware/types.d.ts +29 -0
  332. package/dist/hardware/types.d.ts.map +1 -0
  333. package/dist/hardware/types.js +58 -0
  334. package/dist/hardware/types.js.map +1 -0
  335. package/dist/index.d.ts +44 -0
  336. package/dist/index.d.ts.map +1 -0
  337. package/dist/index.js +37 -0
  338. package/dist/index.js.map +1 -0
  339. package/dist/mediabunny/FFmpegAudioDecoder.d.ts +37 -0
  340. package/dist/mediabunny/FFmpegAudioDecoder.d.ts.map +1 -0
  341. package/dist/mediabunny/FFmpegAudioDecoder.js +254 -0
  342. package/dist/mediabunny/FFmpegAudioDecoder.js.map +1 -0
  343. package/dist/mediabunny/FFmpegAudioEncoder.d.ts +77 -0
  344. package/dist/mediabunny/FFmpegAudioEncoder.d.ts.map +1 -0
  345. package/dist/mediabunny/FFmpegAudioEncoder.js +484 -0
  346. package/dist/mediabunny/FFmpegAudioEncoder.js.map +1 -0
  347. package/dist/mediabunny/FFmpegVideoDecoder.d.ts +58 -0
  348. package/dist/mediabunny/FFmpegVideoDecoder.d.ts.map +1 -0
  349. package/dist/mediabunny/FFmpegVideoDecoder.js +366 -0
  350. package/dist/mediabunny/FFmpegVideoDecoder.js.map +1 -0
  351. package/dist/mediabunny/FFmpegVideoEncoder.d.ts +77 -0
  352. package/dist/mediabunny/FFmpegVideoEncoder.d.ts.map +1 -0
  353. package/dist/mediabunny/FFmpegVideoEncoder.js +551 -0
  354. package/dist/mediabunny/FFmpegVideoEncoder.js.map +1 -0
  355. package/dist/mediabunny/index.d.ts +21 -0
  356. package/dist/mediabunny/index.d.ts.map +1 -0
  357. package/dist/mediabunny/index.js +33 -0
  358. package/dist/mediabunny/index.js.map +1 -0
  359. package/dist/polyfill.d.ts +27 -0
  360. package/dist/polyfill.d.ts.map +1 -0
  361. package/dist/polyfill.js +78 -0
  362. package/dist/polyfill.js.map +1 -0
  363. package/dist/polyfills/CanvasRenderingContext2DPolyfill.d.ts +72 -0
  364. package/dist/polyfills/CanvasRenderingContext2DPolyfill.d.ts.map +1 -0
  365. package/dist/polyfills/CanvasRenderingContext2DPolyfill.js +293 -0
  366. package/dist/polyfills/CanvasRenderingContext2DPolyfill.js.map +1 -0
  367. package/dist/polyfills/ImageDataPolyfill.d.ts +12 -0
  368. package/dist/polyfills/ImageDataPolyfill.d.ts.map +1 -0
  369. package/dist/polyfills/ImageDataPolyfill.js +22 -0
  370. package/dist/polyfills/ImageDataPolyfill.js.map +1 -0
  371. package/dist/polyfills/OffscreenCanvas.d.ts +15 -0
  372. package/dist/polyfills/OffscreenCanvas.d.ts.map +1 -0
  373. package/dist/polyfills/OffscreenCanvas.js +35 -0
  374. package/dist/polyfills/OffscreenCanvas.js.map +1 -0
  375. package/dist/polyfills/OffscreenCanvasPolyfill.d.ts +16 -0
  376. package/dist/polyfills/OffscreenCanvasPolyfill.d.ts.map +1 -0
  377. package/dist/polyfills/OffscreenCanvasPolyfill.js +46 -0
  378. package/dist/polyfills/OffscreenCanvasPolyfill.js.map +1 -0
  379. package/dist/polyfills/VideoFramePolyfill.d.ts +44 -0
  380. package/dist/polyfills/VideoFramePolyfill.d.ts.map +1 -0
  381. package/dist/polyfills/VideoFramePolyfill.js +98 -0
  382. package/dist/polyfills/VideoFramePolyfill.js.map +1 -0
  383. package/dist/tools/generate-capabilities-profile.d.ts +2 -0
  384. package/dist/tools/generate-capabilities-profile.d.ts.map +1 -0
  385. package/dist/tools/generate-capabilities-profile.js +63 -0
  386. package/dist/tools/generate-capabilities-profile.js.map +1 -0
  387. package/dist/types/audio.d.ts +26 -0
  388. package/dist/types/audio.d.ts.map +1 -0
  389. package/dist/types/audio.js +5 -0
  390. package/dist/types/audio.js.map +1 -0
  391. package/dist/types/common.d.ts +68 -0
  392. package/dist/types/common.d.ts.map +1 -0
  393. package/dist/types/common.js +70 -0
  394. package/dist/types/common.js.map +1 -0
  395. package/dist/types/geometry.d.ts +35 -0
  396. package/dist/types/geometry.d.ts.map +1 -0
  397. package/dist/types/geometry.js +34 -0
  398. package/dist/types/geometry.js.map +1 -0
  399. package/dist/types/index.d.ts +8 -0
  400. package/dist/types/index.d.ts.map +1 -0
  401. package/dist/types/index.js +8 -0
  402. package/dist/types/index.js.map +1 -0
  403. package/dist/types/video.d.ts +43 -0
  404. package/dist/types/video.d.ts.map +1 -0
  405. package/dist/types/video.js +5 -0
  406. package/dist/types/video.js.map +1 -0
  407. package/dist/types.d.ts +6 -0
  408. package/dist/types.d.ts.map +1 -0
  409. package/dist/types.js +6 -0
  410. package/dist/types.js.map +1 -0
  411. package/dist/utils/aac.d.ts +26 -0
  412. package/dist/utils/aac.d.ts.map +1 -0
  413. package/dist/utils/aac.js +129 -0
  414. package/dist/utils/aac.js.map +1 -0
  415. package/dist/utils/avc.d.ts +39 -0
  416. package/dist/utils/avc.d.ts.map +1 -0
  417. package/dist/utils/avc.js +225 -0
  418. package/dist/utils/avc.js.map +1 -0
  419. package/dist/utils/buffer.d.ts +25 -0
  420. package/dist/utils/buffer.d.ts.map +1 -0
  421. package/dist/utils/buffer.js +73 -0
  422. package/dist/utils/buffer.js.map +1 -0
  423. package/dist/utils/hevc.d.ts +27 -0
  424. package/dist/utils/hevc.d.ts.map +1 -0
  425. package/dist/utils/hevc.js +239 -0
  426. package/dist/utils/hevc.js.map +1 -0
  427. package/dist/utils/index.d.ts +11 -0
  428. package/dist/utils/index.d.ts.map +1 -0
  429. package/dist/utils/index.js +16 -0
  430. package/dist/utils/index.js.map +1 -0
  431. package/dist/utils/logger.d.ts +55 -0
  432. package/dist/utils/logger.d.ts.map +1 -0
  433. package/dist/utils/logger.js +110 -0
  434. package/dist/utils/logger.js.map +1 -0
  435. package/dist/utils/type-guards.d.ts +50 -0
  436. package/dist/utils/type-guards.d.ts.map +1 -0
  437. package/dist/utils/type-guards.js +49 -0
  438. package/dist/utils/type-guards.js.map +1 -0
  439. package/dist/utils/validation.d.ts +32 -0
  440. package/dist/utils/validation.d.ts.map +1 -0
  441. package/dist/utils/validation.js +66 -0
  442. package/dist/utils/validation.js.map +1 -0
  443. package/docs/api.md +506 -0
  444. package/docs/codecs.md +382 -0
  445. package/docs/configuration.md +442 -0
  446. package/examples/README.md +100 -0
  447. package/examples/audio-encoding.ts +85 -0
  448. package/examples/hardware-decoding.ts +245 -0
  449. package/examples/hardware-encoding.ts +231 -0
  450. package/examples/image-decoding.ts +145 -0
  451. package/examples/streaming.ts +151 -0
  452. package/examples/transparent-video.ts +162 -0
  453. package/examples/video-decoding.ts +107 -0
  454. package/examples/video-encoding.ts +93 -0
  455. package/package.json +105 -0
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Demo: H.264 (AVC) encoding with WebCodecs API in Node.js
3
+ *
4
+ * This demo tests the H.264 Annex B parsing implementation.
5
+ */
6
+ import { VideoFrame, VideoEncoder, VideoDecoder, } from '../index.js';
7
+ async function main() {
8
+ console.log('H.264 WebCodecs Node.js Demo');
9
+ console.log('============================\n');
10
+ // Configuration
11
+ const width = 320;
12
+ const height = 240;
13
+ const frameCount = 30;
14
+ const framerate = 30;
15
+ const codec = 'avc1.42001E'; // H.264 Baseline Profile Level 3.0
16
+ // Check encoder support
17
+ const encoderSupport = await VideoEncoder.isConfigSupported({
18
+ codec,
19
+ width,
20
+ height,
21
+ bitrate: 1_000_000,
22
+ framerate,
23
+ });
24
+ console.log(`Encoder support for H.264: ${encoderSupport.supported}`);
25
+ // Check decoder support
26
+ const decoderSupport = await VideoDecoder.isConfigSupported({
27
+ codec,
28
+ codedWidth: width,
29
+ codedHeight: height,
30
+ });
31
+ console.log(`Decoder support for H.264: ${decoderSupport.supported}\n`);
32
+ // Storage for encoded chunks and decoded frames
33
+ const encodedChunks = [];
34
+ const decodedFrames = [];
35
+ // Create encoder
36
+ const encoder = new VideoEncoder({
37
+ output: (chunk, metadata) => {
38
+ console.log(`Encoded chunk: type=${chunk.type}, timestamp=${chunk.timestamp}, bytes=${chunk.byteLength}`);
39
+ if (metadata?.decoderConfig) {
40
+ console.log(` Decoder config available`);
41
+ }
42
+ encodedChunks.push(chunk);
43
+ },
44
+ error: (err) => {
45
+ console.error('Encoder error:', err);
46
+ },
47
+ });
48
+ // Configure encoder
49
+ encoder.configure({
50
+ codec,
51
+ width,
52
+ height,
53
+ bitrate: 1_000_000,
54
+ framerate,
55
+ });
56
+ console.log('Encoder state:', encoder.state);
57
+ console.log(`\nEncoding ${frameCount} frames...`);
58
+ // Generate and encode frames
59
+ for (let i = 0; i < frameCount; i++) {
60
+ // Create a simple gradient frame (RGBA)
61
+ const frameData = new Uint8Array(width * height * 4);
62
+ for (let y = 0; y < height; y++) {
63
+ for (let x = 0; x < width; x++) {
64
+ const idx = (y * width + x) * 4;
65
+ // Create a moving gradient pattern
66
+ frameData[idx] = (x + i * 10) % 256; // R
67
+ frameData[idx + 1] = (y + i * 5) % 256; // G
68
+ frameData[idx + 2] = (i * 8) % 256; // B
69
+ frameData[idx + 3] = 255; // A
70
+ }
71
+ }
72
+ const frame = new VideoFrame(frameData, {
73
+ format: 'RGBA',
74
+ codedWidth: width,
75
+ codedHeight: height,
76
+ timestamp: (i * 1_000_000) / framerate, // microseconds
77
+ duration: 1_000_000 / framerate,
78
+ });
79
+ encoder.encode(frame, { keyFrame: i % 30 === 0 });
80
+ frame.close();
81
+ }
82
+ // Flush encoder
83
+ console.log('Flushing encoder...');
84
+ await encoder.flush();
85
+ console.log(`Encoded ${encodedChunks.length} chunks\n`);
86
+ // Verify we got the expected number of encoded frames
87
+ if (encodedChunks.length !== frameCount) {
88
+ console.warn(`WARNING: Expected ${frameCount} chunks, got ${encodedChunks.length}`);
89
+ }
90
+ else {
91
+ console.log('SUCCESS: Got correct number of encoded chunks!');
92
+ }
93
+ // Now decode the chunks
94
+ console.log('\nCreating decoder...');
95
+ const decoder = new VideoDecoder({
96
+ output: (frame) => {
97
+ console.log(`Decoded frame: ${frame.codedWidth}x${frame.codedHeight}, timestamp=${frame.timestamp}`);
98
+ decodedFrames.push(frame);
99
+ },
100
+ error: (err) => {
101
+ console.error('Decoder error:', err);
102
+ },
103
+ });
104
+ // Configure decoder
105
+ decoder.configure({
106
+ codec,
107
+ codedWidth: width,
108
+ codedHeight: height,
109
+ });
110
+ console.log('Decoder state:', decoder.state);
111
+ console.log(`\nDecoding ${encodedChunks.length} chunks...`);
112
+ // Decode all chunks
113
+ for (const chunk of encodedChunks) {
114
+ decoder.decode(chunk);
115
+ }
116
+ // Flush decoder
117
+ console.log('Flushing decoder...');
118
+ await decoder.flush();
119
+ console.log(`\nDecoded ${decodedFrames.length} frames`);
120
+ // Verify round-trip
121
+ if (decodedFrames.length === frameCount) {
122
+ console.log('SUCCESS: Round-trip test passed! Input frames = Output frames');
123
+ }
124
+ else {
125
+ console.log(`MISMATCH: Input ${frameCount} frames, Output ${decodedFrames.length} frames`);
126
+ }
127
+ // Cleanup
128
+ encoder.close();
129
+ decoder.close();
130
+ decodedFrames.forEach((f) => f.close());
131
+ console.log('\nDemo complete!');
132
+ }
133
+ main().catch(console.error);
134
+ //# sourceMappingURL=demo-h264.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo-h264.js","sourceRoot":"","sources":["../../src/demos/demo-h264.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,UAAU,EACV,YAAY,EACZ,YAAY,GAEb,MAAM,aAAa,CAAC;AAErB,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAE9C,gBAAgB;IAChB,MAAM,KAAK,GAAG,GAAG,CAAC;IAClB,MAAM,MAAM,GAAG,GAAG,CAAC;IACnB,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,MAAM,SAAS,GAAG,EAAE,CAAC;IACrB,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,mCAAmC;IAEhE,wBAAwB;IACxB,MAAM,cAAc,GAAG,MAAM,YAAY,CAAC,iBAAiB,CAAC;QAC1D,KAAK;QACL,KAAK;QACL,MAAM;QACN,OAAO,EAAE,SAAS;QAClB,SAAS;KACV,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,8BAA8B,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC;IAEtE,wBAAwB;IACxB,MAAM,cAAc,GAAG,MAAM,YAAY,CAAC,iBAAiB,CAAC;QAC1D,KAAK;QACL,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,MAAM;KACpB,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,8BAA8B,cAAc,CAAC,SAAS,IAAI,CAAC,CAAC;IAExE,gDAAgD;IAChD,MAAM,aAAa,GAAwB,EAAE,CAAC;IAC9C,MAAM,aAAa,GAAiB,EAAE,CAAC;IAEvC,iBAAiB;IACjB,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC;QAC/B,MAAM,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;YAC1B,OAAO,CAAC,GAAG,CACT,uBAAuB,KAAK,CAAC,IAAI,eAAe,KAAK,CAAC,SAAS,WAAW,KAAK,CAAC,UAAU,EAAE,CAC7F,CAAC;YACF,IAAI,QAAQ,EAAE,aAAa,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAC5C,CAAC;YACD,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;YACb,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;QACvC,CAAC;KACF,CAAC,CAAC;IAEH,oBAAoB;IACpB,OAAO,CAAC,SAAS,CAAC;QAChB,KAAK;QACL,KAAK;QACL,MAAM;QACN,OAAO,EAAE,SAAS;QAClB,SAAS;KACV,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,YAAY,CAAC,CAAC;IAElD,6BAA6B;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,wCAAwC;QACxC,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;QACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBAChC,mCAAmC;gBACnC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAK,IAAI;gBAC7C,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAE,IAAI;gBAC7C,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAO,IAAI;gBAC9C,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAiB,IAAI;YAChD,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,SAAS,EAAE;YACtC,MAAM,EAAE,MAAM;YACd,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,MAAM;YACnB,SAAS,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,EAAE,eAAe;YACvD,QAAQ,EAAE,SAAS,GAAG,SAAS;SAChC,CAAC,CAAC;QAEH,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAClD,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;IAED,gBAAgB;IAChB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,WAAW,aAAa,CAAC,MAAM,WAAW,CAAC,CAAC;IAExD,sDAAsD;IACtD,IAAI,aAAa,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,qBAAqB,UAAU,gBAAgB,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IACtF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;IAChE,CAAC;IAED,wBAAwB;IACxB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC;QAC/B,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAChB,OAAO,CAAC,GAAG,CACT,kBAAkB,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,WAAW,eAAe,KAAK,CAAC,SAAS,EAAE,CACxF,CAAC;YACF,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;YACb,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;QACvC,CAAC;KACF,CAAC,CAAC;IAEH,oBAAoB;IACpB,OAAO,CAAC,SAAS,CAAC;QAChB,KAAK;QACL,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,MAAM;KACpB,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,cAAc,aAAa,CAAC,MAAM,YAAY,CAAC,CAAC;IAE5D,oBAAoB;IACpB,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAED,gBAAgB;IAChB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IAEtB,OAAO,CAAC,GAAG,CAAC,aAAa,aAAa,CAAC,MAAM,SAAS,CAAC,CAAC;IAExD,oBAAoB;IACpB,IAAI,aAAa,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;IAC/E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,mBAAmB,UAAU,mBAAmB,aAAa,CAAC,MAAM,SAAS,CAAC,CAAC;IAC7F,CAAC;IAED,UAAU;IACV,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAExC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Hardware Acceleration Conversion Demo
3
+ *
4
+ * Tests video conversion with VAAPI hardware acceleration enabled.
5
+ * Uses H.264 codec which is well-supported by Intel VAAPI.
6
+ */
7
+ import '../polyfill.js';
8
+ //# sourceMappingURL=demo-hwaccel-conversion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo-hwaccel-conversion.d.ts","sourceRoot":"","sources":["../../src/demos/demo-hwaccel-conversion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmBH,OAAO,gBAAgB,CAAC"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Hardware Acceleration Conversion Demo
3
+ *
4
+ * Tests video conversion with VAAPI hardware acceleration enabled.
5
+ * Uses H.264 codec which is well-supported by Intel VAAPI.
6
+ */
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ import { execSync } from 'child_process';
10
+ import { ReadableStream, WritableStream, TransformStream } from 'stream/web';
11
+ // Polyfill Web Streams
12
+ if (typeof globalThis.WritableStream === 'undefined') {
13
+ globalThis.WritableStream = WritableStream;
14
+ }
15
+ if (typeof globalThis.ReadableStream === 'undefined') {
16
+ globalThis.ReadableStream = ReadableStream;
17
+ }
18
+ if (typeof globalThis.TransformStream === 'undefined') {
19
+ globalThis.TransformStream = TransformStream;
20
+ }
21
+ // Install WebCodecs polyfill
22
+ import '../polyfill.js';
23
+ import { Input, Output, Conversion, FilePathSource, FilePathTarget, Mp4OutputFormat, ALL_FORMATS, registerEncoder, registerDecoder, } from 'mediabunny';
24
+ import { FFmpegVideoEncoder } from '../mediabunny/FFmpegVideoEncoder.js';
25
+ import { FFmpegVideoDecoder } from '../mediabunny/FFmpegVideoDecoder.js';
26
+ import { FFmpegAudioEncoder } from '../mediabunny/FFmpegAudioEncoder.js';
27
+ import { FFmpegAudioDecoder } from '../mediabunny/FFmpegAudioDecoder.js';
28
+ import { getHardwareAccelerationSummary, getBestEncoder, testEncoder } from '../HardwareAcceleration.js';
29
+ const OUTPUT_DIR = '/tmp/webcodecs-test-hwaccel';
30
+ // Custom encoder that forces hardware acceleration
31
+ class HardwareVideoEncoder extends FFmpegVideoEncoder {
32
+ async init() {
33
+ this.config.hardwareAcceleration = 'prefer-hardware';
34
+ return super.init();
35
+ }
36
+ }
37
+ // Custom encoder that forces software
38
+ class SoftwareVideoEncoder extends FFmpegVideoEncoder {
39
+ async init() {
40
+ this.config.hardwareAcceleration = 'prefer-software';
41
+ return super.init();
42
+ }
43
+ }
44
+ async function createSampleVideo() {
45
+ const outputPath = path.join(OUTPUT_DIR, 'sample.mp4');
46
+ if (!fs.existsSync(OUTPUT_DIR)) {
47
+ fs.mkdirSync(OUTPUT_DIR, { recursive: true });
48
+ }
49
+ // Create a 5-second test video with FFmpeg (longer for better timing comparison)
50
+ execSync(`ffmpeg -y -f lavfi -i "testsrc=duration=5:size=1280x720:rate=30" -f lavfi -i "sine=frequency=440:duration=5" -c:v libx264 -preset ultrafast -c:a aac -pix_fmt yuv420p "${outputPath}" 2>/dev/null`);
51
+ return outputPath;
52
+ }
53
+ function getFileInfo(filePath) {
54
+ const probe = execSync(`ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "${filePath}" 2>/dev/null`).toString().trim();
55
+ const size = fs.statSync(filePath).size;
56
+ return {
57
+ duration: parseFloat(probe),
58
+ size,
59
+ };
60
+ }
61
+ async function main() {
62
+ console.log('╔═══════════════════════════════════════════════════════════════╗');
63
+ console.log('║ Hardware vs Software Encoding Comparison Demo ║');
64
+ console.log('╚═══════════════════════════════════════════════════════════════╝\n');
65
+ // Show hardware acceleration info
66
+ const summary = await getHardwareAccelerationSummary();
67
+ console.log(summary);
68
+ console.log('');
69
+ // Check what encoders will be used and test them
70
+ console.log('Testing encoder availability:');
71
+ for (const codec of ['h264', 'hevc', 'vp8', 'vp9']) {
72
+ const best = await getBestEncoder(codec, 'prefer-hardware');
73
+ const works = best.isHardware ? await testEncoder(best.encoder) : true;
74
+ const status = best.isHardware ? (works ? '✓ HW' : '✗ HW (failed)') : '○ SW';
75
+ console.log(` ${codec.toUpperCase()}: ${status} ${best.encoder}`);
76
+ }
77
+ console.log('');
78
+ // Create sample video (1280x720, 5 seconds)
79
+ console.log('Creating sample video (1280x720, 5 seconds)...');
80
+ const inputPath = await createSampleVideo();
81
+ const inputInfo = getFileInfo(inputPath);
82
+ console.log(` Input: ${inputPath} (${(inputInfo.size / 1024).toFixed(1)} KB)\n`);
83
+ // Register audio encoders/decoders (these don't have HW acceleration)
84
+ registerEncoder(FFmpegAudioEncoder);
85
+ registerDecoder(FFmpegAudioDecoder);
86
+ registerDecoder(FFmpegVideoDecoder);
87
+ // Test with hardware acceleration (H.264 VAAPI)
88
+ console.log('=== Converting with Hardware Acceleration (H.264 VAAPI) ===\n');
89
+ registerEncoder(HardwareVideoEncoder);
90
+ try {
91
+ const hwOutput = path.join(OUTPUT_DIR, 'output_hardware.mp4');
92
+ const startTime = Date.now();
93
+ const input = new Input({
94
+ formats: ALL_FORMATS,
95
+ source: new FilePathSource(inputPath),
96
+ });
97
+ // MP4 with H.264 - well supported by VAAPI
98
+ const output = new Output({
99
+ format: new Mp4OutputFormat(),
100
+ target: new FilePathTarget(hwOutput),
101
+ });
102
+ const conversion = await Conversion.init({
103
+ input,
104
+ output,
105
+ showWarnings: false,
106
+ });
107
+ await conversion.execute();
108
+ const endTime = Date.now();
109
+ const info = getFileInfo(hwOutput);
110
+ console.log(` Output: ${hwOutput}`);
111
+ console.log(` Duration: ${info.duration.toFixed(2)}s`);
112
+ console.log(` File size: ${(info.size / 1024).toFixed(1)} KB`);
113
+ console.log(` Encoding time: ${endTime - startTime}ms`);
114
+ }
115
+ catch (err) {
116
+ console.log(` Error: ${err.message}`);
117
+ }
118
+ console.log('');
119
+ // Test with software encoding (H.264 libx264)
120
+ console.log('=== Converting with Software Encoding (H.264 libx264) ===\n');
121
+ registerEncoder(SoftwareVideoEncoder);
122
+ try {
123
+ const swOutput = path.join(OUTPUT_DIR, 'output_software.mp4');
124
+ const startTime = Date.now();
125
+ const input = new Input({
126
+ formats: ALL_FORMATS,
127
+ source: new FilePathSource(inputPath),
128
+ });
129
+ const output = new Output({
130
+ format: new Mp4OutputFormat(),
131
+ target: new FilePathTarget(swOutput),
132
+ });
133
+ const conversion = await Conversion.init({
134
+ input,
135
+ output,
136
+ showWarnings: false,
137
+ });
138
+ await conversion.execute();
139
+ const endTime = Date.now();
140
+ const info = getFileInfo(swOutput);
141
+ console.log(` Output: ${swOutput}`);
142
+ console.log(` Duration: ${info.duration.toFixed(2)}s`);
143
+ console.log(` File size: ${(info.size / 1024).toFixed(1)} KB`);
144
+ console.log(` Encoding time: ${endTime - startTime}ms`);
145
+ }
146
+ catch (err) {
147
+ console.log(` Error: ${err.message}`);
148
+ }
149
+ console.log('\n╔═══════════════════════════════════════════════════════════════╗');
150
+ console.log('║ Demo Complete! ║');
151
+ console.log('╚═══════════════════════════════════════════════════════════════╝\n');
152
+ // Summary
153
+ console.log('Note: Intel VAAPI typically supports:');
154
+ console.log(' - H.264 encoding ✓');
155
+ console.log(' - HEVC encoding ✓');
156
+ console.log(' - VP8 encoding ✓');
157
+ console.log(' - VP9 decoding only (no encoding)');
158
+ console.log('');
159
+ }
160
+ main().catch(console.error);
161
+ //# sourceMappingURL=demo-hwaccel-conversion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo-hwaccel-conversion.js","sourceRoot":"","sources":["../../src/demos/demo-hwaccel-conversion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7E,uBAAuB;AACvB,IAAI,OAAO,UAAU,CAAC,cAAc,KAAK,WAAW,EAAE,CAAC;IACpD,UAAkB,CAAC,cAAc,GAAG,cAAc,CAAC;AACtD,CAAC;AACD,IAAI,OAAO,UAAU,CAAC,cAAc,KAAK,WAAW,EAAE,CAAC;IACpD,UAAkB,CAAC,cAAc,GAAG,cAAc,CAAC;AACtD,CAAC;AACD,IAAI,OAAO,UAAU,CAAC,eAAe,KAAK,WAAW,EAAE,CAAC;IACrD,UAAkB,CAAC,eAAe,GAAG,eAAe,CAAC;AACxD,CAAC;AAED,6BAA6B;AAC7B,OAAO,gBAAgB,CAAC;AAExB,OAAO,EACL,KAAK,EACL,MAAM,EACN,UAAU,EACV,cAAc,EACd,cAAc,EACd,eAAe,EACf,WAAW,EACX,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAEzE,OAAO,EAAE,8BAA8B,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzG,MAAM,UAAU,GAAG,6BAA6B,CAAC;AAEjD,mDAAmD;AACnD,MAAM,oBAAqB,SAAQ,kBAAkB;IACnD,KAAK,CAAC,IAAI;QACP,IAAI,CAAC,MAAc,CAAC,oBAAoB,GAAG,iBAAiB,CAAC;QAC9D,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;CACF;AAED,sCAAsC;AACtC,MAAM,oBAAqB,SAAQ,kBAAkB;IACnD,KAAK,CAAC,IAAI;QACP,IAAI,CAAC,MAAc,CAAC,oBAAoB,GAAG,iBAAiB,CAAC;QAC9D,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;CACF;AAED,KAAK,UAAU,iBAAiB;IAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAEvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,iFAAiF;IACjF,QAAQ,CAAC,0KAA0K,UAAU,eAAe,CAAC,CAAC;IAE9M,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB;IACnC,MAAM,KAAK,GAAG,QAAQ,CACpB,0FAA0F,QAAQ,eAAe,CAClH,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;IACpB,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;IACxC,OAAO;QACL,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC;QAC3B,IAAI;KACL,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;IAEnF,kCAAkC;IAClC,MAAM,OAAO,GAAG,MAAM,8BAA8B,EAAE,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACrB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,iDAAiD;IACjD,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAU,EAAE,CAAC;QAC5D,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvE,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,4CAA4C;IAC5C,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAC5C,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAElF,sEAAsE;IACtE,eAAe,CAAC,kBAAkB,CAAC,CAAC;IACpC,eAAe,CAAC,kBAAkB,CAAC,CAAC;IACpC,eAAe,CAAC,kBAAkB,CAAC,CAAC;IAEpC,gDAAgD;IAChD,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;IAC7E,eAAe,CAAC,oBAAoB,CAAC,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;YACtB,OAAO,EAAE,WAAW;YACpB,MAAM,EAAE,IAAI,cAAc,CAAC,SAAS,CAAC;SACtC,CAAC,CAAC;QAEH,2CAA2C;QAC3C,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;YACxB,MAAM,EAAE,IAAI,eAAe,EAAE;YAC7B,MAAM,EAAE,IAAI,cAAc,CAAC,QAAQ,CAAC;SACrC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC;YACvC,KAAK;YACL,MAAM;YACN,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;QAEH,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEnC,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,GAAG,SAAS,IAAI,CAAC,CAAC;IAC3D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,YAAa,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,8CAA8C;IAC9C,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;IAC3E,eAAe,CAAC,oBAAoB,CAAC,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;YACtB,OAAO,EAAE,WAAW;YACpB,MAAM,EAAE,IAAI,cAAc,CAAC,SAAS,CAAC;SACtC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;YACxB,MAAM,EAAE,IAAI,eAAe,EAAE;YAC7B,MAAM,EAAE,IAAI,cAAc,CAAC,QAAQ,CAAC;SACrC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC;YACvC,KAAK;YACL,MAAM;YACN,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;QAEH,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEnC,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,GAAG,SAAS,IAAI,CAAC,CAAC;IAC3D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,YAAa,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;IAEnF,UAAU;IACV,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Hardware Acceleration Demo
3
+ *
4
+ * Demonstrates hardware-accelerated video encoding using the WebCodecs polyfill.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=demo-hwaccel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo-hwaccel.d.ts","sourceRoot":"","sources":["../../src/demos/demo-hwaccel.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Hardware Acceleration Demo
3
+ *
4
+ * Demonstrates hardware-accelerated video encoding using the WebCodecs polyfill.
5
+ */
6
+ import { detectHardwareAcceleration, getHardwareAccelerationSummary, getBestEncoder, getBestDecoder, testEncoder, } from '../HardwareAcceleration.js';
7
+ async function main() {
8
+ console.log('╔═══════════════════════════════════════════════════════════════╗');
9
+ console.log('║ Hardware Acceleration Detection Demo ║');
10
+ console.log('╚═══════════════════════════════════════════════════════════════╝\n');
11
+ // Get detailed summary
12
+ const summary = await getHardwareAccelerationSummary();
13
+ console.log(summary);
14
+ console.log('');
15
+ // Get capabilities
16
+ const capabilities = await detectHardwareAcceleration();
17
+ // Test best encoders for each codec
18
+ console.log('\n=== Best Available Encoders ===\n');
19
+ const codecs = ['h264', 'hevc', 'vp8', 'vp9', 'av1'];
20
+ for (const codec of codecs) {
21
+ const best = await getBestEncoder(codec, 'prefer-hardware');
22
+ const status = best.isHardware ? '✓ HW' : '○ SW';
23
+ console.log(` ${codec.toUpperCase().padEnd(5)} : ${status} ${best.encoder}`);
24
+ // Test if encoder actually works (for hardware encoders)
25
+ if (best.isHardware) {
26
+ const works = await testEncoder(best.encoder);
27
+ if (!works) {
28
+ console.log(` ⚠ (encoder reported available but test failed)`);
29
+ }
30
+ }
31
+ }
32
+ // Test best decoders
33
+ console.log('\n=== Best Available Decoders ===\n');
34
+ for (const codec of codecs) {
35
+ const best = await getBestDecoder(codec, 'prefer-hardware');
36
+ const status = best.isHardware ? '✓ HW' : '○ SW';
37
+ const name = best.decoder || best.hwaccel || 'default';
38
+ console.log(` ${codec.toUpperCase().padEnd(5)} : ${status} ${name}`);
39
+ }
40
+ // Show software fallback comparison
41
+ console.log('\n=== Software Encoder Fallbacks ===\n');
42
+ for (const codec of codecs) {
43
+ const best = await getBestEncoder(codec, 'prefer-software');
44
+ console.log(` ${codec.toUpperCase().padEnd(5)} : ${best.encoder}`);
45
+ }
46
+ console.log('\n╔═══════════════════════════════════════════════════════════════╗');
47
+ console.log('║ Demo Complete! ║');
48
+ console.log('╚═══════════════════════════════════════════════════════════════╝\n');
49
+ }
50
+ main().catch(console.error);
51
+ //# sourceMappingURL=demo-hwaccel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo-hwaccel.js","sourceRoot":"","sources":["../../src/demos/demo-hwaccel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Demo: ImageDecoder with WebCodecs API
3
+ *
4
+ * This demo shows how to:
5
+ * 1. Decode various image formats (PNG, JPEG, WebP, GIF)
6
+ * 2. Access frame data as VideoFrame
7
+ * 3. Handle animated images (GIF, APNG, WebP)
8
+ * 4. Access frame timing/duration information
9
+ * 5. Handle loop count for animations
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=demo-image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo-image.d.ts","sourceRoot":"","sources":["../../src/demos/demo-image.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Demo: ImageDecoder with WebCodecs API
3
+ *
4
+ * This demo shows how to:
5
+ * 1. Decode various image formats (PNG, JPEG, WebP, GIF)
6
+ * 2. Access frame data as VideoFrame
7
+ * 3. Handle animated images (GIF, APNG, WebP)
8
+ * 4. Access frame timing/duration information
9
+ * 5. Handle loop count for animations
10
+ */
11
+ import * as fs from 'fs';
12
+ import * as path from 'path';
13
+ import { ImageDecoder } from '../index.js';
14
+ // Create test images using FFmpeg
15
+ async function createTestImages() {
16
+ const { execSync } = await import('child_process');
17
+ const testDir = '/tmp/webcodecs-test-images';
18
+ // Create test directory
19
+ if (!fs.existsSync(testDir)) {
20
+ fs.mkdirSync(testDir, { recursive: true });
21
+ }
22
+ console.log('Creating test images...\n');
23
+ // Create a simple PNG (red square)
24
+ execSync(`ffmpeg -y -f lavfi -i color=c=red:size=100x100:d=1 -frames:v 1 ${testDir}/test.png 2>/dev/null`);
25
+ console.log(' Created test.png (100x100 red square)');
26
+ // Create a JPEG (blue gradient)
27
+ execSync(`ffmpeg -y -f lavfi -i "gradients=size=200x150:c0=blue:c1=white:d=1" -frames:v 1 ${testDir}/test.jpg 2>/dev/null`);
28
+ console.log(' Created test.jpg (200x150 blue gradient)');
29
+ // Create a WebP (green circle on transparent)
30
+ execSync(`ffmpeg -y -f lavfi -i color=c=green:size=80x80:d=1 -frames:v 1 ${testDir}/test.webp 2>/dev/null`);
31
+ console.log(' Created test.webp (80x80 green square)');
32
+ // Create an animated GIF (3 frames, cycling colors)
33
+ execSync(`ffmpeg -y -f lavfi -i "color=c=red:size=50x50:d=0.5,format=rgb24[r];color=c=green:size=50x50:d=0.5,format=rgb24[g];color=c=blue:size=50x50:d=0.5,format=rgb24[b];[r][g][b]concat=n=3:v=1:a=0" -frames:v 3 ${testDir}/test.gif 2>/dev/null`);
34
+ console.log(' Created test.gif (50x50 animated, 3 frames)');
35
+ // Create a BMP
36
+ execSync(`ffmpeg -y -f lavfi -i color=c=yellow:size=64x64:d=1 -frames:v 1 ${testDir}/test.bmp 2>/dev/null`);
37
+ console.log(' Created test.bmp (64x64 yellow square)');
38
+ console.log('');
39
+ }
40
+ async function testImageDecoder(filePath, mimeType) {
41
+ const fileName = path.basename(filePath);
42
+ console.log(`\nTesting: ${fileName} (${mimeType})`);
43
+ console.log('-'.repeat(40));
44
+ // Read file
45
+ const data = fs.readFileSync(filePath);
46
+ console.log(` File size: ${data.length} bytes`);
47
+ // Check support
48
+ const supported = await ImageDecoder.isTypeSupported(mimeType);
49
+ console.log(` Type supported: ${supported}`);
50
+ if (!supported) {
51
+ console.log(' Skipping unsupported type');
52
+ return;
53
+ }
54
+ // Create decoder
55
+ // Note: Pass the Buffer directly (as ArrayBufferView), not data.buffer
56
+ // because Buffer.buffer can include extra data from Node's buffer pool
57
+ const decoder = new ImageDecoder({
58
+ type: mimeType,
59
+ data: data,
60
+ });
61
+ // Wait for completion
62
+ await decoder.completed;
63
+ console.log(` Decoder complete: ${decoder.complete}`);
64
+ // Get track info
65
+ await decoder.tracks.ready;
66
+ const track = decoder.tracks.selectedTrack;
67
+ if (track) {
68
+ console.log(` Track info:`);
69
+ console.log(` - Animated: ${track.animated}`);
70
+ console.log(` - Frame count: ${track.frameCount}`);
71
+ console.log(` - Repetition count: ${track.repetitionCount === Infinity ? 'infinite' : track.repetitionCount}`);
72
+ }
73
+ // Decode first frame
74
+ const result = await decoder.decode({ frameIndex: 0 });
75
+ const frame = result.image;
76
+ console.log(` First frame:`);
77
+ console.log(` - Dimensions: ${frame.codedWidth}x${frame.codedHeight}`);
78
+ console.log(` - Format: ${frame.format}`);
79
+ console.log(` - Timestamp: ${frame.timestamp}µs`);
80
+ console.log(` - Duration: ${frame.duration}µs`);
81
+ // If animated, decode all frames and show timing info
82
+ if (track && track.frameCount > 1) {
83
+ console.log(` Decoding all ${track.frameCount} frames with timing:`);
84
+ let totalDuration = 0;
85
+ const framesToShow = Math.min(track.frameCount, 10);
86
+ for (let i = 0; i < framesToShow; i++) {
87
+ const frameResult = await decoder.decode({ frameIndex: i });
88
+ const durationMs = (frameResult.image.duration || 0) / 1000;
89
+ const timestampMs = frameResult.image.timestamp / 1000;
90
+ totalDuration += frameResult.image.duration || 0;
91
+ console.log(` Frame ${i.toString().padStart(2)}: ` +
92
+ `${frameResult.image.codedWidth}x${frameResult.image.codedHeight}, ` +
93
+ `ts=${timestampMs.toFixed(1).padStart(7)}ms, ` +
94
+ `dur=${durationMs.toFixed(1).padStart(6)}ms`);
95
+ frameResult.image.close();
96
+ }
97
+ if (track.frameCount > framesToShow) {
98
+ console.log(` ... and ${track.frameCount - framesToShow} more frames`);
99
+ }
100
+ console.log(` Total animation duration: ${(totalDuration / 1000).toFixed(1)}ms`);
101
+ }
102
+ // Cleanup
103
+ frame.close();
104
+ decoder.close();
105
+ console.log(' SUCCESS');
106
+ }
107
+ async function main() {
108
+ console.log('WebCodecs ImageDecoder Demo');
109
+ console.log('===========================\n');
110
+ // Create test images
111
+ await createTestImages();
112
+ const testDir = '/tmp/webcodecs-test-images';
113
+ // Test each format
114
+ const testCases = [
115
+ { file: 'test.png', type: 'image/png' },
116
+ { file: 'test.jpg', type: 'image/jpeg' },
117
+ { file: 'test.webp', type: 'image/webp' },
118
+ { file: 'test.gif', type: 'image/gif' },
119
+ { file: 'animated_multi.gif', type: 'image/gif' }, // Multi-frame animated GIF
120
+ { file: 'test.bmp', type: 'image/bmp' },
121
+ ];
122
+ for (const { file, type } of testCases) {
123
+ try {
124
+ await testImageDecoder(path.join(testDir, file), type);
125
+ }
126
+ catch (error) {
127
+ console.log(` ERROR: ${error.message}`);
128
+ }
129
+ }
130
+ // Test with ReadableStream (Node.js 18+ has web streams)
131
+ console.log('\n\nTesting with ReadableStream:');
132
+ console.log('-'.repeat(40));
133
+ // Check if ReadableStream is available (Node.js 18+)
134
+ if (typeof globalThis.ReadableStream !== 'undefined') {
135
+ const pngData = fs.readFileSync(path.join(testDir, 'test.png'));
136
+ // Create a ReadableStream from the buffer
137
+ const stream = new globalThis.ReadableStream({
138
+ start(controller) {
139
+ controller.enqueue(new Uint8Array(pngData));
140
+ controller.close();
141
+ },
142
+ });
143
+ const streamDecoder = new ImageDecoder({
144
+ type: 'image/png',
145
+ data: stream,
146
+ });
147
+ await streamDecoder.completed;
148
+ const streamResult = await streamDecoder.decode();
149
+ console.log(` Stream decode: ${streamResult.image.codedWidth}x${streamResult.image.codedHeight}`);
150
+ streamResult.image.close();
151
+ streamDecoder.close();
152
+ console.log(' SUCCESS');
153
+ }
154
+ else {
155
+ console.log(' ReadableStream not available (requires Node.js 18+)');
156
+ console.log(' SKIPPED');
157
+ }
158
+ // Test with desiredWidth/desiredHeight (scaling)
159
+ console.log('\n\nTesting image scaling:');
160
+ console.log('-'.repeat(40));
161
+ const jpgData = fs.readFileSync(path.join(testDir, 'test.jpg'));
162
+ const scaledDecoder = new ImageDecoder({
163
+ type: 'image/jpeg',
164
+ data: jpgData,
165
+ desiredWidth: 100,
166
+ desiredHeight: 75,
167
+ });
168
+ await scaledDecoder.completed;
169
+ const scaledResult = await scaledDecoder.decode();
170
+ console.log(` Original: 200x150`);
171
+ console.log(` Scaled: ${scaledResult.image.codedWidth}x${scaledResult.image.codedHeight}`);
172
+ scaledResult.image.close();
173
+ scaledDecoder.close();
174
+ console.log(' SUCCESS');
175
+ console.log('\n\nDemo complete!');
176
+ }
177
+ main().catch(console.error);
178
+ //# sourceMappingURL=demo-image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo-image.js","sourceRoot":"","sources":["../../src/demos/demo-image.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Demo: Mediabunny + FFmpeg Backend
3
+ *
4
+ * Shows how to use Mediabunny with FFmpeg for video encoding/decoding in Node.js.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=demo-mediabunny.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo-mediabunny.d.ts","sourceRoot":"","sources":["../../src/demos/demo-mediabunny.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}