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,276 @@
1
+ /**
2
+ * MediaCapabilities API implementation
3
+ * https://developer.mozilla.org/en-US/docs/Web/API/MediaCapabilities
4
+ *
5
+ * Provides methods to query decoding and encoding capabilities.
6
+ */
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ import { parseContentType, isVideoCodecSupported, isAudioCodecSupported, estimateSmoothPlayback, checkHardwareAcceleration, } from './codecs.js';
10
+ /**
11
+ * MediaCapabilities API implementation
12
+ */
13
+ export class MediaCapabilities {
14
+ _profile = null;
15
+ constructor(profile) {
16
+ this._profile = profile ?? loadCapabilitiesProfileFromEnv();
17
+ }
18
+ /**
19
+ * Query decoding capabilities for a media configuration
20
+ *
21
+ * @param configuration - The media configuration to query
22
+ * @returns Promise resolving to capability information
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * const info = await mediaCapabilities.decodingInfo({
27
+ * type: 'file',
28
+ * video: {
29
+ * contentType: 'video/mp4; codecs="avc1.42E01E"',
30
+ * width: 1920,
31
+ * height: 1080,
32
+ * bitrate: 5000000,
33
+ * framerate: 30,
34
+ * },
35
+ * });
36
+ *
37
+ * if (info.supported && info.smooth) {
38
+ * console.log('Can decode smoothly!');
39
+ * }
40
+ * ```
41
+ */
42
+ async decodingInfo(configuration) {
43
+ // Validate configuration
44
+ if (!configuration.type) {
45
+ throw new TypeError('configuration.type is required');
46
+ }
47
+ if (!configuration.video && !configuration.audio) {
48
+ throw new TypeError('At least one of video or audio configuration is required');
49
+ }
50
+ let videoSupported = true;
51
+ let audioSupported = true;
52
+ let videoCodec = null;
53
+ // Check video support
54
+ if (configuration.video) {
55
+ const videoConfig = configuration.video;
56
+ const { mimeType, codec } = parseContentType(videoConfig.contentType);
57
+ videoCodec = codec;
58
+ videoSupported = isVideoCodecSupported(mimeType, codec) && this._isVideoConfigValid(videoConfig);
59
+ }
60
+ // Check audio support
61
+ if (configuration.audio) {
62
+ const audioConfig = configuration.audio;
63
+ const { mimeType, codec } = parseContentType(audioConfig.contentType);
64
+ audioSupported = isAudioCodecSupported(mimeType, codec) && this._isAudioConfigValid(audioConfig);
65
+ }
66
+ const supported = videoSupported && audioSupported;
67
+ if (!supported) {
68
+ return {
69
+ supported: false,
70
+ smooth: false,
71
+ powerEfficient: false,
72
+ configuration,
73
+ };
74
+ }
75
+ const { smooth, powerEfficient } = await this._evaluateVideoCapabilities(configuration.video, videoCodec);
76
+ return {
77
+ supported,
78
+ smooth,
79
+ powerEfficient,
80
+ configuration,
81
+ };
82
+ }
83
+ /**
84
+ * Query encoding capabilities for a media configuration
85
+ *
86
+ * @param configuration - The media configuration to query
87
+ * @returns Promise resolving to capability information
88
+ *
89
+ * @example
90
+ * ```typescript
91
+ * const info = await mediaCapabilities.encodingInfo({
92
+ * type: 'record',
93
+ * video: {
94
+ * contentType: 'video/webm; codecs="vp9"',
95
+ * width: 1280,
96
+ * height: 720,
97
+ * bitrate: 2000000,
98
+ * framerate: 30,
99
+ * },
100
+ * });
101
+ *
102
+ * if (info.supported && info.powerEfficient) {
103
+ * console.log('Can encode with hardware acceleration!');
104
+ * }
105
+ * ```
106
+ */
107
+ async encodingInfo(configuration) {
108
+ // Validate configuration
109
+ if (!configuration.type) {
110
+ throw new TypeError('configuration.type is required');
111
+ }
112
+ if (!configuration.video && !configuration.audio) {
113
+ throw new TypeError('At least one of video or audio configuration is required');
114
+ }
115
+ let videoSupported = true;
116
+ let audioSupported = true;
117
+ let videoCodec = null;
118
+ // Check video support
119
+ if (configuration.video) {
120
+ const videoConfig = configuration.video;
121
+ const { mimeType, codec } = parseContentType(videoConfig.contentType);
122
+ videoCodec = codec;
123
+ videoSupported = isVideoCodecSupported(mimeType, codec) && this._isVideoConfigValid(videoConfig);
124
+ }
125
+ // Check audio support
126
+ if (configuration.audio) {
127
+ const audioConfig = configuration.audio;
128
+ const { mimeType, codec } = parseContentType(audioConfig.contentType);
129
+ audioSupported = isAudioCodecSupported(mimeType, codec) && this._isAudioConfigValid(audioConfig);
130
+ }
131
+ const supported = videoSupported && audioSupported;
132
+ if (!supported) {
133
+ return {
134
+ supported: false,
135
+ smooth: false,
136
+ powerEfficient: false,
137
+ configuration,
138
+ };
139
+ }
140
+ const { smooth, powerEfficient } = await this._evaluateVideoCapabilities(configuration.video, videoCodec);
141
+ return {
142
+ supported,
143
+ smooth,
144
+ powerEfficient,
145
+ configuration,
146
+ };
147
+ }
148
+ _isVideoConfigValid(config) {
149
+ return (this._isPositiveInteger(config.width) &&
150
+ this._isPositiveInteger(config.height) &&
151
+ this._isPositiveNumber(config.framerate) &&
152
+ this._isPositiveNumber(config.bitrate));
153
+ }
154
+ _isAudioConfigValid(config) {
155
+ if (config.channels !== undefined && config.channels <= 0) {
156
+ return false;
157
+ }
158
+ if (config.samplerate !== undefined && config.samplerate <= 0) {
159
+ return false;
160
+ }
161
+ if (config.bitrate !== undefined && config.bitrate <= 0) {
162
+ return false;
163
+ }
164
+ return true;
165
+ }
166
+ _isPositiveNumber(value) {
167
+ return typeof value === 'number' && Number.isFinite(value) && value > 0;
168
+ }
169
+ _isPositiveInteger(value) {
170
+ return Number.isInteger(value) && value > 0;
171
+ }
172
+ async _evaluateVideoCapabilities(video, codec) {
173
+ if (!video) {
174
+ return { smooth: true, powerEfficient: false };
175
+ }
176
+ const hasHardwareAcceleration = await checkHardwareAcceleration(codec);
177
+ const smooth = this._profile
178
+ ? this._evaluateWithProfile(video, codec, hasHardwareAcceleration)
179
+ : await estimateSmoothPlayback(video, hasHardwareAcceleration);
180
+ return {
181
+ smooth,
182
+ powerEfficient: hasHardwareAcceleration,
183
+ };
184
+ }
185
+ _evaluateWithProfile(video, codec, hasHardwareAccel) {
186
+ if (!this._profile || !codec) {
187
+ return false;
188
+ }
189
+ const entry = findProfileEntry(this._profile.video, codec, video.profile, video.level);
190
+ if (!entry) {
191
+ return false;
192
+ }
193
+ if (entry.maxWidth && video.width > entry.maxWidth)
194
+ return false;
195
+ if (entry.maxHeight && video.height > entry.maxHeight)
196
+ return false;
197
+ if (entry.maxFramerate && video.framerate > entry.maxFramerate)
198
+ return false;
199
+ if (entry.maxBitrate && video.bitrate > entry.maxBitrate)
200
+ return false;
201
+ return true;
202
+ }
203
+ }
204
+ let cachedProfile = null;
205
+ let profilePath = null;
206
+ export function loadCapabilitiesProfile(filePath) {
207
+ try {
208
+ const resolved = filePath ?? profilePath ?? defaultProfilePath();
209
+ if (!resolved) {
210
+ return null;
211
+ }
212
+ const data = fs.readFileSync(resolved, 'utf-8');
213
+ const parsed = JSON.parse(data);
214
+ cachedProfile = parsed;
215
+ profilePath = resolved;
216
+ return parsed;
217
+ }
218
+ catch {
219
+ return null;
220
+ }
221
+ }
222
+ export function setCapabilitiesProfilePath(filePath) {
223
+ profilePath = filePath;
224
+ if (filePath) {
225
+ loadCapabilitiesProfile(filePath);
226
+ }
227
+ else {
228
+ cachedProfile = null;
229
+ }
230
+ }
231
+ export function loadCapabilitiesProfileFromEnv() {
232
+ const envPath = process.env.WEBCODECS_CAPABILITIES_PROFILE;
233
+ if (envPath) {
234
+ return loadCapabilitiesProfile(envPath);
235
+ }
236
+ if (cachedProfile) {
237
+ return cachedProfile;
238
+ }
239
+ return loadCapabilitiesProfile();
240
+ }
241
+ function defaultProfilePath() {
242
+ try {
243
+ const home = process.env.HOME;
244
+ if (!home)
245
+ return null;
246
+ const candidate = path.join(home, '.config', 'webcodecs-node', 'capabilities.json');
247
+ return fs.existsSync(candidate) ? candidate : null;
248
+ }
249
+ catch {
250
+ return null;
251
+ }
252
+ }
253
+ function findProfileEntry(entries, codec, profile, level) {
254
+ if (!entries) {
255
+ return null;
256
+ }
257
+ const codecBase = codec.split('.')[0].toLowerCase();
258
+ const exact = entries.find((entry) => {
259
+ const base = entry.codec.split('.')[0].toLowerCase();
260
+ if (base !== codecBase)
261
+ return false;
262
+ if (entry.profile && profile && entry.profile !== profile)
263
+ return false;
264
+ if (entry.level && level && entry.level !== level)
265
+ return false;
266
+ return true;
267
+ });
268
+ if (exact)
269
+ return exact;
270
+ return entries.find((entry) => entry.codec.split('.')[0].toLowerCase() === codecBase) ?? null;
271
+ }
272
+ /**
273
+ * Global MediaCapabilities instance (matches browser API pattern)
274
+ */
275
+ export const mediaCapabilities = new MediaCapabilities();
276
+ //# sourceMappingURL=MediaCapabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaCapabilities.js","sourceRoot":"","sources":["../../src/capabilities/MediaCapabilities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Supported codecs and codec checking utilities
3
+ */
4
+ import type { VideoConfiguration } from './types.js';
5
+ /**
6
+ * Supported video codecs by container (via FFmpeg)
7
+ */
8
+ export declare const SUPPORTED_VIDEO_CODECS: Record<string, string[]>;
9
+ /**
10
+ * Supported audio codecs by container (via FFmpeg)
11
+ */
12
+ export declare const SUPPORTED_AUDIO_CODECS: Record<string, string[]>;
13
+ /**
14
+ * Supported video codec base names (for encoder/decoder validation)
15
+ */
16
+ export declare const SUPPORTED_VIDEO_CODEC_BASES: readonly ["avc1", "avc3", "hev1", "hvc1", "vp8", "vp09", "vp9", "av01", "av1"];
17
+ /**
18
+ * Supported audio codec base names (for encoder/decoder validation)
19
+ */
20
+ export declare const SUPPORTED_AUDIO_CODEC_BASES: readonly ["mp4a", "aac", "opus", "vorbis", "flac", "mp3"];
21
+ /**
22
+ * Check if a video codec base name is supported
23
+ */
24
+ export declare function isVideoCodecBaseSupported(codec: string): boolean;
25
+ /**
26
+ * Check if an audio codec base name is supported
27
+ */
28
+ export declare function isAudioCodecBaseSupported(codec: string): boolean;
29
+ /**
30
+ * Resolution thresholds for smooth playback estimation
31
+ */
32
+ export declare const SMOOTH_THRESHOLDS: {
33
+ software: {
34
+ maxWidth: number;
35
+ maxHeight: number;
36
+ maxFramerate: number;
37
+ maxPixelRate: number;
38
+ maxBitrate: number;
39
+ };
40
+ hardware: {
41
+ maxWidth: number;
42
+ maxHeight: number;
43
+ maxFramerate: number;
44
+ maxPixelRate: number;
45
+ maxBitrate: number;
46
+ };
47
+ };
48
+ /**
49
+ * Parse a content type string to extract MIME type and codec
50
+ * @param contentType - e.g., 'video/mp4; codecs="avc1.42E01E"'
51
+ */
52
+ export declare function parseContentType(contentType: string): {
53
+ mimeType: string;
54
+ codec: string | null;
55
+ };
56
+ /**
57
+ * Check if a video codec is supported
58
+ */
59
+ export declare function isVideoCodecSupported(mimeType: string, codec: string | null): boolean;
60
+ /**
61
+ * Check if an audio codec is supported
62
+ */
63
+ export declare function isAudioCodecSupported(mimeType: string, codec: string | null): boolean;
64
+ /**
65
+ * Estimate if playback would be smooth based on resolution and hardware capabilities
66
+ */
67
+ export declare function estimateSmoothPlayback(video: VideoConfiguration | undefined, hasHardwareAccel: boolean): Promise<boolean>;
68
+ /**
69
+ * Check if hardware acceleration is available for a codec
70
+ */
71
+ export declare function checkHardwareAcceleration(codec: string | null): Promise<boolean>;
72
+ //# sourceMappingURL=codecs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codecs.d.ts","sourceRoot":"","sources":["../../src/capabilities/codecs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAI3D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAM3D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,2BAA2B,gFAE9B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,2BAA2B,2DAE9B,CAAC;AAEX;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGhE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGhE;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;CAe7B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAchG;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CASrF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAQrF;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,kBAAkB,GAAG,SAAS,EACrC,gBAAgB,EAAE,OAAO,GACxB,OAAO,CAAC,OAAO,CAAC,CAuBlB;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAiBtF"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Supported codecs and codec checking utilities
3
+ */
4
+ import { detectHardwareAcceleration, parseCodecString } from '../hardware/index.js';
5
+ /**
6
+ * Supported video codecs by container (via FFmpeg)
7
+ */
8
+ export const SUPPORTED_VIDEO_CODECS = {
9
+ 'video/mp4': ['avc1', 'avc3', 'hev1', 'hvc1', 'av01'],
10
+ 'video/webm': ['vp8', 'vp9', 'vp09', 'av01'],
11
+ 'video/ogg': ['theora'],
12
+ };
13
+ /**
14
+ * Supported audio codecs by container (via FFmpeg)
15
+ */
16
+ export const SUPPORTED_AUDIO_CODECS = {
17
+ 'audio/mp4': ['mp4a', 'aac'],
18
+ 'audio/webm': ['opus', 'vorbis'],
19
+ 'audio/ogg': ['opus', 'vorbis', 'flac'],
20
+ 'audio/mpeg': ['mp3'],
21
+ 'audio/flac': ['flac'],
22
+ };
23
+ /**
24
+ * Supported video codec base names (for encoder/decoder validation)
25
+ */
26
+ export const SUPPORTED_VIDEO_CODEC_BASES = [
27
+ 'avc1', 'avc3', 'hev1', 'hvc1', 'vp8', 'vp09', 'vp9', 'av01', 'av1'
28
+ ];
29
+ /**
30
+ * Supported audio codec base names (for encoder/decoder validation)
31
+ */
32
+ export const SUPPORTED_AUDIO_CODEC_BASES = [
33
+ 'mp4a', 'aac', 'opus', 'vorbis', 'flac', 'mp3'
34
+ ];
35
+ /**
36
+ * Check if a video codec base name is supported
37
+ */
38
+ export function isVideoCodecBaseSupported(codec) {
39
+ const codecBase = codec.split('.')[0].toLowerCase();
40
+ return SUPPORTED_VIDEO_CODEC_BASES.includes(codecBase);
41
+ }
42
+ /**
43
+ * Check if an audio codec base name is supported
44
+ */
45
+ export function isAudioCodecBaseSupported(codec) {
46
+ const codecBase = codec.split('.')[0].toLowerCase();
47
+ return SUPPORTED_AUDIO_CODEC_BASES.includes(codecBase);
48
+ }
49
+ /**
50
+ * Resolution thresholds for smooth playback estimation
51
+ */
52
+ export const SMOOTH_THRESHOLDS = {
53
+ software: {
54
+ maxWidth: 1920,
55
+ maxHeight: 1080,
56
+ maxFramerate: 60,
57
+ maxPixelRate: 1920 * 1080 * 60,
58
+ maxBitrate: 10_000_000,
59
+ },
60
+ hardware: {
61
+ maxWidth: 3840,
62
+ maxHeight: 2160,
63
+ maxFramerate: 120,
64
+ maxPixelRate: 3840 * 2160 * 120,
65
+ maxBitrate: 50_000_000,
66
+ },
67
+ };
68
+ /**
69
+ * Parse a content type string to extract MIME type and codec
70
+ * @param contentType - e.g., 'video/mp4; codecs="avc1.42E01E"'
71
+ */
72
+ export function parseContentType(contentType) {
73
+ const parts = contentType.split(';').map(p => p.trim());
74
+ const mimeType = parts[0].toLowerCase();
75
+ let codec = null;
76
+ for (const part of parts.slice(1)) {
77
+ const codecMatch = part.match(/codecs\s*=\s*["']?([^"']+)["']?/i);
78
+ if (codecMatch) {
79
+ codec = codecMatch[1];
80
+ break;
81
+ }
82
+ }
83
+ return { mimeType, codec };
84
+ }
85
+ /**
86
+ * Check if a video codec is supported
87
+ */
88
+ export function isVideoCodecSupported(mimeType, codec) {
89
+ const supportedCodecs = SUPPORTED_VIDEO_CODECS[mimeType];
90
+ if (!supportedCodecs)
91
+ return false;
92
+ if (!codec)
93
+ return true; // MIME type supported, no specific codec required
94
+ // Extract base codec (e.g., 'avc1' from 'avc1.42E01E')
95
+ const codecBase = codec.split('.')[0].toLowerCase();
96
+ return supportedCodecs.some(c => c.toLowerCase() === codecBase);
97
+ }
98
+ /**
99
+ * Check if an audio codec is supported
100
+ */
101
+ export function isAudioCodecSupported(mimeType, codec) {
102
+ const supportedCodecs = SUPPORTED_AUDIO_CODECS[mimeType];
103
+ if (!supportedCodecs)
104
+ return false;
105
+ if (!codec)
106
+ return true;
107
+ const codecBase = codec.split('.')[0].toLowerCase();
108
+ return supportedCodecs.some(c => c.toLowerCase() === codecBase);
109
+ }
110
+ /**
111
+ * Estimate if playback would be smooth based on resolution and hardware capabilities
112
+ */
113
+ export async function estimateSmoothPlayback(video, hasHardwareAccel) {
114
+ if (!video)
115
+ return true; // Audio-only is always smooth
116
+ const thresholds = hasHardwareAccel ? SMOOTH_THRESHOLDS.hardware : SMOOTH_THRESHOLDS.software;
117
+ const framerate = video.framerate ?? thresholds.maxFramerate;
118
+ if (video.width > thresholds.maxWidth || video.height > thresholds.maxHeight) {
119
+ return false;
120
+ }
121
+ if (framerate > thresholds.maxFramerate) {
122
+ return false;
123
+ }
124
+ const pixelRate = video.width * video.height * framerate;
125
+ if (pixelRate > thresholds.maxPixelRate) {
126
+ return false;
127
+ }
128
+ if (typeof video.bitrate === 'number' && video.bitrate > thresholds.maxBitrate) {
129
+ return false;
130
+ }
131
+ return true;
132
+ }
133
+ /**
134
+ * Check if hardware acceleration is available for a codec
135
+ */
136
+ export async function checkHardwareAcceleration(codec) {
137
+ if (!codec)
138
+ return false;
139
+ try {
140
+ const hwCapabilities = await detectHardwareAcceleration();
141
+ const codecName = parseCodecString(codec);
142
+ if (!codecName)
143
+ return false;
144
+ // Check if any hardware decoder/encoder is available for this codec
145
+ const hasHwDecoder = hwCapabilities.decoders.some(d => d.codec === codecName);
146
+ const hasHwEncoder = hwCapabilities.encoders.some(e => e.codec === codecName);
147
+ return hasHwDecoder || hasHwEncoder;
148
+ }
149
+ catch {
150
+ return false;
151
+ }
152
+ }
153
+ //# sourceMappingURL=codecs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codecs.js","sourceRoot":"","sources":["../../src/capabilities/codecs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * MediaCapabilities module - capability detection and querying
3
+ */
4
+ export type { VideoConfiguration, AudioConfiguration, MediaDecodingConfiguration, MediaEncodingConfiguration, MediaCapabilitiesInfo, MediaCapabilitiesDecodingInfo, MediaCapabilitiesEncodingInfo, } from './types.js';
5
+ export { SUPPORTED_VIDEO_CODECS, SUPPORTED_AUDIO_CODECS, SUPPORTED_VIDEO_CODEC_BASES, SUPPORTED_AUDIO_CODEC_BASES, SMOOTH_THRESHOLDS, parseContentType, isVideoCodecSupported, isAudioCodecSupported, isVideoCodecBaseSupported, isAudioCodecBaseSupported, estimateSmoothPlayback, checkHardwareAcceleration, } from './codecs.js';
6
+ export { MediaCapabilities, mediaCapabilities, loadCapabilitiesProfile, setCapabilitiesProfilePath, } from './MediaCapabilities.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/capabilities/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,EAC1B,0BAA0B,EAC1B,qBAAqB,EACrB,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,2BAA2B,EAC3B,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * MediaCapabilities module - capability detection and querying
3
+ */
4
+ // Codec utilities
5
+ export { SUPPORTED_VIDEO_CODECS, SUPPORTED_AUDIO_CODECS, SUPPORTED_VIDEO_CODEC_BASES, SUPPORTED_AUDIO_CODEC_BASES, SMOOTH_THRESHOLDS, parseContentType, isVideoCodecSupported, isAudioCodecSupported, isVideoCodecBaseSupported, isAudioCodecBaseSupported, estimateSmoothPlayback, checkHardwareAcceleration, } from './codecs.js';
6
+ // MediaCapabilities class
7
+ export { MediaCapabilities, mediaCapabilities, loadCapabilitiesProfile, setCapabilitiesProfilePath, } from './MediaCapabilities.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/capabilities/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,kBAAkB;AAClB,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,2BAA2B,EAC3B,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAErB,0BAA0B;AAC1B,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * MediaCapabilities type definitions
3
+ */
4
+ /**
5
+ * Video configuration for capability queries
6
+ */
7
+ export interface VideoConfiguration {
8
+ contentType: string;
9
+ width: number;
10
+ height: number;
11
+ bitrate: number;
12
+ framerate: number;
13
+ profile?: string;
14
+ level?: string;
15
+ }
16
+ /**
17
+ * Audio configuration for capability queries
18
+ */
19
+ export interface AudioConfiguration {
20
+ contentType: string;
21
+ channels?: number;
22
+ bitrate?: number;
23
+ samplerate?: number;
24
+ profile?: string;
25
+ }
26
+ /**
27
+ * Media configuration for decoding capability queries
28
+ */
29
+ export interface MediaDecodingConfiguration {
30
+ type: 'file' | 'media-source' | 'webrtc';
31
+ video?: VideoConfiguration;
32
+ audio?: AudioConfiguration;
33
+ }
34
+ /**
35
+ * Media configuration for encoding capability queries
36
+ */
37
+ export interface MediaEncodingConfiguration {
38
+ type: 'record' | 'webrtc';
39
+ video?: VideoConfiguration;
40
+ audio?: AudioConfiguration;
41
+ }
42
+ /**
43
+ * Result of a capability query
44
+ */
45
+ export interface MediaCapabilitiesInfo {
46
+ supported: boolean;
47
+ smooth: boolean;
48
+ powerEfficient: boolean;
49
+ }
50
+ /**
51
+ * Result of a decoding capability query
52
+ */
53
+ export interface MediaCapabilitiesDecodingInfo extends MediaCapabilitiesInfo {
54
+ configuration?: MediaDecodingConfiguration;
55
+ }
56
+ /**
57
+ * Result of an encoding capability query
58
+ */
59
+ export interface MediaCapabilitiesEncodingInfo extends MediaCapabilitiesInfo {
60
+ configuration?: MediaEncodingConfiguration;
61
+ }
62
+ export interface CapabilityProfile {
63
+ video: CapabilityProfileEntry[];
64
+ audio: CapabilityProfileEntry[];
65
+ }
66
+ export interface CapabilityProfileEntry {
67
+ codec: string;
68
+ profile?: string;
69
+ level?: string;
70
+ maxWidth?: number;
71
+ maxHeight?: number;
72
+ maxFramerate?: number;
73
+ maxBitrate?: number;
74
+ pixelFormat?: string;
75
+ hardwareAccelerated?: boolean;
76
+ }
77
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/capabilities/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,QAAQ,CAAC;IACzC,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,6BAA8B,SAAQ,qBAAqB;IAC1E,aAAa,CAAC,EAAE,0BAA0B,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,6BAA8B,SAAQ,qBAAqB;IAC1E,aAAa,CAAC,EAAE,0BAA0B,CAAC;CAC5C;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,sBAAsB,EAAE,CAAC;IAChC,KAAK,EAAE,sBAAsB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * MediaCapabilities type definitions
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/capabilities/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}