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,66 @@
1
+ /**
2
+ * Input validation utilities
3
+ */
4
+ import { DOMException } from '../types/index.js';
5
+ /**
6
+ * Validate that a value is a positive integer
7
+ */
8
+ export function validatePositiveInteger(value, name) {
9
+ if (typeof value !== 'number' || !Number.isInteger(value) || value <= 0) {
10
+ throw new TypeError(`${name} must be a positive integer`);
11
+ }
12
+ return value;
13
+ }
14
+ /**
15
+ * Validate that a value is a non-negative integer
16
+ */
17
+ export function validateNonNegativeInteger(value, name) {
18
+ if (typeof value !== 'number' || !Number.isInteger(value) || value < 0) {
19
+ throw new TypeError(`${name} must be a non-negative integer`);
20
+ }
21
+ return value;
22
+ }
23
+ /**
24
+ * Validate that a value is a finite number
25
+ */
26
+ export function validateFiniteNumber(value, name) {
27
+ if (typeof value !== 'number' || !Number.isFinite(value)) {
28
+ throw new TypeError(`${name} must be a finite number`);
29
+ }
30
+ return value;
31
+ }
32
+ /**
33
+ * Validate that an object is not null or undefined
34
+ */
35
+ export function validateRequired(value, name) {
36
+ if (value === null || value === undefined) {
37
+ throw new TypeError(`${name} is required`);
38
+ }
39
+ return value;
40
+ }
41
+ /**
42
+ * Validate that a string is not empty
43
+ */
44
+ export function validateNonEmptyString(value, name) {
45
+ if (typeof value !== 'string' || value.length === 0) {
46
+ throw new TypeError(`${name} must be a non-empty string`);
47
+ }
48
+ return value;
49
+ }
50
+ /**
51
+ * Validate codec state is configured
52
+ */
53
+ export function validateConfigured(state, operation) {
54
+ if (state !== 'configured') {
55
+ throw new DOMException(`Cannot ${operation} on ${state} codec`, 'InvalidStateError');
56
+ }
57
+ }
58
+ /**
59
+ * Validate codec is not closed
60
+ */
61
+ export function validateNotClosed(state) {
62
+ if (state === 'closed') {
63
+ throw new DOMException('Codec is closed', 'InvalidStateError');
64
+ }
65
+ }
66
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAc,EAAE,IAAY;IAClE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,6BAA6B,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAc,EAAE,IAAY;IACrE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACvE,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,iCAAiC,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAc,EAAE,IAAY;IAC/D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,0BAA0B,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAI,KAA2B,EAAE,IAAY;IAC3E,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,cAAc,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAc,EAAE,IAAY;IACjE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,6BAA6B,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa,EAAE,SAAiB;IACjE,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;QAC3B,MAAM,IAAI,YAAY,CACpB,UAAU,SAAS,OAAO,KAAK,QAAQ,EACvC,mBAAmB,CACpB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,MAAM,IAAI,YAAY,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;IACjE,CAAC;AACH,CAAC"}
package/docs/api.md ADDED
@@ -0,0 +1,506 @@
1
+ # API Reference
2
+
3
+ This document provides detailed API documentation for webcodecs-node.
4
+
5
+ ## Table of Contents
6
+
7
+ - [VideoEncoder](#videoencoder)
8
+ - [VideoDecoder](#videodecoder)
9
+ - [AudioEncoder](#audioencoder)
10
+ - [AudioDecoder](#audiodecoder)
11
+ - [ImageDecoder](#imagedecoder)
12
+ - [VideoFrame](#videoframe)
13
+ - [AudioData](#audiodata)
14
+ - [EncodedVideoChunk](#encodedvideochunk)
15
+ - [EncodedAudioChunk](#encodedaudiochunk)
16
+ - [MediaCapabilities](#mediacapabilities)
17
+
18
+ ---
19
+
20
+ ## VideoEncoder
21
+
22
+ Encodes raw video frames into compressed video chunks.
23
+
24
+ ### Constructor
25
+
26
+ ```typescript
27
+ new VideoEncoder(init: VideoEncoderInit)
28
+ ```
29
+
30
+ **VideoEncoderInit:**
31
+ - `output: (chunk: EncodedVideoChunk, metadata?: VideoEncoderOutputMetadata) => void` - Called for each encoded chunk
32
+ - `error: (error: Error) => void` - Called on encoding errors
33
+
34
+ ### Static Methods
35
+
36
+ #### `isConfigSupported(config: VideoEncoderConfig): Promise<VideoEncoderSupport>`
37
+
38
+ Check if a configuration is supported before encoding.
39
+
40
+ ```typescript
41
+ const support = await VideoEncoder.isConfigSupported({
42
+ codec: 'avc1.42001E',
43
+ width: 1920,
44
+ height: 1080,
45
+ });
46
+ console.log(support.supported); // true or false
47
+ ```
48
+
49
+ ### Instance Methods
50
+
51
+ #### `configure(config: VideoEncoderConfig): void`
52
+
53
+ Configure the encoder. Must be called before encoding.
54
+
55
+ **VideoEncoderConfig:**
56
+ | Property | Type | Required | Description |
57
+ |----------|------|----------|-------------|
58
+ | `codec` | string | Yes | Codec string (e.g., 'avc1.42001E', 'vp9') |
59
+ | `width` | number | Yes | Frame width in pixels |
60
+ | `height` | number | Yes | Frame height in pixels |
61
+ | `bitrate` | number | No | Target bitrate in bits/second |
62
+ | `framerate` | number | No | Target framerate |
63
+ | `bitrateMode` | 'constant' \| 'variable' \| 'quantizer' | No | Bitrate control mode |
64
+ | `alpha` | 'discard' \| 'keep' | No | Alpha channel handling |
65
+ | `latencyMode` | 'quality' \| 'realtime' | No | Latency vs quality tradeoff |
66
+ | `hardwareAcceleration` | 'no-preference' \| 'prefer-hardware' \| 'prefer-software' | No | Hardware acceleration preference |
67
+
68
+ #### `encode(frame: VideoFrame, options?: VideoEncoderEncodeOptions): void`
69
+
70
+ Encode a video frame.
71
+
72
+ **VideoEncoderEncodeOptions:**
73
+ - `keyFrame?: boolean` - Force this frame to be a keyframe
74
+
75
+ #### `flush(): Promise<void>`
76
+
77
+ Flush all pending frames and wait for output.
78
+
79
+ #### `reset(): void`
80
+
81
+ Reset encoder to unconfigured state.
82
+
83
+ #### `close(): void`
84
+
85
+ Close the encoder and release resources.
86
+
87
+ ### Properties
88
+
89
+ - `state: 'unconfigured' | 'configured' | 'closed'` - Current encoder state
90
+ - `encodeQueueSize: number` - Number of frames pending encoding
91
+
92
+ ---
93
+
94
+ ## VideoDecoder
95
+
96
+ Decodes compressed video chunks into raw video frames.
97
+
98
+ ### Constructor
99
+
100
+ ```typescript
101
+ new VideoDecoder(init: VideoDecoderInit)
102
+ ```
103
+
104
+ **VideoDecoderInit:**
105
+ - `output: (frame: VideoFrame) => void` - Called for each decoded frame
106
+ - `error: (error: Error) => void` - Called on decoding errors
107
+
108
+ ### Static Methods
109
+
110
+ #### `isConfigSupported(config: VideoDecoderConfig): Promise<VideoDecoderSupport>`
111
+
112
+ Check if a configuration is supported.
113
+
114
+ ### Instance Methods
115
+
116
+ #### `configure(config: VideoDecoderConfig): void`
117
+
118
+ **VideoDecoderConfig:**
119
+ | Property | Type | Required | Description |
120
+ |----------|------|----------|-------------|
121
+ | `codec` | string | Yes | Codec string |
122
+ | `codedWidth` | number | No | Coded frame width |
123
+ | `codedHeight` | number | No | Coded frame height |
124
+ | `description` | BufferSource | No | Codec-specific data (e.g., SPS/PPS for H.264) |
125
+
126
+ #### `decode(chunk: EncodedVideoChunk): void`
127
+
128
+ Decode an encoded video chunk.
129
+
130
+ #### `flush(): Promise<void>`
131
+
132
+ Flush all pending chunks.
133
+
134
+ #### `reset(): void`
135
+
136
+ Reset decoder to unconfigured state.
137
+
138
+ #### `close(): void`
139
+
140
+ Close the decoder.
141
+
142
+ ### Properties
143
+
144
+ - `state: 'unconfigured' | 'configured' | 'closed'`
145
+ - `decodeQueueSize: number`
146
+
147
+ ---
148
+
149
+ ## AudioEncoder
150
+
151
+ Encodes raw audio data into compressed audio chunks.
152
+
153
+ ### Constructor
154
+
155
+ ```typescript
156
+ new AudioEncoder(init: AudioEncoderInit)
157
+ ```
158
+
159
+ ### Static Methods
160
+
161
+ #### `isConfigSupported(config: AudioEncoderConfig): Promise<AudioEncoderSupport>`
162
+
163
+ ### Instance Methods
164
+
165
+ #### `configure(config: AudioEncoderConfig): void`
166
+
167
+ **AudioEncoderConfig:**
168
+ | Property | Type | Required | Description |
169
+ |----------|------|----------|-------------|
170
+ | `codec` | string | Yes | Codec string (e.g., 'opus', 'mp4a.40.2') |
171
+ | `sampleRate` | number | Yes | Sample rate in Hz |
172
+ | `numberOfChannels` | number | Yes | Number of audio channels |
173
+ | `bitrate` | number | No | Target bitrate |
174
+
175
+ #### `encode(data: AudioData): void`
176
+
177
+ Encode audio data.
178
+
179
+ #### `flush(): Promise<void>`
180
+
181
+ #### `reset(): void`
182
+
183
+ #### `close(): void`
184
+
185
+ ---
186
+
187
+ ## AudioDecoder
188
+
189
+ Decodes compressed audio chunks into raw audio data.
190
+
191
+ ### Constructor
192
+
193
+ ```typescript
194
+ new AudioDecoder(init: AudioDecoderInit)
195
+ ```
196
+
197
+ ### Instance Methods
198
+
199
+ #### `configure(config: AudioDecoderConfig): void`
200
+
201
+ **AudioDecoderConfig:**
202
+ | Property | Type | Required | Description |
203
+ |----------|------|----------|-------------|
204
+ | `codec` | string | Yes | Codec string |
205
+ | `sampleRate` | number | Yes | Sample rate in Hz |
206
+ | `numberOfChannels` | number | Yes | Number of channels |
207
+ | `description` | BufferSource | No | Codec-specific data |
208
+
209
+ #### `decode(chunk: EncodedAudioChunk): void`
210
+
211
+ #### `flush(): Promise<void>`
212
+
213
+ #### `reset(): void`
214
+
215
+ #### `close(): void`
216
+
217
+ ---
218
+
219
+ ## ImageDecoder
220
+
221
+ Decodes images (including animated) into VideoFrames.
222
+
223
+ ### Constructor
224
+
225
+ ```typescript
226
+ new ImageDecoder(init: ImageDecoderInit)
227
+ ```
228
+
229
+ **ImageDecoderInit:**
230
+ | Property | Type | Required | Description |
231
+ |----------|------|----------|-------------|
232
+ | `type` | string | Yes | MIME type (e.g., 'image/png') |
233
+ | `data` | BufferSource \| ReadableStream | Yes | Image data |
234
+ | `transfer` | ArrayBuffer[] | No | Buffers to transfer ownership |
235
+ | `colorSpaceConversion` | 'none' \| 'default' | No | Color space handling |
236
+ | `desiredWidth` | number | No | Target width |
237
+ | `desiredHeight` | number | No | Target height |
238
+ | `preferAnimation` | boolean | No | Prefer animated track |
239
+ | `premultiplyAlpha` | 'none' \| 'premultiply' \| 'default' | No | Alpha handling |
240
+
241
+ ### Static Methods
242
+
243
+ #### `isTypeSupported(type: string): Promise<boolean>`
244
+
245
+ Check if a MIME type is supported.
246
+
247
+ ```typescript
248
+ const supported = await ImageDecoder.isTypeSupported('image/webp');
249
+ ```
250
+
251
+ ### Instance Methods
252
+
253
+ #### `decode(options?: ImageDecodeOptions): Promise<ImageDecodeResult>`
254
+
255
+ Decode a frame from the image.
256
+
257
+ **ImageDecodeOptions:**
258
+ - `frameIndex?: number` - Frame index to decode (for animated images)
259
+ - `completeFramesOnly?: boolean` - Only return complete frames
260
+
261
+ **ImageDecodeResult:**
262
+ - `image: VideoFrame` - The decoded frame
263
+ - `complete: boolean` - Whether decoding is complete
264
+
265
+ #### `close(): void`
266
+
267
+ Close the decoder.
268
+
269
+ ### Properties
270
+
271
+ - `type: string` - MIME type
272
+ - `complete: boolean` - Whether all data is buffered
273
+ - `completed: Promise<void>` - Resolves when ready to decode
274
+ - `tracks: ImageTrackList` - Track information
275
+
276
+ ### ImageTrackList
277
+
278
+ - `ready: Promise<void>` - Resolves when tracks are parsed
279
+ - `length: number` - Number of tracks
280
+ - `selectedIndex: number` - Currently selected track
281
+ - `selectedTrack: ImageTrack | null` - Selected track object
282
+
283
+ ### ImageTrack
284
+
285
+ - `animated: boolean` - Whether track is animated
286
+ - `frameCount: number` - Number of frames
287
+ - `repetitionCount: number` - Loop count (Infinity = forever)
288
+ - `selected: boolean` - Whether track is selected
289
+
290
+ ---
291
+
292
+ ## VideoFrame
293
+
294
+ Represents a single video frame with raw pixel data.
295
+
296
+ ### Constructor
297
+
298
+ ```typescript
299
+ new VideoFrame(data: BufferSource, init: VideoFrameBufferInit)
300
+ ```
301
+
302
+ **VideoFrameBufferInit:**
303
+ | Property | Type | Required | Description |
304
+ |----------|------|----------|-------------|
305
+ | `format` | VideoPixelFormat | Yes | Pixel format |
306
+ | `codedWidth` | number | Yes | Frame width |
307
+ | `codedHeight` | number | Yes | Frame height |
308
+ | `timestamp` | number | Yes | Timestamp in microseconds |
309
+ | `duration` | number | No | Duration in microseconds |
310
+ | `displayWidth` | number | No | Display width |
311
+ | `displayHeight` | number | No | Display height |
312
+
313
+ **Supported VideoPixelFormat values:**
314
+ - `'I420'` - YUV 4:2:0 planar
315
+ - `'I420A'` - YUV 4:2:0 planar with alpha
316
+ - `'I422'` - YUV 4:2:2 planar
317
+ - `'I444'` - YUV 4:4:4 planar
318
+ - `'NV12'` - YUV 4:2:0 semi-planar
319
+ - `'RGBA'` - 8-bit RGBA
320
+ - `'RGBX'` - 8-bit RGB (alpha ignored)
321
+ - `'BGRA'` - 8-bit BGRA
322
+ - `'BGRX'` - 8-bit BGR (alpha ignored)
323
+
324
+ ### Instance Methods
325
+
326
+ #### `allocationSize(options?: VideoFrameCopyToOptions): number`
327
+
328
+ Get buffer size needed for copyTo.
329
+
330
+ #### `copyTo(destination: BufferSource, options?: VideoFrameCopyToOptions): Promise<PlaneLayout[]>`
331
+
332
+ Copy frame data to a buffer.
333
+
334
+ #### `clone(): VideoFrame`
335
+
336
+ Create a copy of the frame.
337
+
338
+ #### `close(): void`
339
+
340
+ Release frame resources. Always call this when done.
341
+
342
+ ### Properties
343
+
344
+ - `format: VideoPixelFormat | null`
345
+ - `codedWidth: number`
346
+ - `codedHeight: number`
347
+ - `displayWidth: number`
348
+ - `displayHeight: number`
349
+ - `timestamp: number`
350
+ - `duration: number | null`
351
+
352
+ ---
353
+
354
+ ## AudioData
355
+
356
+ Represents raw audio samples.
357
+
358
+ ### Constructor
359
+
360
+ ```typescript
361
+ new AudioData(init: AudioDataInit)
362
+ ```
363
+
364
+ **AudioDataInit:**
365
+ | Property | Type | Required | Description |
366
+ |----------|------|----------|-------------|
367
+ | `format` | AudioSampleFormat | Yes | Sample format |
368
+ | `sampleRate` | number | Yes | Sample rate in Hz |
369
+ | `numberOfChannels` | number | Yes | Channel count |
370
+ | `numberOfFrames` | number | Yes | Number of audio frames |
371
+ | `timestamp` | number | Yes | Timestamp in microseconds |
372
+ | `data` | BufferSource | Yes | Sample data |
373
+
374
+ **Supported AudioSampleFormat values:**
375
+ - `'u8'` - Unsigned 8-bit
376
+ - `'s16'` - Signed 16-bit
377
+ - `'s32'` - Signed 32-bit
378
+ - `'f32'` - 32-bit float
379
+ - `'u8-planar'` - Unsigned 8-bit planar
380
+ - `'s16-planar'` - Signed 16-bit planar
381
+ - `'s32-planar'` - Signed 32-bit planar
382
+ - `'f32-planar'` - 32-bit float planar
383
+
384
+ ### Instance Methods
385
+
386
+ #### `allocationSize(options: AudioDataCopyToOptions): number`
387
+
388
+ #### `copyTo(destination: BufferSource, options: AudioDataCopyToOptions): void`
389
+
390
+ #### `clone(): AudioData`
391
+
392
+ #### `close(): void`
393
+
394
+ ### Properties
395
+
396
+ - `format: AudioSampleFormat | null`
397
+ - `sampleRate: number`
398
+ - `numberOfChannels: number`
399
+ - `numberOfFrames: number`
400
+ - `duration: number`
401
+ - `timestamp: number`
402
+
403
+ ---
404
+
405
+ ## EncodedVideoChunk
406
+
407
+ Represents a compressed video frame.
408
+
409
+ ### Constructor
410
+
411
+ ```typescript
412
+ new EncodedVideoChunk(init: EncodedVideoChunkInit)
413
+ ```
414
+
415
+ **EncodedVideoChunkInit:**
416
+ - `type: 'key' | 'delta'` - Frame type
417
+ - `timestamp: number` - Timestamp in microseconds
418
+ - `duration?: number` - Duration in microseconds
419
+ - `data: BufferSource` - Encoded data
420
+
421
+ ### Instance Methods
422
+
423
+ #### `copyTo(destination: BufferSource): void`
424
+
425
+ Copy chunk data to a buffer.
426
+
427
+ ### Properties
428
+
429
+ - `type: 'key' | 'delta'`
430
+ - `timestamp: number`
431
+ - `duration: number | null`
432
+ - `byteLength: number`
433
+
434
+ ---
435
+
436
+ ## EncodedAudioChunk
437
+
438
+ Represents compressed audio data.
439
+
440
+ ### Constructor
441
+
442
+ ```typescript
443
+ new EncodedAudioChunk(init: EncodedAudioChunkInit)
444
+ ```
445
+
446
+ ### Properties
447
+
448
+ - `type: 'key' | 'delta'`
449
+ - `timestamp: number`
450
+ - `duration: number | null`
451
+ - `byteLength: number`
452
+
453
+ ---
454
+
455
+ ## MediaCapabilities
456
+
457
+ Query codec support and performance characteristics.
458
+
459
+ ### Methods
460
+
461
+ #### `decodingInfo(config: MediaDecodingConfiguration): Promise<MediaCapabilitiesDecodingInfo>`
462
+
463
+ ```typescript
464
+ const info = await mediaCapabilities.decodingInfo({
465
+ type: 'file',
466
+ video: {
467
+ contentType: 'video/mp4; codecs="avc1.42E01E"',
468
+ width: 1920,
469
+ height: 1080,
470
+ bitrate: 5_000_000,
471
+ framerate: 30,
472
+ },
473
+ });
474
+ ```
475
+
476
+ #### `encodingInfo(config: MediaEncodingConfiguration): Promise<MediaCapabilitiesEncodingInfo>`
477
+
478
+ ```typescript
479
+ const info = await mediaCapabilities.encodingInfo({
480
+ type: 'record',
481
+ video: {
482
+ contentType: 'video/webm; codecs="vp9"',
483
+ width: 1280,
484
+ height: 720,
485
+ bitrate: 2_000_000,
486
+ framerate: 30,
487
+ },
488
+ });
489
+ ```
490
+
491
+ ### Result Properties
492
+
493
+ - `supported: boolean` - Configuration is supported
494
+ - `smooth: boolean` - Smooth playback/encoding expected
495
+ - `powerEfficient: boolean` - Hardware acceleration available
496
+
497
+ ### Capability Profiles
498
+
499
+ You can generate a hardware-specific capability profile to make `mediaCapabilities` match your actual FFmpeg install. Use the provided CLI:
500
+
501
+ ```bash
502
+ npm run capabilities:generate -- ./webcodecs-capabilities.json
503
+ export WEBCODECS_CAPABILITIES_PROFILE=$(pwd)/webcodecs-capabilities.json
504
+ ```
505
+
506
+ The JSON follows the `CapabilityProfile` schema (see `src/capabilities/types.ts`). If no profile is provided, `mediaCapabilities` falls back to built-in heuristics based on resolution, bitrate, and detected hardware acceleration.