webcodecs-node 0.3.0 → 0.5.1

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 (348) hide show
  1. package/dist/backends/types.d.ts +6 -3
  2. package/dist/backends/types.d.ts.map +1 -1
  3. package/dist/backends/types.js +2 -2
  4. package/dist/backends/types.js.map +1 -1
  5. package/dist/{ffmpeg → codec-utils}/audio-codecs.d.ts +13 -12
  6. package/dist/codec-utils/audio-codecs.d.ts.map +1 -0
  7. package/dist/{ffmpeg → codec-utils}/audio-codecs.js +29 -11
  8. package/dist/codec-utils/audio-codecs.js.map +1 -0
  9. package/dist/{ffmpeg → codec-utils}/formats.d.ts +7 -7
  10. package/dist/codec-utils/formats.d.ts.map +1 -0
  11. package/dist/{ffmpeg → codec-utils}/formats.js +7 -7
  12. package/dist/codec-utils/formats.js.map +1 -0
  13. package/dist/{ffmpeg → codec-utils}/index.d.ts +3 -3
  14. package/dist/codec-utils/index.d.ts.map +1 -0
  15. package/dist/{ffmpeg → codec-utils}/index.js +3 -4
  16. package/dist/codec-utils/index.js.map +1 -0
  17. package/dist/{ffmpeg → codec-utils}/types.d.ts +13 -11
  18. package/dist/codec-utils/types.d.ts.map +1 -0
  19. package/dist/{ffmpeg → codec-utils}/types.js +3 -1
  20. package/dist/codec-utils/types.js.map +1 -0
  21. package/dist/containers/Demuxer.d.ts +114 -0
  22. package/dist/containers/Demuxer.d.ts.map +1 -0
  23. package/dist/containers/Demuxer.js +256 -0
  24. package/dist/containers/Demuxer.js.map +1 -0
  25. package/dist/containers/Muxer.d.ts +142 -0
  26. package/dist/containers/Muxer.d.ts.map +1 -0
  27. package/dist/containers/Muxer.js +295 -0
  28. package/dist/containers/Muxer.js.map +1 -0
  29. package/dist/containers/extract.d.ts +25 -0
  30. package/dist/containers/extract.d.ts.map +1 -0
  31. package/dist/containers/extract.js +64 -0
  32. package/dist/containers/extract.js.map +1 -0
  33. package/dist/containers/index.d.ts +40 -0
  34. package/dist/containers/index.d.ts.map +1 -0
  35. package/dist/containers/index.js +41 -0
  36. package/dist/containers/index.js.map +1 -0
  37. package/dist/containers/transcode.d.ts +138 -0
  38. package/dist/containers/transcode.d.ts.map +1 -0
  39. package/dist/containers/transcode.js +536 -0
  40. package/dist/containers/transcode.js.map +1 -0
  41. package/dist/core/AudioData.d.ts +4 -0
  42. package/dist/core/AudioData.d.ts.map +1 -1
  43. package/dist/core/AudioData.js +56 -4
  44. package/dist/core/AudioData.js.map +1 -1
  45. package/dist/core/EncodedAudioChunk.d.ts +1 -1
  46. package/dist/core/EncodedAudioChunk.d.ts.map +1 -1
  47. package/dist/core/EncodedAudioChunk.js +1 -1
  48. package/dist/core/EncodedAudioChunk.js.map +1 -1
  49. package/dist/core/EncodedVideoChunk.d.ts.map +1 -1
  50. package/dist/core/EncodedVideoChunk.js +3 -19
  51. package/dist/core/EncodedVideoChunk.js.map +1 -1
  52. package/dist/core/VideoFrame.d.ts +6 -1
  53. package/dist/core/VideoFrame.d.ts.map +1 -1
  54. package/dist/core/VideoFrame.js +130 -17
  55. package/dist/core/VideoFrame.js.map +1 -1
  56. package/dist/decoders/AudioDecoder.d.ts +8 -0
  57. package/dist/decoders/AudioDecoder.d.ts.map +1 -1
  58. package/dist/decoders/AudioDecoder.js +62 -32
  59. package/dist/decoders/AudioDecoder.js.map +1 -1
  60. package/dist/decoders/ImageDecoder.d.ts +0 -3
  61. package/dist/decoders/ImageDecoder.d.ts.map +1 -1
  62. package/dist/decoders/ImageDecoder.js +13 -225
  63. package/dist/decoders/ImageDecoder.js.map +1 -1
  64. package/dist/decoders/VideoDecoder.d.ts +8 -0
  65. package/dist/decoders/VideoDecoder.d.ts.map +1 -1
  66. package/dist/decoders/VideoDecoder.js +76 -46
  67. package/dist/decoders/VideoDecoder.js.map +1 -1
  68. package/dist/demos/demo-1080p-transcode.d.ts +8 -0
  69. package/dist/demos/demo-1080p-transcode.d.ts.map +1 -0
  70. package/dist/demos/demo-1080p-transcode.js +188 -0
  71. package/dist/demos/demo-1080p-transcode.js.map +1 -0
  72. package/dist/demos/demo-containers.d.ts +7 -0
  73. package/dist/demos/demo-containers.d.ts.map +1 -0
  74. package/dist/demos/demo-containers.js +140 -0
  75. package/dist/demos/demo-containers.js.map +1 -0
  76. package/dist/demos/demo-four-corners.js +4 -4
  77. package/dist/demos/demo-four-corners.js.map +1 -1
  78. package/dist/demos/demo-hwaccel.js +1 -1
  79. package/dist/demos/demo-hwaccel.js.map +1 -1
  80. package/dist/demos/demo-samples.js +4 -4
  81. package/dist/demos/demo-samples.js.map +1 -1
  82. package/dist/demos/demo-streaming.js +6 -6
  83. package/dist/demos/demo-streaming.js.map +1 -1
  84. package/dist/encoders/AudioEncoder.d.ts +8 -0
  85. package/dist/encoders/AudioEncoder.d.ts.map +1 -1
  86. package/dist/encoders/AudioEncoder.js +68 -26
  87. package/dist/encoders/AudioEncoder.js.map +1 -1
  88. package/dist/encoders/VideoEncoder.d.ts +8 -0
  89. package/dist/encoders/VideoEncoder.d.ts.map +1 -1
  90. package/dist/encoders/VideoEncoder.js +64 -13
  91. package/dist/encoders/VideoEncoder.js.map +1 -1
  92. package/dist/formats/conversions/batch-converter.d.ts +61 -0
  93. package/dist/formats/conversions/batch-converter.d.ts.map +1 -0
  94. package/dist/formats/conversions/batch-converter.js +274 -0
  95. package/dist/formats/conversions/batch-converter.js.map +1 -0
  96. package/dist/formats/conversions/frame-converter.d.ts.map +1 -1
  97. package/dist/formats/conversions/frame-converter.js +17 -10
  98. package/dist/formats/conversions/frame-converter.js.map +1 -1
  99. package/dist/formats/conversions/index.d.ts +1 -0
  100. package/dist/formats/conversions/index.d.ts.map +1 -1
  101. package/dist/formats/conversions/index.js +2 -0
  102. package/dist/formats/conversions/index.js.map +1 -1
  103. package/dist/hardware/decoder-args.d.ts +2 -7
  104. package/dist/hardware/decoder-args.d.ts.map +1 -1
  105. package/dist/hardware/decoder-args.js +2 -32
  106. package/dist/hardware/decoder-args.js.map +1 -1
  107. package/dist/hardware/encoder-args.d.ts +2 -11
  108. package/dist/hardware/encoder-args.d.ts.map +1 -1
  109. package/dist/hardware/encoder-args.js +2 -71
  110. package/dist/hardware/encoder-args.js.map +1 -1
  111. package/dist/hardware/index.d.ts +2 -2
  112. package/dist/hardware/index.d.ts.map +1 -1
  113. package/dist/hardware/index.js +2 -2
  114. package/dist/hardware/index.js.map +1 -1
  115. package/dist/index.d.ts +5 -7
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.js +5 -6
  118. package/dist/index.js.map +1 -1
  119. package/dist/node-av/NodeAvAudioDecoder.d.ts +2 -2
  120. package/dist/node-av/NodeAvAudioDecoder.d.ts.map +1 -1
  121. package/dist/node-av/NodeAvAudioDecoder.js +63 -56
  122. package/dist/node-av/NodeAvAudioDecoder.js.map +1 -1
  123. package/dist/node-av/NodeAvAudioEncoder.d.ts +6 -0
  124. package/dist/node-av/NodeAvAudioEncoder.d.ts.map +1 -1
  125. package/dist/node-av/NodeAvAudioEncoder.js +166 -45
  126. package/dist/node-av/NodeAvAudioEncoder.js.map +1 -1
  127. package/dist/node-av/NodeAvImageDecoder.d.ts +28 -9
  128. package/dist/node-av/NodeAvImageDecoder.d.ts.map +1 -1
  129. package/dist/node-av/NodeAvImageDecoder.js +156 -37
  130. package/dist/node-av/NodeAvImageDecoder.js.map +1 -1
  131. package/dist/node-av/NodeAvVideoDecoder.d.ts +1 -1
  132. package/dist/node-av/NodeAvVideoDecoder.d.ts.map +1 -1
  133. package/dist/node-av/NodeAvVideoDecoder.js +20 -16
  134. package/dist/node-av/NodeAvVideoDecoder.js.map +1 -1
  135. package/dist/node-av/NodeAvVideoEncoder.d.ts +12 -0
  136. package/dist/node-av/NodeAvVideoEncoder.d.ts.map +1 -1
  137. package/dist/node-av/NodeAvVideoEncoder.js +175 -63
  138. package/dist/node-av/NodeAvVideoEncoder.js.map +1 -1
  139. package/dist/polyfill.d.ts.map +1 -1
  140. package/dist/polyfill.js +11 -9
  141. package/dist/polyfill.js.map +1 -1
  142. package/dist/utils/aac.d.ts.map +1 -1
  143. package/dist/utils/aac.js +6 -0
  144. package/dist/utils/aac.js.map +1 -1
  145. package/dist/utils/buffer-pool.d.ts +109 -0
  146. package/dist/utils/buffer-pool.d.ts.map +1 -0
  147. package/dist/utils/buffer-pool.js +278 -0
  148. package/dist/utils/buffer-pool.js.map +1 -0
  149. package/dist/utils/codec-cache.d.ts +65 -0
  150. package/dist/utils/codec-cache.d.ts.map +1 -0
  151. package/dist/utils/codec-cache.js +116 -0
  152. package/dist/utils/codec-cache.js.map +1 -0
  153. package/dist/utils/errors.d.ts +62 -0
  154. package/dist/utils/errors.d.ts.map +1 -0
  155. package/dist/utils/errors.js +84 -0
  156. package/dist/utils/errors.js.map +1 -0
  157. package/dist/utils/hardware-pool.d.ts +88 -0
  158. package/dist/utils/hardware-pool.d.ts.map +1 -0
  159. package/dist/utils/hardware-pool.js +266 -0
  160. package/dist/utils/hardware-pool.js.map +1 -0
  161. package/dist/utils/index.d.ts +5 -0
  162. package/dist/utils/index.d.ts.map +1 -1
  163. package/dist/utils/index.js +10 -0
  164. package/dist/utils/index.js.map +1 -1
  165. package/dist/utils/timeout.d.ts +44 -0
  166. package/dist/utils/timeout.d.ts.map +1 -0
  167. package/dist/utils/timeout.js +73 -0
  168. package/dist/utils/timeout.js.map +1 -0
  169. package/dist/utils/type-guards.d.ts +11 -1
  170. package/dist/utils/type-guards.d.ts.map +1 -1
  171. package/dist/utils/type-guards.js.map +1 -1
  172. package/package.json +13 -35
  173. package/dist/AudioData.d.ts +0 -6
  174. package/dist/AudioData.d.ts.map +0 -1
  175. package/dist/AudioData.js +0 -6
  176. package/dist/AudioData.js.map +0 -1
  177. package/dist/AudioDecoder.d.ts +0 -6
  178. package/dist/AudioDecoder.d.ts.map +0 -1
  179. package/dist/AudioDecoder.js +0 -6
  180. package/dist/AudioDecoder.js.map +0 -1
  181. package/dist/AudioEncoder.d.ts +0 -6
  182. package/dist/AudioEncoder.d.ts.map +0 -1
  183. package/dist/AudioEncoder.js +0 -6
  184. package/dist/AudioEncoder.js.map +0 -1
  185. package/dist/EncodedAudioChunk.d.ts +0 -6
  186. package/dist/EncodedAudioChunk.d.ts.map +0 -1
  187. package/dist/EncodedAudioChunk.js +0 -6
  188. package/dist/EncodedAudioChunk.js.map +0 -1
  189. package/dist/EncodedVideoChunk.d.ts +0 -6
  190. package/dist/EncodedVideoChunk.d.ts.map +0 -1
  191. package/dist/EncodedVideoChunk.js +0 -6
  192. package/dist/EncodedVideoChunk.js.map +0 -1
  193. package/dist/FFmpegProcess.d.ts +0 -6
  194. package/dist/FFmpegProcess.d.ts.map +0 -1
  195. package/dist/FFmpegProcess.js +0 -6
  196. package/dist/FFmpegProcess.js.map +0 -1
  197. package/dist/HardwareAcceleration.d.ts +0 -6
  198. package/dist/HardwareAcceleration.d.ts.map +0 -1
  199. package/dist/HardwareAcceleration.js +0 -6
  200. package/dist/HardwareAcceleration.js.map +0 -1
  201. package/dist/ImageDecoder.d.ts +0 -6
  202. package/dist/ImageDecoder.d.ts.map +0 -1
  203. package/dist/ImageDecoder.js +0 -6
  204. package/dist/ImageDecoder.js.map +0 -1
  205. package/dist/Logger.d.ts +0 -6
  206. package/dist/Logger.d.ts.map +0 -1
  207. package/dist/Logger.js +0 -6
  208. package/dist/Logger.js.map +0 -1
  209. package/dist/MediaCapabilities.d.ts +0 -9
  210. package/dist/MediaCapabilities.d.ts.map +0 -1
  211. package/dist/MediaCapabilities.js +0 -8
  212. package/dist/MediaCapabilities.js.map +0 -1
  213. package/dist/VideoDecoder.d.ts +0 -6
  214. package/dist/VideoDecoder.d.ts.map +0 -1
  215. package/dist/VideoDecoder.js +0 -6
  216. package/dist/VideoDecoder.js.map +0 -1
  217. package/dist/VideoEncoder.d.ts +0 -6
  218. package/dist/VideoEncoder.d.ts.map +0 -1
  219. package/dist/VideoEncoder.js +0 -6
  220. package/dist/VideoEncoder.js.map +0 -1
  221. package/dist/VideoFrame.d.ts +0 -10
  222. package/dist/VideoFrame.d.ts.map +0 -1
  223. package/dist/VideoFrame.js +0 -9
  224. package/dist/VideoFrame.js.map +0 -1
  225. package/dist/__tests__/AudioData.test.d.ts +0 -5
  226. package/dist/__tests__/AudioData.test.d.ts.map +0 -1
  227. package/dist/__tests__/AudioData.test.js +0 -179
  228. package/dist/__tests__/AudioData.test.js.map +0 -1
  229. package/dist/__tests__/AudioDecoder.test.d.ts +0 -5
  230. package/dist/__tests__/AudioDecoder.test.d.ts.map +0 -1
  231. package/dist/__tests__/AudioDecoder.test.js +0 -733
  232. package/dist/__tests__/AudioDecoder.test.js.map +0 -1
  233. package/dist/__tests__/AudioEncoder.test.d.ts +0 -5
  234. package/dist/__tests__/AudioEncoder.test.d.ts.map +0 -1
  235. package/dist/__tests__/AudioEncoder.test.js +0 -247
  236. package/dist/__tests__/AudioEncoder.test.js.map +0 -1
  237. package/dist/__tests__/EncodedChunks.test.d.ts +0 -5
  238. package/dist/__tests__/EncodedChunks.test.d.ts.map +0 -1
  239. package/dist/__tests__/EncodedChunks.test.js +0 -99
  240. package/dist/__tests__/EncodedChunks.test.js.map +0 -1
  241. package/dist/__tests__/HardwareAcceleration.test.d.ts +0 -5
  242. package/dist/__tests__/HardwareAcceleration.test.d.ts.map +0 -1
  243. package/dist/__tests__/HardwareAcceleration.test.js +0 -84
  244. package/dist/__tests__/HardwareAcceleration.test.js.map +0 -1
  245. package/dist/__tests__/ImageDecoder.test.d.ts +0 -5
  246. package/dist/__tests__/ImageDecoder.test.d.ts.map +0 -1
  247. package/dist/__tests__/ImageDecoder.test.js +0 -587
  248. package/dist/__tests__/ImageDecoder.test.js.map +0 -1
  249. package/dist/__tests__/ImageDecoder.wpt.test.d.ts +0 -8
  250. package/dist/__tests__/ImageDecoder.wpt.test.d.ts.map +0 -1
  251. package/dist/__tests__/ImageDecoder.wpt.test.js +0 -135
  252. package/dist/__tests__/ImageDecoder.wpt.test.js.map +0 -1
  253. package/dist/__tests__/MediaCapabilities.test.d.ts +0 -5
  254. package/dist/__tests__/MediaCapabilities.test.d.ts.map +0 -1
  255. package/dist/__tests__/MediaCapabilities.test.js +0 -346
  256. package/dist/__tests__/MediaCapabilities.test.js.map +0 -1
  257. package/dist/__tests__/NodeAvDecoder.test.d.ts +0 -2
  258. package/dist/__tests__/NodeAvDecoder.test.d.ts.map +0 -1
  259. package/dist/__tests__/NodeAvDecoder.test.js +0 -199
  260. package/dist/__tests__/NodeAvDecoder.test.js.map +0 -1
  261. package/dist/__tests__/NodeAvEncoder.test.d.ts +0 -2
  262. package/dist/__tests__/NodeAvEncoder.test.d.ts.map +0 -1
  263. package/dist/__tests__/NodeAvEncoder.test.js +0 -176
  264. package/dist/__tests__/NodeAvEncoder.test.js.map +0 -1
  265. package/dist/__tests__/VideoDecoder.test.d.ts +0 -5
  266. package/dist/__tests__/VideoDecoder.test.d.ts.map +0 -1
  267. package/dist/__tests__/VideoDecoder.test.js +0 -675
  268. package/dist/__tests__/VideoDecoder.test.js.map +0 -1
  269. package/dist/__tests__/VideoEncoder.test.d.ts +0 -5
  270. package/dist/__tests__/VideoEncoder.test.d.ts.map +0 -1
  271. package/dist/__tests__/VideoEncoder.test.js +0 -468
  272. package/dist/__tests__/VideoEncoder.test.js.map +0 -1
  273. package/dist/__tests__/VideoFrame.test.d.ts +0 -5
  274. package/dist/__tests__/VideoFrame.test.d.ts.map +0 -1
  275. package/dist/__tests__/VideoFrame.test.js +0 -243
  276. package/dist/__tests__/VideoFrame.test.js.map +0 -1
  277. package/dist/__tests__/aac-utils.test.d.ts +0 -2
  278. package/dist/__tests__/aac-utils.test.d.ts.map +0 -1
  279. package/dist/__tests__/aac-utils.test.js +0 -37
  280. package/dist/__tests__/aac-utils.test.js.map +0 -1
  281. package/dist/__tests__/avc-utils.test.d.ts +0 -2
  282. package/dist/__tests__/avc-utils.test.d.ts.map +0 -1
  283. package/dist/__tests__/avc-utils.test.js +0 -63
  284. package/dist/__tests__/avc-utils.test.js.map +0 -1
  285. package/dist/__tests__/hevc-utils.test.d.ts +0 -2
  286. package/dist/__tests__/hevc-utils.test.d.ts.map +0 -1
  287. package/dist/__tests__/hevc-utils.test.js +0 -78
  288. package/dist/__tests__/hevc-utils.test.js.map +0 -1
  289. package/dist/demos/demo-conversion.d.ts +0 -13
  290. package/dist/demos/demo-conversion.d.ts.map +0 -1
  291. package/dist/demos/demo-conversion.js +0 -301
  292. package/dist/demos/demo-conversion.js.map +0 -1
  293. package/dist/demos/demo-hwaccel-conversion.d.ts +0 -8
  294. package/dist/demos/demo-hwaccel-conversion.d.ts.map +0 -1
  295. package/dist/demos/demo-hwaccel-conversion.js +0 -161
  296. package/dist/demos/demo-hwaccel-conversion.js.map +0 -1
  297. package/dist/demos/demo-mediabunny.d.ts +0 -7
  298. package/dist/demos/demo-mediabunny.d.ts.map +0 -1
  299. package/dist/demos/demo-mediabunny.js +0 -78
  300. package/dist/demos/demo-mediabunny.js.map +0 -1
  301. package/dist/ffmpeg/FFmpegProcess.d.ts +0 -111
  302. package/dist/ffmpeg/FFmpegProcess.d.ts.map +0 -1
  303. package/dist/ffmpeg/FFmpegProcess.js +0 -543
  304. package/dist/ffmpeg/FFmpegProcess.js.map +0 -1
  305. package/dist/ffmpeg/audio-codecs.d.ts.map +0 -1
  306. package/dist/ffmpeg/audio-codecs.js.map +0 -1
  307. package/dist/ffmpeg/formats.d.ts.map +0 -1
  308. package/dist/ffmpeg/formats.js.map +0 -1
  309. package/dist/ffmpeg/index.d.ts.map +0 -1
  310. package/dist/ffmpeg/index.js.map +0 -1
  311. package/dist/ffmpeg/parsers/annexb.d.ts +0 -88
  312. package/dist/ffmpeg/parsers/annexb.d.ts.map +0 -1
  313. package/dist/ffmpeg/parsers/annexb.js +0 -201
  314. package/dist/ffmpeg/parsers/annexb.js.map +0 -1
  315. package/dist/ffmpeg/parsers/index.d.ts +0 -6
  316. package/dist/ffmpeg/parsers/index.d.ts.map +0 -1
  317. package/dist/ffmpeg/parsers/index.js +0 -8
  318. package/dist/ffmpeg/parsers/index.js.map +0 -1
  319. package/dist/ffmpeg/parsers/ivf.d.ts +0 -54
  320. package/dist/ffmpeg/parsers/ivf.d.ts.map +0 -1
  321. package/dist/ffmpeg/parsers/ivf.js +0 -109
  322. package/dist/ffmpeg/parsers/ivf.js.map +0 -1
  323. package/dist/ffmpeg/types.d.ts.map +0 -1
  324. package/dist/ffmpeg/types.js.map +0 -1
  325. package/dist/mediabunny/FFmpegAudioDecoder.d.ts +0 -23
  326. package/dist/mediabunny/FFmpegAudioDecoder.d.ts.map +0 -1
  327. package/dist/mediabunny/FFmpegAudioDecoder.js +0 -129
  328. package/dist/mediabunny/FFmpegAudioDecoder.js.map +0 -1
  329. package/dist/mediabunny/FFmpegAudioEncoder.d.ts +0 -43
  330. package/dist/mediabunny/FFmpegAudioEncoder.d.ts.map +0 -1
  331. package/dist/mediabunny/FFmpegAudioEncoder.js +0 -220
  332. package/dist/mediabunny/FFmpegAudioEncoder.js.map +0 -1
  333. package/dist/mediabunny/FFmpegVideoDecoder.d.ts +0 -24
  334. package/dist/mediabunny/FFmpegVideoDecoder.d.ts.map +0 -1
  335. package/dist/mediabunny/FFmpegVideoDecoder.js +0 -125
  336. package/dist/mediabunny/FFmpegVideoDecoder.js.map +0 -1
  337. package/dist/mediabunny/FFmpegVideoEncoder.d.ts +0 -48
  338. package/dist/mediabunny/FFmpegVideoEncoder.d.ts.map +0 -1
  339. package/dist/mediabunny/FFmpegVideoEncoder.js +0 -263
  340. package/dist/mediabunny/FFmpegVideoEncoder.js.map +0 -1
  341. package/dist/mediabunny/index.d.ts +0 -21
  342. package/dist/mediabunny/index.d.ts.map +0 -1
  343. package/dist/mediabunny/index.js +0 -33
  344. package/dist/mediabunny/index.js.map +0 -1
  345. package/dist/types.d.ts +0 -6
  346. package/dist/types.d.ts.map +0 -1
  347. package/dist/types.js +0 -6
  348. package/dist/types.js.map +0 -1
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Hardware Context Pool - Reuses GPU hardware contexts across encoders/decoders
3
+ *
4
+ * Creating hardware contexts (VAAPI, CUDA, QSV, etc.) has overhead.
5
+ * This pool maintains a set of reusable contexts to improve performance
6
+ * when encoding/decoding multiple streams or files sequentially.
7
+ */
8
+ import { HardwareContext } from 'node-av/api';
9
+ /**
10
+ * Configuration for the hardware context pool
11
+ */
12
+ export interface HardwarePoolConfig {
13
+ /** Maximum number of contexts to keep in the pool per device type */
14
+ maxContextsPerType?: number;
15
+ /** Time in ms after which unused contexts are disposed (default: 60000ms = 1 minute) */
16
+ idleTimeoutMs?: number;
17
+ /** Whether to automatically initialize contexts on first acquire (default: true) */
18
+ lazyInit?: boolean;
19
+ }
20
+ /**
21
+ * Pool for reusing hardware contexts
22
+ */
23
+ declare class HardwareContextPool {
24
+ private pools;
25
+ private config;
26
+ private cleanupTimer;
27
+ private disposed;
28
+ constructor(config?: HardwarePoolConfig);
29
+ /**
30
+ * Acquire a hardware context from the pool
31
+ * Creates a new one if none available
32
+ *
33
+ * @param preferredType - Preferred device type (vaapi, cuda, qsv, videotoolbox)
34
+ * @returns Hardware context or null if none available
35
+ */
36
+ acquire(preferredType?: string): HardwareContext | null;
37
+ /**
38
+ * Release a hardware context back to the pool
39
+ * The context will be reused by future acquire() calls
40
+ *
41
+ * @param context - The hardware context to release
42
+ */
43
+ release(context: HardwareContext | null): void;
44
+ /**
45
+ * Get pool statistics
46
+ */
47
+ stats(): {
48
+ deviceType: string;
49
+ total: number;
50
+ inUse: number;
51
+ idle: number;
52
+ }[];
53
+ /**
54
+ * Dispose all contexts and stop the pool
55
+ */
56
+ dispose(): void;
57
+ private acquireFromPool;
58
+ private acquireAnyAvailable;
59
+ private trackContext;
60
+ private disposeContext;
61
+ private startCleanupTimer;
62
+ private cleanupIdleContexts;
63
+ }
64
+ /**
65
+ * Get the global hardware context pool
66
+ * Creates one on first access with default configuration
67
+ */
68
+ export declare function getHardwarePool(): HardwareContextPool;
69
+ /**
70
+ * Initialize the global pool with custom configuration
71
+ * Should be called before first use if custom config is needed
72
+ */
73
+ export declare function initHardwarePool(config: HardwarePoolConfig): HardwareContextPool;
74
+ /**
75
+ * Dispose the global pool and release all contexts
76
+ * Call this when shutting down the application
77
+ */
78
+ export declare function disposeHardwarePool(): void;
79
+ /**
80
+ * Convenience function to acquire a hardware context from the global pool
81
+ */
82
+ export declare function acquireHardwareContext(preferredType?: string): HardwareContext | null;
83
+ /**
84
+ * Convenience function to release a hardware context back to the global pool
85
+ */
86
+ export declare function releaseHardwareContext(context: HardwareContext | null): void;
87
+ export { HardwareContextPool };
88
+ //# sourceMappingURL=hardware-pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hardware-pool.d.ts","sourceRoot":"","sources":["../../src/utils/hardware-pool.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAe9C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,qEAAqE;IACrE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wFAAwF;IACxF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAQD;;GAEG;AACH,cAAM,mBAAmB;IACvB,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,GAAE,kBAAuB;IAK3C;;;;;;OAMG;IACH,OAAO,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAoCvD;;;;;OAKG;IACH,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI;IAmC9C;;OAEG;IACH,KAAK,IAAI;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE;IAgB7E;;OAEG;IACH,OAAO,IAAI,IAAI;IAwBf,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,mBAAmB;CAsB5B;AAKD;;;GAGG;AACH,wBAAgB,eAAe,IAAI,mBAAmB,CAKrD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,GAAG,mBAAmB,CAMhF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAErF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI,CAE5E;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,266 @@
1
+ /**
2
+ * Hardware Context Pool - Reuses GPU hardware contexts across encoders/decoders
3
+ *
4
+ * Creating hardware contexts (VAAPI, CUDA, QSV, etc.) has overhead.
5
+ * This pool maintains a set of reusable contexts to improve performance
6
+ * when encoding/decoding multiple streams or files sequentially.
7
+ */
8
+ import { HardwareContext } from 'node-av/api';
9
+ import { createLogger } from './logger.js';
10
+ const logger = createLogger('HardwarePool');
11
+ const DEFAULT_CONFIG = {
12
+ maxContextsPerType: 2,
13
+ idleTimeoutMs: 60_000,
14
+ lazyInit: true,
15
+ };
16
+ /**
17
+ * Pool for reusing hardware contexts
18
+ */
19
+ class HardwareContextPool {
20
+ pools = new Map();
21
+ config;
22
+ cleanupTimer = null;
23
+ disposed = false;
24
+ constructor(config = {}) {
25
+ this.config = { ...DEFAULT_CONFIG, ...config };
26
+ this.startCleanupTimer();
27
+ }
28
+ /**
29
+ * Acquire a hardware context from the pool
30
+ * Creates a new one if none available
31
+ *
32
+ * @param preferredType - Preferred device type (vaapi, cuda, qsv, videotoolbox)
33
+ * @returns Hardware context or null if none available
34
+ */
35
+ acquire(preferredType) {
36
+ if (this.disposed) {
37
+ return null;
38
+ }
39
+ // Try to get from pool first
40
+ if (preferredType) {
41
+ const pooled = this.acquireFromPool(preferredType);
42
+ if (pooled) {
43
+ logger.debug(`Reusing ${preferredType} context from pool`);
44
+ return pooled;
45
+ }
46
+ }
47
+ // Try auto-detection
48
+ const pooled = this.acquireAnyAvailable();
49
+ if (pooled) {
50
+ return pooled;
51
+ }
52
+ // Create new context
53
+ try {
54
+ const context = HardwareContext.auto();
55
+ if (context) {
56
+ const deviceType = context.deviceTypeName || 'unknown';
57
+ logger.info(`Created new hardware context: ${deviceType}`);
58
+ this.trackContext(context, deviceType);
59
+ return context;
60
+ }
61
+ }
62
+ catch (err) {
63
+ logger.debug(`Failed to create hardware context: ${err.message}`);
64
+ }
65
+ return null;
66
+ }
67
+ /**
68
+ * Release a hardware context back to the pool
69
+ * The context will be reused by future acquire() calls
70
+ *
71
+ * @param context - The hardware context to release
72
+ */
73
+ release(context) {
74
+ if (!context || this.disposed) {
75
+ return;
76
+ }
77
+ const deviceType = context.deviceTypeName || 'unknown';
78
+ const pool = this.pools.get(deviceType);
79
+ if (!pool) {
80
+ // Context wasn't tracked, dispose it
81
+ this.disposeContext(context);
82
+ return;
83
+ }
84
+ const entry = pool.find(e => e.context === context);
85
+ if (entry) {
86
+ entry.inUse = false;
87
+ entry.lastUsed = Date.now();
88
+ logger.debug(`Released ${deviceType} context back to pool (uses: ${entry.useCount})`);
89
+ }
90
+ else {
91
+ // Context not in pool but matches type - add if pool not full
92
+ if (pool.length < this.config.maxContextsPerType) {
93
+ pool.push({
94
+ context,
95
+ inUse: false,
96
+ lastUsed: Date.now(),
97
+ useCount: 1,
98
+ });
99
+ logger.debug(`Added ${deviceType} context to pool`);
100
+ }
101
+ else {
102
+ this.disposeContext(context);
103
+ }
104
+ }
105
+ }
106
+ /**
107
+ * Get pool statistics
108
+ */
109
+ stats() {
110
+ const result = [];
111
+ for (const [deviceType, pool] of this.pools) {
112
+ const inUse = pool.filter(e => e.inUse).length;
113
+ result.push({
114
+ deviceType,
115
+ total: pool.length,
116
+ inUse,
117
+ idle: pool.length - inUse,
118
+ });
119
+ }
120
+ return result;
121
+ }
122
+ /**
123
+ * Dispose all contexts and stop the pool
124
+ */
125
+ dispose() {
126
+ if (this.disposed)
127
+ return;
128
+ this.disposed = true;
129
+ if (this.cleanupTimer) {
130
+ clearInterval(this.cleanupTimer);
131
+ this.cleanupTimer = null;
132
+ }
133
+ for (const [deviceType, pool] of this.pools) {
134
+ for (const entry of pool) {
135
+ this.disposeContext(entry.context);
136
+ }
137
+ logger.debug(`Disposed ${pool.length} ${deviceType} contexts`);
138
+ }
139
+ this.pools.clear();
140
+ logger.info('Hardware context pool disposed');
141
+ }
142
+ // ─────────────────────────────────────────────────────────────────────────────
143
+ // Private methods
144
+ // ─────────────────────────────────────────────────────────────────────────────
145
+ acquireFromPool(deviceType) {
146
+ const pool = this.pools.get(deviceType);
147
+ if (!pool)
148
+ return null;
149
+ const available = pool.find(e => !e.inUse);
150
+ if (available) {
151
+ available.inUse = true;
152
+ available.useCount++;
153
+ return available.context;
154
+ }
155
+ return null;
156
+ }
157
+ acquireAnyAvailable() {
158
+ for (const [deviceType, pool] of this.pools) {
159
+ const available = pool.find(e => !e.inUse);
160
+ if (available) {
161
+ available.inUse = true;
162
+ available.useCount++;
163
+ logger.debug(`Reusing ${deviceType} context from pool`);
164
+ return available.context;
165
+ }
166
+ }
167
+ return null;
168
+ }
169
+ trackContext(context, deviceType) {
170
+ let pool = this.pools.get(deviceType);
171
+ if (!pool) {
172
+ pool = [];
173
+ this.pools.set(deviceType, pool);
174
+ }
175
+ pool.push({
176
+ context,
177
+ inUse: true,
178
+ lastUsed: Date.now(),
179
+ useCount: 1,
180
+ });
181
+ }
182
+ disposeContext(context) {
183
+ try {
184
+ context.dispose();
185
+ }
186
+ catch (err) {
187
+ logger.debug(`Error disposing context: ${err.message}`);
188
+ }
189
+ }
190
+ startCleanupTimer() {
191
+ // Run cleanup every 10 seconds
192
+ this.cleanupTimer = setInterval(() => {
193
+ this.cleanupIdleContexts();
194
+ }, 10_000);
195
+ // Don't prevent process from exiting
196
+ if (this.cleanupTimer.unref) {
197
+ this.cleanupTimer.unref();
198
+ }
199
+ }
200
+ cleanupIdleContexts() {
201
+ const now = Date.now();
202
+ for (const [deviceType, pool] of this.pools) {
203
+ // Keep at least one context per type, remove extras that are idle
204
+ const keepCount = 1;
205
+ let removed = 0;
206
+ for (let i = pool.length - 1; i >= keepCount; i--) {
207
+ const entry = pool[i];
208
+ if (!entry.inUse && (now - entry.lastUsed) > this.config.idleTimeoutMs) {
209
+ pool.splice(i, 1);
210
+ this.disposeContext(entry.context);
211
+ removed++;
212
+ }
213
+ }
214
+ if (removed > 0) {
215
+ logger.debug(`Cleaned up ${removed} idle ${deviceType} contexts`);
216
+ }
217
+ }
218
+ }
219
+ }
220
+ // Singleton instance
221
+ let globalPool = null;
222
+ /**
223
+ * Get the global hardware context pool
224
+ * Creates one on first access with default configuration
225
+ */
226
+ export function getHardwarePool() {
227
+ if (!globalPool) {
228
+ globalPool = new HardwareContextPool();
229
+ }
230
+ return globalPool;
231
+ }
232
+ /**
233
+ * Initialize the global pool with custom configuration
234
+ * Should be called before first use if custom config is needed
235
+ */
236
+ export function initHardwarePool(config) {
237
+ if (globalPool) {
238
+ globalPool.dispose();
239
+ }
240
+ globalPool = new HardwareContextPool(config);
241
+ return globalPool;
242
+ }
243
+ /**
244
+ * Dispose the global pool and release all contexts
245
+ * Call this when shutting down the application
246
+ */
247
+ export function disposeHardwarePool() {
248
+ if (globalPool) {
249
+ globalPool.dispose();
250
+ globalPool = null;
251
+ }
252
+ }
253
+ /**
254
+ * Convenience function to acquire a hardware context from the global pool
255
+ */
256
+ export function acquireHardwareContext(preferredType) {
257
+ return getHardwarePool().acquire(preferredType);
258
+ }
259
+ /**
260
+ * Convenience function to release a hardware context back to the global pool
261
+ */
262
+ export function releaseHardwareContext(context) {
263
+ getHardwarePool().release(context);
264
+ }
265
+ export { HardwareContextPool };
266
+ //# sourceMappingURL=hardware-pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hardware-pool.js","sourceRoot":"","sources":["../../src/utils/hardware-pool.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;AAwB5C,MAAM,cAAc,GAAiC;IACnD,kBAAkB,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM;IACrB,QAAQ,EAAE,IAAI;CACf,CAAC;AAEF;;GAEG;AACH,MAAM,mBAAmB;IACf,KAAK,GAA6B,IAAI,GAAG,EAAE,CAAC;IAC5C,MAAM,CAA+B;IACrC,YAAY,GAA0B,IAAI,CAAC;IAC3C,QAAQ,GAAG,KAAK,CAAC;IAEzB,YAAY,SAA6B,EAAE;QACzC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;QAC/C,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED;;;;;;OAMG;IACH,OAAO,CAAC,aAAsB;QAC5B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,6BAA6B;QAC7B,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YACnD,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,KAAK,CAAC,WAAW,aAAa,oBAAoB,CAAC,CAAC;gBAC3D,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAED,qBAAqB;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC1C,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,qBAAqB;QACrB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,UAAU,GAAG,OAAO,CAAC,cAAc,IAAI,SAAS,CAAC;gBACvD,MAAM,CAAC,IAAI,CAAC,iCAAiC,UAAU,EAAE,CAAC,CAAC;gBAC3D,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;gBACvC,OAAO,OAAO,CAAC;YACjB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,sCAAuC,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/E,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,OAAO,CAAC,OAA+B;QACrC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,cAAc,IAAI,SAAS,CAAC;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAExC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,qCAAqC;YACrC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;QACpD,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;YACpB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC5B,MAAM,CAAC,KAAK,CAAC,YAAY,UAAU,gCAAgC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;QACxF,CAAC;aAAM,CAAC;YACN,8DAA8D;YAC9D,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;gBACjD,IAAI,CAAC,IAAI,CAAC;oBACR,OAAO;oBACP,KAAK,EAAE,KAAK;oBACZ,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;oBACpB,QAAQ,EAAE,CAAC;iBACZ,CAAC,CAAC;gBACH,MAAM,CAAC,KAAK,CAAC,SAAS,UAAU,kBAAkB,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK;QACH,MAAM,MAAM,GAAyE,EAAE,CAAC;QAExF,KAAK,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC;gBACV,UAAU;gBACV,KAAK,EAAE,IAAI,CAAC,MAAM;gBAClB,KAAK;gBACL,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK;aAC1B,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACjC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;QAED,KAAK,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC5C,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;gBACzB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACrC,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,MAAM,IAAI,UAAU,WAAW,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAChD,CAAC;IAED,gFAAgF;IAChF,kBAAkB;IAClB,gFAAgF;IAExE,eAAe,CAAC,UAAkB;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC;YACvB,SAAS,CAAC,QAAQ,EAAE,CAAC;YACrB,OAAO,SAAS,CAAC,OAAO,CAAC;QAC3B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,mBAAmB;QACzB,KAAK,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,SAAS,EAAE,CAAC;gBACd,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC;gBACvB,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACrB,MAAM,CAAC,KAAK,CAAC,WAAW,UAAU,oBAAoB,CAAC,CAAC;gBACxD,OAAO,SAAS,CAAC,OAAO,CAAC;YAC3B,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,YAAY,CAAC,OAAwB,EAAE,UAAkB;QAC/D,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,EAAE,CAAC;YACV,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC;YACR,OAAO;YACP,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;YACpB,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAEO,cAAc,CAAC,OAAwB;QAC7C,IAAI,CAAC;YACH,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,4BAA6B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAEO,iBAAiB;QACvB,+BAA+B;QAC/B,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;YACnC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,CAAC,EAAE,MAAM,CAAC,CAAC;QAEX,qCAAqC;QACrC,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YAC5B,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAEO,mBAAmB;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,KAAK,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC5C,kEAAkE;YAClE,MAAM,SAAS,GAAG,CAAC,CAAC;YACpB,IAAI,OAAO,GAAG,CAAC,CAAC;YAEhB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClD,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;oBACvE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAClB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBACnC,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;YAED,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAChB,MAAM,CAAC,KAAK,CAAC,cAAc,OAAO,SAAS,UAAU,WAAW,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED,qBAAqB;AACrB,IAAI,UAAU,GAA+B,IAAI,CAAC;AAElD;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,UAAU,GAAG,IAAI,mBAAmB,EAAE,CAAC;IACzC,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAA0B;IACzD,IAAI,UAAU,EAAE,CAAC;QACf,UAAU,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;IACD,UAAU,GAAG,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC7C,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,IAAI,UAAU,EAAE,CAAC;QACf,UAAU,CAAC,OAAO,EAAE,CAAC;QACrB,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,aAAsB;IAC3D,OAAO,eAAe,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAA+B;IACpE,eAAe,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -9,4 +9,9 @@ export { parseAvcDecoderConfig, convertAvccToAnnexB, splitAnnexBNals, extractAvc
9
9
  export { parseHvccDecoderConfig, convertHvccToAnnexB, splitHevcAnnexBNals, extractHevcParameterSetsFromAnnexB, buildHvccDecoderConfig, convertAnnexBToHvcc, type HvccConfig, } from './hevc.js';
10
10
  export { parseAudioSpecificConfig, wrapAacFrameWithAdts, buildAudioSpecificConfig, stripAdtsHeader, type AacConfig, } from './aac.js';
11
11
  export { WebCodecsEventTarget, type EventListener, type EventListenerOptions, } from './event-target.js';
12
+ export { getCodecBase, parseCodec, getVideoCodecName, getAudioCodecName, isVideoCodec, isAudioCodec, clearCodecCache, type ParsedCodec, type VideoCodecName, type AudioCodecName, } from './codec-cache.js';
13
+ export { withTimeout, createTimeoutWrapper, createTimeoutAbortController, DEFAULT_TIMEOUTS, } from './timeout.js';
14
+ export { createWebCodecsError, invalidStateError, notSupportedError, dataError, encodingError, abortError, quotaExceededError, timeoutError, wrapAsWebCodecsError, isWebCodecsError, type WebCodecsErrorName, } from './errors.js';
15
+ export { HardwareContextPool, getHardwarePool, initHardwarePool, disposeHardwarePool, acquireHardwareContext, releaseHardwareContext, type HardwarePoolConfig, } from './hardware-pool.js';
16
+ export { BufferPool, getBufferPool, initBufferPool, disposeBufferPool, acquireBuffer, releaseBuffer, type BufferPoolConfig, type BufferPoolStats, } from './buffer-pool.js';
12
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,KAAK,QAAQ,EACb,KAAK,QAAQ,GACd,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,cAAc,GACpB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,iCAAiC,EACjC,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,SAAS,GACf,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,kCAAkC,EAClC,sBAAsB,EACtB,mBAAmB,EACnB,KAAK,UAAU,GAChB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,eAAe,EACf,KAAK,SAAS,GACf,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,oBAAoB,EACpB,KAAK,aAAa,EAClB,KAAK,oBAAoB,GAC1B,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,KAAK,QAAQ,EACb,KAAK,QAAQ,GACd,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,cAAc,GACpB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,iCAAiC,EACjC,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,SAAS,GACf,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,kCAAkC,EAClC,sBAAsB,EACtB,mBAAmB,EACnB,KAAK,UAAU,GAChB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,eAAe,EACf,KAAK,SAAS,GACf,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,oBAAoB,EACpB,KAAK,aAAa,EAClB,KAAK,oBAAoB,GAC1B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,cAAc,GACpB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,4BAA4B,EAC5B,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC"}
@@ -15,4 +15,14 @@ export { parseHvccDecoderConfig, convertHvccToAnnexB, splitHevcAnnexBNals, extra
15
15
  export { parseAudioSpecificConfig, wrapAacFrameWithAdts, buildAudioSpecificConfig, stripAdtsHeader, } from './aac.js';
16
16
  // EventTarget support
17
17
  export { WebCodecsEventTarget, } from './event-target.js';
18
+ // Codec caching utilities
19
+ export { getCodecBase, parseCodec, getVideoCodecName, getAudioCodecName, isVideoCodec, isAudioCodec, clearCodecCache, } from './codec-cache.js';
20
+ // Timeout utilities
21
+ export { withTimeout, createTimeoutWrapper, createTimeoutAbortController, DEFAULT_TIMEOUTS, } from './timeout.js';
22
+ // Error utilities
23
+ export { createWebCodecsError, invalidStateError, notSupportedError, dataError, encodingError, abortError, quotaExceededError, timeoutError, wrapAsWebCodecsError, isWebCodecsError, } from './errors.js';
24
+ // Hardware context pooling
25
+ export { HardwareContextPool, getHardwarePool, initHardwarePool, disposeHardwarePool, acquireHardwareContext, releaseHardwareContext, } from './hardware-pool.js';
26
+ // Buffer pooling for efficient memory reuse
27
+ export { BufferPool, getBufferPool, initBufferPool, disposeBufferPool, acquireBuffer, releaseBuffer, } from './buffer-pool.js';
18
28
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,mBAAmB;AACnB,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AAErB,uBAAuB;AACvB,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAEzB,SAAS;AACT,OAAO,EACL,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,WAAW,GAGZ,MAAM,aAAa,CAAC;AAErB,cAAc;AACd,OAAO,EACL,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,GAIpB,MAAM,kBAAkB,CAAC;AAE1B,gBAAgB;AAChB,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,iCAAiC,EACjC,qBAAqB,EACrB,mBAAmB,GAEpB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,kCAAkC,EAClC,sBAAsB,EACtB,mBAAmB,GAEpB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,eAAe,GAEhB,MAAM,UAAU,CAAC;AAElB,sBAAsB;AACtB,OAAO,EACL,oBAAoB,GAGrB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,mBAAmB;AACnB,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AAErB,uBAAuB;AACvB,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAEzB,SAAS;AACT,OAAO,EACL,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,WAAW,GAGZ,MAAM,aAAa,CAAC;AAErB,cAAc;AACd,OAAO,EACL,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,GAIpB,MAAM,kBAAkB,CAAC;AAE1B,gBAAgB;AAChB,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,iCAAiC,EACjC,qBAAqB,EACrB,mBAAmB,GAEpB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,kCAAkC,EAClC,sBAAsB,EACtB,mBAAmB,GAEpB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,eAAe,GAEhB,MAAM,UAAU,CAAC;AAElB,sBAAsB;AACtB,OAAO,EACL,oBAAoB,GAGrB,MAAM,mBAAmB,CAAC;AAE3B,0BAA0B;AAC1B,OAAO,EACL,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,eAAe,GAIhB,MAAM,kBAAkB,CAAC;AAE1B,oBAAoB;AACpB,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,4BAA4B,EAC5B,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,kBAAkB;AAClB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,GAEjB,MAAM,aAAa,CAAC;AAErB,2BAA2B;AAC3B,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,GAEvB,MAAM,oBAAoB,CAAC;AAE5B,4CAA4C;AAC5C,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,aAAa,GAGd,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Timeout utilities for async operations
3
+ */
4
+ /**
5
+ * Default timeout values in milliseconds
6
+ */
7
+ export declare const DEFAULT_TIMEOUTS: {
8
+ /** Timeout for encoder/decoder configuration */
9
+ readonly configure: 10000;
10
+ /** Timeout for flush operations */
11
+ readonly flush: 30000;
12
+ /** Timeout for muxer/demuxer open operations */
13
+ readonly open: 15000;
14
+ /** Timeout for close operations */
15
+ readonly close: 10000;
16
+ };
17
+ /**
18
+ * Wrap a promise with a timeout
19
+ *
20
+ * @param promise - The promise to wrap
21
+ * @param timeoutMs - Timeout in milliseconds
22
+ * @param operationName - Name of the operation for error messages
23
+ * @returns The result of the promise
24
+ * @throws DOMException with TimeoutError if timeout is exceeded
25
+ */
26
+ export declare function withTimeout<T>(promise: Promise<T>, timeoutMs: number, operationName?: string): Promise<T>;
27
+ /**
28
+ * Create a timeout-wrapped version of an async function
29
+ *
30
+ * @param fn - The async function to wrap
31
+ * @param timeoutMs - Timeout in milliseconds
32
+ * @param operationName - Name of the operation for error messages
33
+ * @returns A wrapped function that will timeout
34
+ */
35
+ export declare function createTimeoutWrapper<T extends (...args: any[]) => Promise<any>>(fn: T, timeoutMs: number, operationName: string): T;
36
+ /**
37
+ * Abort controller with timeout
38
+ * Useful for operations that support AbortSignal
39
+ */
40
+ export declare function createTimeoutAbortController(timeoutMs: number): {
41
+ controller: AbortController;
42
+ cleanup: () => void;
43
+ };
44
+ //# sourceMappingURL=timeout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../src/utils/timeout.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,eAAO,MAAM,gBAAgB;IAC3B,gDAAgD;;IAEhD,mCAAmC;;IAEnC,gDAAgD;;IAEhD,mCAAmC;;CAE3B,CAAC;AAEX;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,SAAS,EAAE,MAAM,EACjB,aAAa,GAAE,MAAoB,GAClC,OAAO,CAAC,CAAC,CAAC,CAoBZ;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,EAC7E,EAAE,EAAE,CAAC,EACL,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GACpB,CAAC,CAIH;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG;IAC/D,UAAU,EAAE,eAAe,CAAC;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAUA"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Timeout utilities for async operations
3
+ */
4
+ import { DOMException } from '../types/index.js';
5
+ /**
6
+ * Default timeout values in milliseconds
7
+ */
8
+ export const DEFAULT_TIMEOUTS = {
9
+ /** Timeout for encoder/decoder configuration */
10
+ configure: 10_000,
11
+ /** Timeout for flush operations */
12
+ flush: 30_000,
13
+ /** Timeout for muxer/demuxer open operations */
14
+ open: 15_000,
15
+ /** Timeout for close operations */
16
+ close: 10_000,
17
+ };
18
+ /**
19
+ * Wrap a promise with a timeout
20
+ *
21
+ * @param promise - The promise to wrap
22
+ * @param timeoutMs - Timeout in milliseconds
23
+ * @param operationName - Name of the operation for error messages
24
+ * @returns The result of the promise
25
+ * @throws DOMException with TimeoutError if timeout is exceeded
26
+ */
27
+ export async function withTimeout(promise, timeoutMs, operationName = 'Operation') {
28
+ let timeoutId = null;
29
+ const timeoutPromise = new Promise((_, reject) => {
30
+ timeoutId = setTimeout(() => {
31
+ reject(new DOMException(`${operationName} timed out after ${timeoutMs}ms`, 'TimeoutError'));
32
+ }, timeoutMs);
33
+ });
34
+ try {
35
+ const result = await Promise.race([promise, timeoutPromise]);
36
+ if (timeoutId)
37
+ clearTimeout(timeoutId);
38
+ return result;
39
+ }
40
+ catch (error) {
41
+ if (timeoutId)
42
+ clearTimeout(timeoutId);
43
+ throw error;
44
+ }
45
+ }
46
+ /**
47
+ * Create a timeout-wrapped version of an async function
48
+ *
49
+ * @param fn - The async function to wrap
50
+ * @param timeoutMs - Timeout in milliseconds
51
+ * @param operationName - Name of the operation for error messages
52
+ * @returns A wrapped function that will timeout
53
+ */
54
+ export function createTimeoutWrapper(fn, timeoutMs, operationName) {
55
+ return (async (...args) => {
56
+ return withTimeout(fn(...args), timeoutMs, operationName);
57
+ });
58
+ }
59
+ /**
60
+ * Abort controller with timeout
61
+ * Useful for operations that support AbortSignal
62
+ */
63
+ export function createTimeoutAbortController(timeoutMs) {
64
+ const controller = new AbortController();
65
+ const timeoutId = setTimeout(() => {
66
+ controller.abort(new DOMException('Operation timed out', 'TimeoutError'));
67
+ }, timeoutMs);
68
+ return {
69
+ controller,
70
+ cleanup: () => clearTimeout(timeoutId),
71
+ };
72
+ }
73
+ //# sourceMappingURL=timeout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout.js","sourceRoot":"","sources":["../../src/utils/timeout.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,gDAAgD;IAChD,SAAS,EAAE,MAAM;IACjB,mCAAmC;IACnC,KAAK,EAAE,MAAM;IACb,gDAAgD;IAChD,IAAI,EAAE,MAAM;IACZ,mCAAmC;IACnC,KAAK,EAAE,MAAM;CACL,CAAC;AAEX;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAmB,EACnB,SAAiB,EACjB,gBAAwB,WAAW;IAEnC,IAAI,SAAS,GAA0B,IAAI,CAAC;IAE5C,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QACtD,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC1B,MAAM,CAAC,IAAI,YAAY,CACrB,GAAG,aAAa,oBAAoB,SAAS,IAAI,EACjD,cAAc,CACf,CAAC,CAAC;QACL,CAAC,EAAE,SAAS,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;QAC7D,IAAI,SAAS;YAAE,YAAY,CAAC,SAAS,CAAC,CAAC;QACvC,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,SAAS;YAAE,YAAY,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAClC,EAAK,EACL,SAAiB,EACjB,aAAqB;IAErB,OAAO,CAAC,KAAK,EAAE,GAAG,IAAmB,EAA0B,EAAE;QAC/D,OAAO,WAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IAC5D,CAAC,CAAM,CAAC;AACV,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAAC,SAAiB;IAI5D,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;QAChC,UAAU,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,qBAAqB,EAAE,cAAc,CAAC,CAAC,CAAC;IAC5E,CAAC,EAAE,SAAS,CAAC,CAAC;IAEd,OAAO;QACL,UAAU;QACV,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC;KACvC,CAAC;AACJ,CAAC"}
@@ -24,9 +24,19 @@ export interface CanvasLike {
24
24
  export interface VideoFrameLike {
25
25
  codedWidth: number;
26
26
  codedHeight: number;
27
- format: string;
27
+ format: string | null;
28
28
  timestamp: number;
29
29
  duration?: number | null;
30
+ displayWidth: number;
31
+ displayHeight: number;
32
+ visibleRect?: {
33
+ x: number;
34
+ y: number;
35
+ width: number;
36
+ height: number;
37
+ } | null;
38
+ allocationSize?: (options?: unknown) => number;
39
+ copyTo?: (dest: Uint8Array, options?: unknown) => void;
30
40
  _buffer?: Uint8Array;
31
41
  _rawData?: Uint8Array;
32
42
  _data?: Uint8Array;
@@ -1 +1 @@
1
- {"version":3,"file":"type-guards.d.ts","sourceRoot":"","sources":["../../src/utils/type-guards.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,iBAAiB,GAAG,UAAU,CAAC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC;IACzD,aAAa,CAAC,EAAE,MAAM,iBAAiB,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,aAAa,CAQlE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,UAAU,CAQ5D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,cAAc,CASpE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAQzD"}
1
+ {"version":3,"file":"type-guards.d.ts","sourceRoot":"","sources":["../../src/utils/type-guards.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,iBAAiB,GAAG,UAAU,CAAC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC;IACzD,aAAa,CAAC,EAAE,MAAM,iBAAiB,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7E,cAAc,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,MAAM,CAAC;IAC/C,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACvD,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,aAAa,CAQlE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,UAAU,CAQ5D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,cAAc,CASpE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAQzD"}
@@ -1 +1 @@
1
- {"version":3,"file":"type-guards.js","sourceRoot":"","sources":["../../src/utils/type-guards.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmCH;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,OAAO,CACL,CAAC,CAAC,CAAC,IAAI,YAAY,iBAAiB,IAAI,CAAC,CAAC,IAAI,YAAY,UAAU,CAAC;QACrE,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;QAC3B,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAC7B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,OAAO,CACL,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;QAC3B,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;QAC5B,OAAO,CAAC,CAAC,UAAU,KAAK,UAAU,CACnC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,OAAO,CACL,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ;QAChC,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ;QACjC,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;QAC5B,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,CAChC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,OAAO,CACL,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC;QAC7D,CAAC,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,CAAC;QACvE,eAAe,CAAC,GAAG,CAAC,CACrB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"type-guards.js","sourceRoot":"","sources":["../../src/utils/type-guards.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwCH;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,OAAO,CACL,CAAC,CAAC,CAAC,IAAI,YAAY,iBAAiB,IAAI,CAAC,CAAC,IAAI,YAAY,UAAU,CAAC;QACrE,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;QAC3B,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAC7B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,OAAO,CACL,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;QAC3B,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;QAC5B,OAAO,CAAC,CAAC,UAAU,KAAK,UAAU,CACnC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,OAAO,CACL,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ;QAChC,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ;QACjC,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;QAC5B,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,CAChC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,OAAO,CACL,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC;QAC7D,CAAC,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,CAAC;QACvE,eAAe,CAAC,GAAG,CAAC,CACrB,CAAC;AACJ,CAAC"}