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,8 @@
1
+ /**
2
+ * Frame parsers for different container formats
3
+ */
4
+ // IVF parser (VP8, VP9, AV1)
5
+ export { IVF_HEADER_SIZE, IVF_FRAME_HEADER_SIZE, IVF_SIGNATURE, createIvfParserState, validateIvfSignature, parseIvfFrames, isVP9KeyFrame, isVP8KeyFrame, isAV1KeyFrame, } from './ivf.js';
6
+ // Annex B parser (H.264, HEVC)
7
+ export { H264_NAL_TYPES, HEVC_NAL_TYPES, createAnnexBParserState, getNalType, isAudNal, findStartCode, findAudPositions, isH264KeyFrame, isHEVCKeyFrame, isKeyFrame, parseAnnexBFrames, flushAnnexBParser, } from './annexb.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ffmpeg/parsers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,6BAA6B;AAC7B,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,aAAa,EACb,aAAa,EACb,aAAa,GAEd,MAAM,UAAU,CAAC;AAElB,+BAA+B;AAC/B,OAAO,EACL,cAAc,EACd,cAAc,EACd,uBAAuB,EACvB,UAAU,EACV,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,iBAAiB,GAElB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * IVF container parser
3
+ *
4
+ * IVF format (used for VP8, VP9, AV1):
5
+ * - 32-byte file header
6
+ * - Per frame: 4-byte size (LE) + 8-byte timestamp (LE) + frame data
7
+ */
8
+ import type { EncodedFrameData } from '../types.js';
9
+ /** IVF file header size */
10
+ export declare const IVF_HEADER_SIZE = 32;
11
+ /** IVF frame header size (size + timestamp) */
12
+ export declare const IVF_FRAME_HEADER_SIZE = 12;
13
+ /** IVF file signature */
14
+ export declare const IVF_SIGNATURE = "DKIF";
15
+ /**
16
+ * IVF parser state
17
+ */
18
+ export interface IvfParserState {
19
+ headerParsed: boolean;
20
+ buffer: Buffer;
21
+ }
22
+ /**
23
+ * Create initial IVF parser state
24
+ */
25
+ export declare function createIvfParserState(): IvfParserState;
26
+ /**
27
+ * Validate IVF file signature
28
+ */
29
+ export declare function validateIvfSignature(data: Buffer): boolean;
30
+ /**
31
+ * Parse IVF frames from accumulated data
32
+ *
33
+ * @param state - Parser state (mutated)
34
+ * @param newData - New data to append
35
+ * @param isKeyFrame - Function to determine if frame is a keyframe
36
+ * @returns Array of parsed frames
37
+ */
38
+ export declare function parseIvfFrames(state: IvfParserState, newData: Buffer, isKeyFrame: (data: Buffer) => boolean): EncodedFrameData[];
39
+ /**
40
+ * Check if VP9 frame is a keyframe
41
+ * VP9: frame_type bit in frame header (0 = keyframe)
42
+ */
43
+ export declare function isVP9KeyFrame(data: Buffer): boolean;
44
+ /**
45
+ * Check if VP8 frame is a keyframe
46
+ * VP8: keyframe indicated by bit in frame tag
47
+ */
48
+ export declare function isVP8KeyFrame(data: Buffer): boolean;
49
+ /**
50
+ * Check if AV1 frame is a keyframe
51
+ * Simplified check - real implementation would parse OBU headers
52
+ */
53
+ export declare function isAV1KeyFrame(data: Buffer): boolean;
54
+ //# sourceMappingURL=ivf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ivf.d.ts","sourceRoot":"","sources":["../../../src/ffmpeg/parsers/ivf.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,2BAA2B;AAC3B,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC,+CAA+C;AAC/C,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC,yBAAyB;AACzB,eAAO,MAAM,aAAa,SAAS,CAAC;AAEpC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAKrD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG1D;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GACpC,gBAAgB,EAAE,CA2CpB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKnD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKnD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOnD"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * IVF container parser
3
+ *
4
+ * IVF format (used for VP8, VP9, AV1):
5
+ * - 32-byte file header
6
+ * - Per frame: 4-byte size (LE) + 8-byte timestamp (LE) + frame data
7
+ */
8
+ /** IVF file header size */
9
+ export const IVF_HEADER_SIZE = 32;
10
+ /** IVF frame header size (size + timestamp) */
11
+ export const IVF_FRAME_HEADER_SIZE = 12;
12
+ /** IVF file signature */
13
+ export const IVF_SIGNATURE = 'DKIF';
14
+ /**
15
+ * Create initial IVF parser state
16
+ */
17
+ export function createIvfParserState() {
18
+ return {
19
+ headerParsed: false,
20
+ buffer: Buffer.alloc(0),
21
+ };
22
+ }
23
+ /**
24
+ * Validate IVF file signature
25
+ */
26
+ export function validateIvfSignature(data) {
27
+ if (data.length < 4)
28
+ return false;
29
+ return data.subarray(0, 4).toString() === IVF_SIGNATURE;
30
+ }
31
+ /**
32
+ * Parse IVF frames from accumulated data
33
+ *
34
+ * @param state - Parser state (mutated)
35
+ * @param newData - New data to append
36
+ * @param isKeyFrame - Function to determine if frame is a keyframe
37
+ * @returns Array of parsed frames
38
+ */
39
+ export function parseIvfFrames(state, newData, isKeyFrame) {
40
+ const frames = [];
41
+ // Append new data
42
+ state.buffer = Buffer.concat([state.buffer, newData]);
43
+ // Skip 32-byte IVF file header
44
+ if (!state.headerParsed) {
45
+ if (state.buffer.length < IVF_HEADER_SIZE) {
46
+ return frames; // Wait for more data
47
+ }
48
+ // Verify IVF signature "DKIF"
49
+ if (!validateIvfSignature(state.buffer)) {
50
+ const signature = state.buffer.subarray(0, 4).toString();
51
+ throw new Error(`Invalid IVF signature: ${signature}`);
52
+ }
53
+ state.buffer = state.buffer.subarray(IVF_HEADER_SIZE);
54
+ state.headerParsed = true;
55
+ }
56
+ // Parse frames: 4-byte size + 8-byte timestamp + data
57
+ while (state.buffer.length >= IVF_FRAME_HEADER_SIZE) {
58
+ const frameSize = state.buffer.readUInt32LE(0);
59
+ const timestamp = Number(state.buffer.readBigUInt64LE(4));
60
+ const totalFrameSize = IVF_FRAME_HEADER_SIZE + frameSize;
61
+ if (state.buffer.length < totalFrameSize) {
62
+ break; // Wait for more data
63
+ }
64
+ const frameData = state.buffer.subarray(IVF_FRAME_HEADER_SIZE, totalFrameSize);
65
+ state.buffer = state.buffer.subarray(totalFrameSize);
66
+ frames.push({
67
+ data: Buffer.from(frameData), // Copy the data
68
+ timestamp,
69
+ keyFrame: isKeyFrame(frameData),
70
+ });
71
+ }
72
+ return frames;
73
+ }
74
+ /**
75
+ * Check if VP9 frame is a keyframe
76
+ * VP9: frame_type bit in frame header (0 = keyframe)
77
+ */
78
+ export function isVP9KeyFrame(data) {
79
+ if (data.length === 0)
80
+ return false;
81
+ // VP9: check frame_type bit (bit 1 of first byte)
82
+ // frame_type = 0 means keyframe
83
+ return (data[0] & 0x02) === 0;
84
+ }
85
+ /**
86
+ * Check if VP8 frame is a keyframe
87
+ * VP8: keyframe indicated by bit in frame tag
88
+ */
89
+ export function isVP8KeyFrame(data) {
90
+ if (data.length === 0)
91
+ return false;
92
+ // VP8: keyframe has specific frame tag
93
+ // First bit of first byte indicates frame type (0 = key)
94
+ return (data[0] & 0x01) === 0;
95
+ }
96
+ /**
97
+ * Check if AV1 frame is a keyframe
98
+ * Simplified check - real implementation would parse OBU headers
99
+ */
100
+ export function isAV1KeyFrame(data) {
101
+ if (data.length < 2)
102
+ return false;
103
+ // AV1 OBU header parsing - simplified
104
+ // This is a basic heuristic; full parsing would check OBU types
105
+ const obuType = (data[0] >> 3) & 0x0f;
106
+ // OBU_SEQUENCE_HEADER (type 1) usually indicates keyframe area
107
+ return obuType === 1;
108
+ }
109
+ //# sourceMappingURL=ivf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ivf.js","sourceRoot":"","sources":["../../../src/ffmpeg/parsers/ivf.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * FFmpeg configuration types
3
+ */
4
+ /**
5
+ * FFmpeg process configuration
6
+ */
7
+ export interface FFmpegConfig {
8
+ input: FFmpegInputConfig;
9
+ output: FFmpegOutputConfig;
10
+ }
11
+ /**
12
+ * FFmpeg input configuration
13
+ */
14
+ export interface FFmpegInputConfig {
15
+ format: string;
16
+ codec?: string;
17
+ width?: number;
18
+ height?: number;
19
+ framerate?: number;
20
+ pixelFormat?: string;
21
+ }
22
+ /**
23
+ * FFmpeg output configuration
24
+ */
25
+ export interface FFmpegOutputConfig {
26
+ format: string;
27
+ codec?: string;
28
+ width?: number;
29
+ height?: number;
30
+ framerate?: number;
31
+ pixelFormat?: string;
32
+ bitrate?: number;
33
+ }
34
+ /**
35
+ * Encoded frame data emitted by parsers
36
+ */
37
+ export interface EncodedFrameData {
38
+ data: Buffer;
39
+ timestamp: number;
40
+ keyFrame: boolean;
41
+ }
42
+ /**
43
+ * Decoder configuration for FFmpegProcess
44
+ */
45
+ export interface DecoderConfig {
46
+ codec: string;
47
+ width: number;
48
+ height: number;
49
+ outputPixelFormat?: string;
50
+ hardwareDecoderArgs?: string[];
51
+ hardwareDownloadFilter?: string;
52
+ }
53
+ /**
54
+ * Bitrate mode for encoding
55
+ * - 'constant': Constant bitrate (CBR) - predictable file size, may vary quality
56
+ * - 'variable': Variable bitrate (VBR) - better quality, less predictable size
57
+ * - 'quantizer': Fixed quality mode (CRF/CQ) - consistent quality, variable size
58
+ */
59
+ export type BitrateMode = 'constant' | 'variable' | 'quantizer';
60
+ /**
61
+ * Alpha channel handling mode
62
+ * - 'discard': Drop alpha channel (default, works with all codecs)
63
+ * - 'keep': Preserve alpha channel (only VP9 and AV1 support this)
64
+ */
65
+ export type AlphaOption = 'discard' | 'keep';
66
+ /**
67
+ * Encoder configuration for FFmpegProcess
68
+ */
69
+ export interface EncoderConfig {
70
+ codec: string;
71
+ width: number;
72
+ height: number;
73
+ inputPixelFormat?: string;
74
+ framerate?: number;
75
+ bitrate?: number;
76
+ bitrateMode?: BitrateMode;
77
+ latencyMode?: 'quality' | 'realtime';
78
+ alpha?: AlphaOption;
79
+ hardwareEncoderArgs?: string[];
80
+ }
81
+ /** Default timeout for graceful shutdown (ms) */
82
+ export declare const DEFAULT_SHUTDOWN_TIMEOUT = 5000;
83
+ /** Default timeout for flush operations (ms) */
84
+ export declare const DEFAULT_FLUSH_TIMEOUT = 30000;
85
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ffmpeg/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,iBAAiB,CAAC;IACzB,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;AAEhE;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IACrC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC;AAED,iDAAiD;AACjD,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C,gDAAgD;AAChD,eAAO,MAAM,qBAAqB,QAAQ,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * FFmpeg configuration types
3
+ */
4
+ /** Default timeout for graceful shutdown (ms) */
5
+ export const DEFAULT_SHUTDOWN_TIMEOUT = 5000;
6
+ /** Default timeout for flush operations (ms) */
7
+ export const DEFAULT_FLUSH_TIMEOUT = 30000;
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/ffmpeg/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAuFH,iDAAiD;AACjD,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAE7C,gDAAgD;AAChD,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Audio format utilities
3
+ *
4
+ * Provides utilities for working with audio sample formats,
5
+ * including conversion between different formats.
6
+ */
7
+ /**
8
+ * Audio sample formats supported by WebCodecs
9
+ * - Interleaved formats: samples for all channels are interleaved
10
+ * - Planar formats: each channel has its own plane
11
+ */
12
+ export type AudioSampleFormat = 'u8' | 's16' | 's32' | 'f32' | 'u8-planar' | 's16-planar' | 's32-planar' | 'f32-planar';
13
+ /**
14
+ * Bytes per sample for each format
15
+ */
16
+ export declare const BYTES_PER_SAMPLE: Record<AudioSampleFormat, number>;
17
+ /**
18
+ * Check if format is planar
19
+ */
20
+ export declare function isPlanarFormat(format: AudioSampleFormat): boolean;
21
+ /**
22
+ * Check if format is interleaved
23
+ */
24
+ export declare function isInterleavedFormat(format: AudioSampleFormat): boolean;
25
+ /**
26
+ * Get the base format type (without -planar suffix)
27
+ */
28
+ export declare function getBaseFormat(format: AudioSampleFormat): 'u8' | 's16' | 's32' | 'f32';
29
+ /**
30
+ * Get the planar version of a format
31
+ */
32
+ export declare function toPlanarFormat(format: AudioSampleFormat): AudioSampleFormat;
33
+ /**
34
+ * Get the interleaved version of a format
35
+ */
36
+ export declare function toInterleavedFormat(format: AudioSampleFormat): AudioSampleFormat;
37
+ /**
38
+ * Calculate the size in bytes for audio data
39
+ */
40
+ export declare function calculateAudioDataSize(format: AudioSampleFormat, numberOfFrames: number, numberOfChannels: number): number;
41
+ /**
42
+ * Calculate the allocation size for a single plane
43
+ */
44
+ export declare function calculatePlaneSize(format: AudioSampleFormat, numberOfFrames: number, numberOfChannels: number): number;
45
+ /**
46
+ * Get the number of planes for a format
47
+ */
48
+ export declare function getNumberOfPlanes(format: AudioSampleFormat, numberOfChannels: number): number;
49
+ /**
50
+ * FFmpeg audio format mapping
51
+ */
52
+ export declare const FFMPEG_AUDIO_FORMAT_MAP: Record<AudioSampleFormat, string>;
53
+ /**
54
+ * Convert audio sample format to FFmpeg format string
55
+ */
56
+ export declare function audioFormatToFFmpeg(format: AudioSampleFormat): string;
57
+ /**
58
+ * Convert FFmpeg format to audio sample format
59
+ */
60
+ export declare function ffmpegToAudioFormat(ffmpegFormat: string): AudioSampleFormat | null;
61
+ //# sourceMappingURL=audio-formats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-formats.d.ts","sourceRoot":"","sources":["../../src/formats/audio-formats.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GACzB,IAAI,GACJ,KAAK,GACL,KAAK,GACL,KAAK,GACL,WAAW,GACX,YAAY,GACZ,YAAY,GACZ,YAAY,CAAC;AAEjB;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAS9D,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAEjE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAEtE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAErF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,CAG3E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,CAGhF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,iBAAiB,EACzB,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,iBAAiB,EACzB,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAMR;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAE7F;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CASrE,CAAC;AAEF;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAErE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAalF"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Audio format utilities
3
+ *
4
+ * Provides utilities for working with audio sample formats,
5
+ * including conversion between different formats.
6
+ */
7
+ /**
8
+ * Bytes per sample for each format
9
+ */
10
+ export const BYTES_PER_SAMPLE = {
11
+ 'u8': 1,
12
+ 's16': 2,
13
+ 's32': 4,
14
+ 'f32': 4,
15
+ 'u8-planar': 1,
16
+ 's16-planar': 2,
17
+ 's32-planar': 4,
18
+ 'f32-planar': 4,
19
+ };
20
+ /**
21
+ * Check if format is planar
22
+ */
23
+ export function isPlanarFormat(format) {
24
+ return format.endsWith('-planar');
25
+ }
26
+ /**
27
+ * Check if format is interleaved
28
+ */
29
+ export function isInterleavedFormat(format) {
30
+ return !format.endsWith('-planar');
31
+ }
32
+ /**
33
+ * Get the base format type (without -planar suffix)
34
+ */
35
+ export function getBaseFormat(format) {
36
+ return format.replace('-planar', '');
37
+ }
38
+ /**
39
+ * Get the planar version of a format
40
+ */
41
+ export function toPlanarFormat(format) {
42
+ if (isPlanarFormat(format))
43
+ return format;
44
+ return `${format}-planar`;
45
+ }
46
+ /**
47
+ * Get the interleaved version of a format
48
+ */
49
+ export function toInterleavedFormat(format) {
50
+ if (isInterleavedFormat(format))
51
+ return format;
52
+ return format.replace('-planar', '');
53
+ }
54
+ /**
55
+ * Calculate the size in bytes for audio data
56
+ */
57
+ export function calculateAudioDataSize(format, numberOfFrames, numberOfChannels) {
58
+ const bytesPerSample = BYTES_PER_SAMPLE[format];
59
+ return bytesPerSample * numberOfFrames * numberOfChannels;
60
+ }
61
+ /**
62
+ * Calculate the allocation size for a single plane
63
+ */
64
+ export function calculatePlaneSize(format, numberOfFrames, numberOfChannels) {
65
+ const bytesPerSample = BYTES_PER_SAMPLE[format];
66
+ if (isPlanarFormat(format)) {
67
+ return bytesPerSample * numberOfFrames;
68
+ }
69
+ return bytesPerSample * numberOfFrames * numberOfChannels;
70
+ }
71
+ /**
72
+ * Get the number of planes for a format
73
+ */
74
+ export function getNumberOfPlanes(format, numberOfChannels) {
75
+ return isPlanarFormat(format) ? numberOfChannels : 1;
76
+ }
77
+ /**
78
+ * FFmpeg audio format mapping
79
+ */
80
+ export const FFMPEG_AUDIO_FORMAT_MAP = {
81
+ 'u8': 'u8',
82
+ 's16': 's16le',
83
+ 's32': 's32le',
84
+ 'f32': 'f32le',
85
+ 'u8-planar': 'u8p',
86
+ 's16-planar': 's16p',
87
+ 's32-planar': 's32p',
88
+ 'f32-planar': 'flt',
89
+ };
90
+ /**
91
+ * Convert audio sample format to FFmpeg format string
92
+ */
93
+ export function audioFormatToFFmpeg(format) {
94
+ return FFMPEG_AUDIO_FORMAT_MAP[format] || format;
95
+ }
96
+ /**
97
+ * Convert FFmpeg format to audio sample format
98
+ */
99
+ export function ffmpegToAudioFormat(ffmpegFormat) {
100
+ const reverseMap = {
101
+ 'u8': 'u8',
102
+ 's16le': 's16',
103
+ 's32le': 's32',
104
+ 'f32le': 'f32',
105
+ 'flt': 'f32',
106
+ 'fltp': 'f32-planar',
107
+ 'u8p': 'u8-planar',
108
+ 's16p': 's16-planar',
109
+ 's32p': 's32-planar',
110
+ };
111
+ return reverseMap[ffmpegFormat] || null;
112
+ }
113
+ //# sourceMappingURL=audio-formats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-formats.js","sourceRoot":"","sources":["../../src/formats/audio-formats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Color space conversion utilities
3
+ * Provides YUV <-> RGB conversions using BT.709 coefficients
4
+ */
5
+ /**
6
+ * Convert RGBA pixel to YUV (BT.709)
7
+ * @returns [Y, U, V] values in range 0-255
8
+ */
9
+ export declare function rgbaToYuv(r: number, g: number, b: number): [number, number, number];
10
+ /**
11
+ * Convert YUV to RGBA (BT.709)
12
+ * @returns [R, G, B, A] values in range 0-255
13
+ */
14
+ export declare function yuvToRgba(y: number, u: number, v: number): [number, number, number, number];
15
+ /**
16
+ * Video color space initialization options
17
+ */
18
+ export interface VideoColorSpaceInit {
19
+ primaries?: 'bt709' | 'bt470bg' | 'smpte170m' | 'bt2020' | 'smpte432';
20
+ transfer?: 'bt709' | 'smpte170m' | 'iec61966-2-1' | 'linear' | 'pq' | 'hlg';
21
+ matrix?: 'rgb' | 'bt709' | 'bt470bg' | 'smpte170m' | 'bt2020-ncl';
22
+ fullRange?: boolean;
23
+ }
24
+ /**
25
+ * VideoColorSpace - describes the color space of video content
26
+ */
27
+ export declare class VideoColorSpace {
28
+ readonly primaries: string | null;
29
+ readonly transfer: string | null;
30
+ readonly matrix: string | null;
31
+ readonly fullRange: boolean | null;
32
+ constructor(init?: VideoColorSpaceInit);
33
+ toJSON(): VideoColorSpaceInit;
34
+ }
35
+ //# sourceMappingURL=color-space.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-space.d.ts","sourceRoot":"","sources":["../../src/formats/color-space.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAUnF;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAgB3F;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;IACtE,QAAQ,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,cAAc,GAAG,QAAQ,GAAG,IAAI,GAAG,KAAK,CAAC;IAC5E,MAAM,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,YAAY,CAAC;IAClE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;gBAEvB,IAAI,CAAC,EAAE,mBAAmB;IAOtC,MAAM,IAAI,mBAAmB;CAQ9B"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Color space conversion utilities
3
+ * Provides YUV <-> RGB conversions using BT.709 coefficients
4
+ */
5
+ /**
6
+ * Convert RGBA pixel to YUV (BT.709)
7
+ * @returns [Y, U, V] values in range 0-255
8
+ */
9
+ export function rgbaToYuv(r, g, b) {
10
+ // BT.709 coefficients
11
+ const y = 0.2126 * r + 0.7152 * g + 0.0722 * b;
12
+ const u = -0.1146 * r - 0.3854 * g + 0.5 * b + 128;
13
+ const v = 0.5 * r - 0.4542 * g - 0.0458 * b + 128;
14
+ return [
15
+ Math.max(0, Math.min(255, Math.round(y))),
16
+ Math.max(0, Math.min(255, Math.round(u))),
17
+ Math.max(0, Math.min(255, Math.round(v))),
18
+ ];
19
+ }
20
+ /**
21
+ * Convert YUV to RGBA (BT.709)
22
+ * @returns [R, G, B, A] values in range 0-255
23
+ */
24
+ export function yuvToRgba(y, u, v) {
25
+ // BT.709 inverse coefficients
26
+ const c = y;
27
+ const d = u - 128;
28
+ const e = v - 128;
29
+ const r = c + 1.5748 * e;
30
+ const g = c - 0.1873 * d - 0.4681 * e;
31
+ const b = c + 1.8556 * d;
32
+ return [
33
+ Math.max(0, Math.min(255, Math.round(r))),
34
+ Math.max(0, Math.min(255, Math.round(g))),
35
+ Math.max(0, Math.min(255, Math.round(b))),
36
+ 255,
37
+ ];
38
+ }
39
+ /**
40
+ * VideoColorSpace - describes the color space of video content
41
+ */
42
+ export class VideoColorSpace {
43
+ primaries;
44
+ transfer;
45
+ matrix;
46
+ fullRange;
47
+ constructor(init) {
48
+ this.primaries = init?.primaries ?? null;
49
+ this.transfer = init?.transfer ?? null;
50
+ this.matrix = init?.matrix ?? null;
51
+ this.fullRange = init?.fullRange ?? null;
52
+ }
53
+ toJSON() {
54
+ return {
55
+ primaries: this.primaries,
56
+ transfer: this.transfer,
57
+ matrix: this.matrix,
58
+ fullRange: this.fullRange ?? undefined,
59
+ };
60
+ }
61
+ }
62
+ //# sourceMappingURL=color-space.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-space.js","sourceRoot":"","sources":["../../src/formats/color-space.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IACvD,sBAAsB;IACtB,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACnD,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC;IAClD,OAAO;QACL,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IACvD,8BAA8B;IAC9B,MAAM,CAAC,GAAG,CAAC,CAAC;IACZ,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAClB,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAElB,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;IACzB,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;IAEzB,OAAO;QACL,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,GAAG;KACJ,CAAC;AACJ,CAAC;AAYD;;GAEG;AACH,MAAM,OAAO,eAAe;IACjB,SAAS,CAAgB;IACzB,QAAQ,CAAgB;IACxB,MAAM,CAAgB;IACtB,SAAS,CAAiB;IAEnC,YAAY,IAA0B;QACpC,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,IAAI,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,IAAI,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,IAAI,CAAC;IAC3C,CAAC;IAED,MAAM;QACJ,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAA6C;YAC7D,QAAQ,EAAE,IAAI,CAAC,QAA2C;YAC1D,MAAM,EAAE,IAAI,CAAC,MAAuC;YACpD,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,SAAS;SACvC,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Frame format conversion utilities
3
+ *
4
+ * Standalone functions for converting video frame data between pixel formats.
5
+ * These functions operate on raw pixel buffers without requiring a VideoFrame instance.
6
+ */
7
+ import { type VideoPixelFormat } from '../pixel-formats.js';
8
+ export type { VideoPixelFormat };
9
+ /**
10
+ * Frame buffer descriptor
11
+ */
12
+ export interface FrameBuffer {
13
+ data: Uint8Array;
14
+ format: VideoPixelFormat;
15
+ width: number;
16
+ height: number;
17
+ }
18
+ /**
19
+ * Get UV values at a specific position in a YUV frame
20
+ */
21
+ export declare function getUvAt(data: Uint8Array, format: VideoPixelFormat, width: number, height: number, x: number, y: number): [number, number];
22
+ /**
23
+ * Get the byte offset for a plane in a frame buffer
24
+ */
25
+ export declare function getPlaneOffset(format: VideoPixelFormat, width: number, height: number, planeIndex: number): number;
26
+ /**
27
+ * Convert RGB to RGB with potential channel swap (RGBA <-> BGRA)
28
+ */
29
+ export declare function convertRgbToRgb(src: FrameBuffer, dest: Uint8Array, destFormat: VideoPixelFormat, srcX: number, srcY: number, srcW: number, srcH: number): void;
30
+ /**
31
+ * Convert YUV to RGB format
32
+ */
33
+ export declare function convertYuvToRgb(src: FrameBuffer, dest: Uint8Array, destFormat: VideoPixelFormat, srcX: number, srcY: number, srcW: number, srcH: number): void;
34
+ /**
35
+ * Convert RGB to YUV format
36
+ */
37
+ export declare function convertRgbToYuv(src: FrameBuffer, dest: Uint8Array, destFormat: VideoPixelFormat, srcX: number, srcY: number, srcW: number, srcH: number): void;
38
+ /**
39
+ * Convert between any two pixel formats
40
+ */
41
+ export declare function convertFrameFormat(src: FrameBuffer, dest: Uint8Array, destFormat: VideoPixelFormat, srcX?: number, srcY?: number, srcW?: number, srcH?: number): void;
42
+ //# sourceMappingURL=frame-converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-converter.d.ts","sourceRoot":"","sources":["../../../src/formats/conversions/frame-converter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAA0C,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGpG,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAEjC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,CAAC,MAAM,EAAE,MAAM,CAAC,CAwClB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,MAAM,CAkCR;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,IAAI,CAqBN;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,IAAI,CA4BN;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,IAAI,CAsEN;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,gBAAgB,EAC5B,IAAI,GAAE,MAAU,EAChB,IAAI,GAAE,MAAU,EAChB,IAAI,CAAC,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,GACZ,IAAI,CA2BN"}