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,99 @@
1
+ /**
2
+ * FFmpeg audio codec mappings
3
+ *
4
+ * Consolidates all audio codec mappings for encoders and decoders
5
+ */
6
+ /**
7
+ * WebCodecs audio codec to FFmpeg encoder mapping
8
+ */
9
+ export const AUDIO_ENCODER_CODEC_MAP = {
10
+ 'opus': 'libopus',
11
+ 'mp3': 'libmp3lame',
12
+ 'flac': 'flac',
13
+ 'mp4a.40.2': 'aac',
14
+ 'mp4a.40.5': 'aac',
15
+ 'mp4a.40.29': 'aac',
16
+ 'aac': 'aac',
17
+ 'pcm-s16': 'pcm_s16le',
18
+ 'pcm-f32': 'pcm_f32le',
19
+ 'vorbis': 'libvorbis',
20
+ };
21
+ /**
22
+ * WebCodecs audio codec to FFmpeg decoder mapping
23
+ */
24
+ export const AUDIO_DECODER_CODEC_MAP = {
25
+ 'opus': { decoder: 'libopus', format: 'ogg' },
26
+ 'mp3': { decoder: 'mp3', format: 'mp3' },
27
+ 'flac': { decoder: 'flac', format: 'flac' },
28
+ 'mp4a.40.2': { decoder: 'aac', format: 'aac' },
29
+ 'mp4a.40.5': { decoder: 'aac', format: 'aac' },
30
+ 'mp4a.40.29': { decoder: 'aac', format: 'aac' },
31
+ 'aac': { decoder: 'aac', format: 'aac' },
32
+ 'pcm-s16': { decoder: 'pcm_s16le', format: 's16le' },
33
+ 'pcm-f32': { decoder: 'pcm_f32le', format: 'f32le' },
34
+ 'vorbis': { decoder: 'libvorbis', format: 'ogg' },
35
+ };
36
+ /**
37
+ * FFmpeg encoder to output container format mapping
38
+ */
39
+ export const AUDIO_ENCODER_FORMAT_MAP = {
40
+ 'libopus': 'ogg',
41
+ 'libmp3lame': 'mp3',
42
+ 'flac': 'flac',
43
+ 'aac': 'adts',
44
+ 'pcm_s16le': 's16le',
45
+ 'pcm_f32le': 'f32le',
46
+ 'libvorbis': 'ogg',
47
+ };
48
+ /**
49
+ * Frame size per FFmpeg codec (samples per frame)
50
+ */
51
+ export const AUDIO_FRAME_SIZE_MAP = {
52
+ 'libopus': 960,
53
+ 'aac': 1024,
54
+ 'libmp3lame': 1152,
55
+ };
56
+ export const AUDIO_OUTPUT_FORMAT_MAP = {
57
+ 'u8': { ffmpegFormat: 'u8', bytesPerSample: 1, isPlanar: false },
58
+ 's16': { ffmpegFormat: 's16le', bytesPerSample: 2, isPlanar: false },
59
+ 's32': { ffmpegFormat: 's32le', bytesPerSample: 4, isPlanar: false },
60
+ 'f32': { ffmpegFormat: 'f32le', bytesPerSample: 4, isPlanar: false },
61
+ 'u8-planar': { ffmpegFormat: 'u8', bytesPerSample: 1, isPlanar: true },
62
+ 's16-planar': { ffmpegFormat: 's16le', bytesPerSample: 2, isPlanar: true },
63
+ 's32-planar': { ffmpegFormat: 's32le', bytesPerSample: 4, isPlanar: true },
64
+ 'f32-planar': { ffmpegFormat: 'f32le', bytesPerSample: 4, isPlanar: true },
65
+ };
66
+ /**
67
+ * Get FFmpeg encoder codec from WebCodecs codec string
68
+ * Returns undefined if codec is not supported
69
+ */
70
+ export function getAudioEncoderCodec(codec) {
71
+ const codecBase = codec.split('.')[0].toLowerCase();
72
+ return AUDIO_ENCODER_CODEC_MAP[codecBase] || AUDIO_ENCODER_CODEC_MAP[codec];
73
+ }
74
+ /**
75
+ * Get FFmpeg decoder info from WebCodecs codec string
76
+ */
77
+ export function getAudioDecoderInfo(codec) {
78
+ const codecBase = codec.split('.')[0].toLowerCase();
79
+ return AUDIO_DECODER_CODEC_MAP[codecBase] || AUDIO_DECODER_CODEC_MAP[codec] || { decoder: 'aac', format: 'adts' };
80
+ }
81
+ /**
82
+ * Get output format for an FFmpeg encoder codec
83
+ */
84
+ export function getAudioEncoderFormat(ffmpegCodec) {
85
+ return AUDIO_ENCODER_FORMAT_MAP[ffmpegCodec] || 'wav';
86
+ }
87
+ /**
88
+ * Get frame size for an FFmpeg encoder codec
89
+ */
90
+ export function getAudioFrameSize(ffmpegCodec) {
91
+ return AUDIO_FRAME_SIZE_MAP[ffmpegCodec];
92
+ }
93
+ /**
94
+ * Get FFmpeg output format settings for an AudioSampleFormat
95
+ */
96
+ export function getAudioOutputFormatSettings(format) {
97
+ return AUDIO_OUTPUT_FORMAT_MAP[format] || AUDIO_OUTPUT_FORMAT_MAP['f32'];
98
+ }
99
+ //# sourceMappingURL=audio-codecs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-codecs.js","sourceRoot":"","sources":["../../src/ffmpeg/audio-codecs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * FFmpeg format mappings
3
+ *
4
+ * Converts between WebCodecs formats and FFmpeg formats
5
+ */
6
+ /**
7
+ * Map WebCodecs pixel format to FFmpeg pixel format
8
+ */
9
+ export declare function pixelFormatToFFmpeg(format: string): string;
10
+ /**
11
+ * Map FFmpeg pixel format to WebCodecs pixel format
12
+ */
13
+ export declare function ffmpegToPixelFormat(format: string): string;
14
+ /**
15
+ * Map WebCodecs codec string to FFmpeg codec
16
+ */
17
+ export declare function webCodecToFFmpegCodec(webCodec: string): string;
18
+ /**
19
+ * Map WebCodecs codec to container format
20
+ */
21
+ export declare function webCodecToContainerFormat(webCodec: string): string;
22
+ /**
23
+ * Calculate frame size in bytes for a given pixel format and dimensions
24
+ */
25
+ export declare function calculateFrameSize(format: string, width: number, height: number): number;
26
+ /**
27
+ * MIME type to FFmpeg format mapping for ImageDecoder
28
+ */
29
+ export declare const IMAGE_MIME_TO_FFMPEG: Record<string, {
30
+ format: string;
31
+ decoder?: string;
32
+ autoDetect?: boolean;
33
+ }>;
34
+ /**
35
+ * Audio codec mappings
36
+ */
37
+ export declare const AUDIO_CODEC_MAP: Record<string, string>;
38
+ /**
39
+ * Get FFmpeg audio codec from WebCodecs codec string
40
+ */
41
+ export declare function webCodecToFFmpegAudioCodec(codec: string): string;
42
+ //# sourceMappingURL=formats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formats.d.ts","sourceRoot":"","sources":["../../src/ffmpeg/formats.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAa1D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAa1D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAgB9D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAgBlE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAkCxF;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,CAU3G,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CASlD,CAAC;AAEF;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGhE"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * FFmpeg format mappings
3
+ *
4
+ * Converts between WebCodecs formats and FFmpeg formats
5
+ */
6
+ /**
7
+ * Map WebCodecs pixel format to FFmpeg pixel format
8
+ */
9
+ export function pixelFormatToFFmpeg(format) {
10
+ const formatMap = {
11
+ 'I420': 'yuv420p',
12
+ 'I420A': 'yuva420p',
13
+ 'I422': 'yuv422p',
14
+ 'I444': 'yuv444p',
15
+ 'NV12': 'nv12',
16
+ 'RGBA': 'rgba',
17
+ 'RGBX': 'rgb0',
18
+ 'BGRA': 'bgra',
19
+ 'BGRX': 'bgr0',
20
+ };
21
+ return formatMap[format] || format.toLowerCase();
22
+ }
23
+ /**
24
+ * Map FFmpeg pixel format to WebCodecs pixel format
25
+ */
26
+ export function ffmpegToPixelFormat(format) {
27
+ const formatMap = {
28
+ 'yuv420p': 'I420',
29
+ 'yuva420p': 'I420A',
30
+ 'yuv422p': 'I422',
31
+ 'yuv444p': 'I444',
32
+ 'nv12': 'NV12',
33
+ 'rgba': 'RGBA',
34
+ 'rgb0': 'RGBX',
35
+ 'bgra': 'BGRA',
36
+ 'bgr0': 'BGRX',
37
+ };
38
+ return formatMap[format] || format.toUpperCase();
39
+ }
40
+ /**
41
+ * Map WebCodecs codec string to FFmpeg codec
42
+ */
43
+ export function webCodecToFFmpegCodec(webCodec) {
44
+ const codecBase = webCodec.split('.')[0].toLowerCase();
45
+ const codecMap = {
46
+ 'avc1': 'libx264',
47
+ 'avc3': 'libx264',
48
+ 'hev1': 'libx265',
49
+ 'hvc1': 'libx265',
50
+ 'vp8': 'libvpx',
51
+ 'vp09': 'libvpx-vp9',
52
+ 'vp9': 'libvpx-vp9',
53
+ 'av01': 'libaom-av1',
54
+ 'av1': 'libaom-av1',
55
+ };
56
+ return codecMap[codecBase] || codecBase;
57
+ }
58
+ /**
59
+ * Map WebCodecs codec to container format
60
+ */
61
+ export function webCodecToContainerFormat(webCodec) {
62
+ const codecBase = webCodec.split('.')[0].toLowerCase();
63
+ const formatMap = {
64
+ 'avc1': 'h264',
65
+ 'avc3': 'h264',
66
+ 'hev1': 'hevc',
67
+ 'hvc1': 'hevc',
68
+ 'vp8': 'ivf',
69
+ 'vp09': 'ivf',
70
+ 'vp9': 'ivf',
71
+ 'av01': 'ivf',
72
+ 'av1': 'ivf',
73
+ };
74
+ return formatMap[codecBase] || 'rawvideo';
75
+ }
76
+ /**
77
+ * Calculate frame size in bytes for a given pixel format and dimensions
78
+ */
79
+ export function calculateFrameSize(format, width, height) {
80
+ const chromaW = Math.ceil(width / 2);
81
+ const chromaH = Math.ceil(height / 2);
82
+ switch (format.toUpperCase()) {
83
+ case 'I420':
84
+ case 'YUV420P':
85
+ // Y: width * height, U: chromaW * chromaH, V: chromaW * chromaH
86
+ return width * height + 2 * chromaW * chromaH;
87
+ case 'I420A':
88
+ case 'YUVA420P':
89
+ // I420 + Alpha plane
90
+ return width * height * 2 + 2 * chromaW * chromaH;
91
+ case 'I422':
92
+ case 'YUV422P':
93
+ // Y: width * height, U: chromaW * height, V: chromaW * height
94
+ return width * height + 2 * chromaW * height;
95
+ case 'I444':
96
+ case 'YUV444P':
97
+ // Y, U, V all full size
98
+ return width * height * 3;
99
+ case 'NV12':
100
+ // Y: width * height, UV interleaved: width * chromaH
101
+ return width * height + width * chromaH;
102
+ case 'RGBA':
103
+ case 'RGBX':
104
+ case 'BGRA':
105
+ case 'BGRX':
106
+ case 'RGB0':
107
+ case 'BGR0':
108
+ return width * height * 4;
109
+ default:
110
+ return width * height * 4; // Assume RGBA as fallback
111
+ }
112
+ }
113
+ /**
114
+ * MIME type to FFmpeg format mapping for ImageDecoder
115
+ */
116
+ export const IMAGE_MIME_TO_FFMPEG = {
117
+ 'image/png': { format: 'png_pipe' },
118
+ 'image/apng': { format: 'apng' },
119
+ 'image/jpeg': { format: 'jpeg_pipe' },
120
+ 'image/jpg': { format: 'jpeg_pipe' },
121
+ 'image/webp': { format: 'webp_pipe', autoDetect: true },
122
+ 'image/gif': { format: 'gif' },
123
+ 'image/bmp': { format: 'bmp_pipe' },
124
+ 'image/avif': { format: 'avif', autoDetect: true },
125
+ 'image/tiff': { format: 'tiff_pipe' },
126
+ };
127
+ /**
128
+ * Audio codec mappings
129
+ */
130
+ export const AUDIO_CODEC_MAP = {
131
+ 'opus': 'libopus',
132
+ 'aac': 'aac',
133
+ 'mp3': 'libmp3lame',
134
+ 'flac': 'flac',
135
+ 'vorbis': 'libvorbis',
136
+ 'pcm-s16': 'pcm_s16le',
137
+ 'pcm-s32': 'pcm_s32le',
138
+ 'pcm-f32': 'pcm_f32le',
139
+ };
140
+ /**
141
+ * Get FFmpeg audio codec from WebCodecs codec string
142
+ */
143
+ export function webCodecToFFmpegAudioCodec(codec) {
144
+ const codecLower = codec.toLowerCase();
145
+ return AUDIO_CODEC_MAP[codecLower] || codecLower;
146
+ }
147
+ //# sourceMappingURL=formats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formats.js","sourceRoot":"","sources":["../../src/ffmpeg/formats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * FFmpeg utilities
3
+ */
4
+ export { FFmpegProcess, type FFmpegConfig, type FFmpegInputConfig, type FFmpegOutputConfig, } from './FFmpegProcess.js';
5
+ export { type EncodedFrameData, type DecoderConfig, type EncoderConfig, type BitrateMode, type AlphaOption, DEFAULT_SHUTDOWN_TIMEOUT, DEFAULT_FLUSH_TIMEOUT, } from './types.js';
6
+ export { pixelFormatToFFmpeg, ffmpegToPixelFormat, webCodecToFFmpegCodec, webCodecToContainerFormat, calculateFrameSize, webCodecToFFmpegAudioCodec, IMAGE_MIME_TO_FFMPEG, AUDIO_CODEC_MAP, } from './formats.js';
7
+ export { AUDIO_ENCODER_CODEC_MAP, AUDIO_DECODER_CODEC_MAP, AUDIO_ENCODER_FORMAT_MAP, AUDIO_FRAME_SIZE_MAP, AUDIO_OUTPUT_FORMAT_MAP, getAudioEncoderCodec, getAudioDecoderInfo, getAudioEncoderFormat, getAudioFrameSize, getAudioOutputFormatSettings, type AudioFormatSettings, } from './audio-codecs.js';
8
+ export * from './parsers/index.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ffmpeg/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,yBAAyB,EACzB,kBAAkB,EAClB,0BAA0B,EAC1B,oBAAoB,EACpB,eAAe,GAChB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,4BAA4B,EAC5B,KAAK,mBAAmB,GACzB,MAAM,mBAAmB,CAAC;AAG3B,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * FFmpeg utilities
3
+ */
4
+ export { FFmpegProcess, } from './FFmpegProcess.js';
5
+ // Types
6
+ export { DEFAULT_SHUTDOWN_TIMEOUT, DEFAULT_FLUSH_TIMEOUT, } from './types.js';
7
+ // Format mappings
8
+ export { pixelFormatToFFmpeg, ffmpegToPixelFormat, webCodecToFFmpegCodec, webCodecToContainerFormat, calculateFrameSize, webCodecToFFmpegAudioCodec, IMAGE_MIME_TO_FFMPEG, AUDIO_CODEC_MAP, } from './formats.js';
9
+ // Audio codec mappings
10
+ export { AUDIO_ENCODER_CODEC_MAP, AUDIO_DECODER_CODEC_MAP, AUDIO_ENCODER_FORMAT_MAP, AUDIO_FRAME_SIZE_MAP, AUDIO_OUTPUT_FORMAT_MAP, getAudioEncoderCodec, getAudioDecoderInfo, getAudioEncoderFormat, getAudioFrameSize, getAudioOutputFormatSettings, } from './audio-codecs.js';
11
+ // Parsers
12
+ export * from './parsers/index.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ffmpeg/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,aAAa,GAId,MAAM,oBAAoB,CAAC;AAE5B,QAAQ;AACR,OAAO,EAML,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAEpB,kBAAkB;AAClB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,yBAAyB,EACzB,kBAAkB,EAClB,0BAA0B,EAC1B,oBAAoB,EACpB,eAAe,GAChB,MAAM,cAAc,CAAC;AAEtB,uBAAuB;AACvB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,4BAA4B,GAE7B,MAAM,mBAAmB,CAAC;AAE3B,UAAU;AACV,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * H.264/HEVC Annex B bitstream parser
3
+ *
4
+ * Parses Annex B format using Access Unit Delimiter (AUD) as frame boundaries.
5
+ */
6
+ import type { EncodedFrameData } from '../types.js';
7
+ /**
8
+ * NAL unit types for H.264
9
+ */
10
+ export declare const H264_NAL_TYPES: {
11
+ readonly SLICE: 1;
12
+ readonly IDR: 5;
13
+ readonly SEI: 6;
14
+ readonly SPS: 7;
15
+ readonly PPS: 8;
16
+ readonly AUD: 9;
17
+ };
18
+ /**
19
+ * NAL unit types for HEVC
20
+ */
21
+ export declare const HEVC_NAL_TYPES: {
22
+ readonly TRAIL_N: 0;
23
+ readonly TRAIL_R: 1;
24
+ readonly IDR_W_RADL: 19;
25
+ readonly IDR_N_LP: 20;
26
+ readonly CRA: 21;
27
+ readonly VPS: 32;
28
+ readonly SPS: 33;
29
+ readonly PPS: 34;
30
+ readonly AUD: 35;
31
+ };
32
+ /**
33
+ * Annex B parser state
34
+ */
35
+ export interface AnnexBParserState {
36
+ buffer: Buffer;
37
+ codec: 'h264' | 'hevc';
38
+ frameIndex: number;
39
+ }
40
+ /**
41
+ * Create initial Annex B parser state
42
+ */
43
+ export declare function createAnnexBParserState(codec: 'h264' | 'hevc'): AnnexBParserState;
44
+ /**
45
+ * Get NAL unit type from first byte after start code
46
+ */
47
+ export declare function getNalType(firstByte: number, codec: 'h264' | 'hevc'): number;
48
+ /**
49
+ * Check if NAL type is an Access Unit Delimiter
50
+ */
51
+ export declare function isAudNal(nalType: number, codec: 'h264' | 'hevc'): boolean;
52
+ /**
53
+ * Find start code in buffer starting from offset
54
+ * Returns { position, length } or null if not found
55
+ */
56
+ export declare function findStartCode(data: Buffer, offset: number): {
57
+ position: number;
58
+ length: number;
59
+ } | null;
60
+ /**
61
+ * Find all AUD positions in buffer
62
+ */
63
+ export declare function findAudPositions(data: Buffer, codec: 'h264' | 'hevc'): number[];
64
+ /**
65
+ * Check if H.264 frame is a keyframe
66
+ */
67
+ export declare function isH264KeyFrame(data: Buffer): boolean;
68
+ /**
69
+ * Check if HEVC frame is a keyframe
70
+ */
71
+ export declare function isHEVCKeyFrame(data: Buffer): boolean;
72
+ /**
73
+ * Check if frame is a keyframe based on codec
74
+ */
75
+ export declare function isKeyFrame(data: Buffer, codec: 'h264' | 'hevc'): boolean;
76
+ /**
77
+ * Parse Annex B frames from accumulated data
78
+ *
79
+ * @param state - Parser state (mutated)
80
+ * @param newData - New data to append
81
+ * @returns Array of parsed frames
82
+ */
83
+ export declare function parseAnnexBFrames(state: AnnexBParserState, newData: Buffer): EncodedFrameData[];
84
+ /**
85
+ * Flush remaining data as final frame
86
+ */
87
+ export declare function flushAnnexBParser(state: AnnexBParserState): EncodedFrameData | null;
88
+ //# sourceMappingURL=annexb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annexb.d.ts","sourceRoot":"","sources":["../../../src/ffmpeg/parsers/annexb.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;CAOjB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;CAUjB,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,iBAAiB,CAMjF;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAQ5E;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAMzE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAW7C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAoB/E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAqBpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAqBpD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAExE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,MAAM,GACd,gBAAgB,EAAE,CAgCpB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG,gBAAgB,GAAG,IAAI,CAanF"}
@@ -0,0 +1,201 @@
1
+ /**
2
+ * H.264/HEVC Annex B bitstream parser
3
+ *
4
+ * Parses Annex B format using Access Unit Delimiter (AUD) as frame boundaries.
5
+ */
6
+ /**
7
+ * NAL unit types for H.264
8
+ */
9
+ export const H264_NAL_TYPES = {
10
+ SLICE: 1, // Non-IDR slice
11
+ IDR: 5, // IDR slice (keyframe)
12
+ SEI: 6, // Supplemental Enhancement Information
13
+ SPS: 7, // Sequence Parameter Set
14
+ PPS: 8, // Picture Parameter Set
15
+ AUD: 9, // Access Unit Delimiter
16
+ };
17
+ /**
18
+ * NAL unit types for HEVC
19
+ */
20
+ export const HEVC_NAL_TYPES = {
21
+ TRAIL_N: 0, // Non-reference trailing picture
22
+ TRAIL_R: 1, // Reference trailing picture
23
+ IDR_W_RADL: 19, // IDR with RADL
24
+ IDR_N_LP: 20, // IDR without leading pictures
25
+ CRA: 21, // Clean Random Access
26
+ VPS: 32, // Video Parameter Set
27
+ SPS: 33, // Sequence Parameter Set
28
+ PPS: 34, // Picture Parameter Set
29
+ AUD: 35, // Access Unit Delimiter
30
+ };
31
+ /**
32
+ * Create initial Annex B parser state
33
+ */
34
+ export function createAnnexBParserState(codec) {
35
+ return {
36
+ buffer: Buffer.alloc(0),
37
+ codec,
38
+ frameIndex: 0,
39
+ };
40
+ }
41
+ /**
42
+ * Get NAL unit type from first byte after start code
43
+ */
44
+ export function getNalType(firstByte, codec) {
45
+ if (codec === 'h264') {
46
+ // H.264: NAL type is in bits 0-4
47
+ return firstByte & 0x1f;
48
+ }
49
+ else {
50
+ // HEVC: NAL type is in bits 1-6
51
+ return (firstByte >> 1) & 0x3f;
52
+ }
53
+ }
54
+ /**
55
+ * Check if NAL type is an Access Unit Delimiter
56
+ */
57
+ export function isAudNal(nalType, codec) {
58
+ if (codec === 'h264') {
59
+ return nalType === H264_NAL_TYPES.AUD;
60
+ }
61
+ else {
62
+ return nalType === HEVC_NAL_TYPES.AUD;
63
+ }
64
+ }
65
+ /**
66
+ * Find start code in buffer starting from offset
67
+ * Returns { position, length } or null if not found
68
+ */
69
+ export function findStartCode(data, offset) {
70
+ for (let i = offset; i < data.length - 2; i++) {
71
+ if (data[i] === 0 && data[i + 1] === 0) {
72
+ if (data[i + 2] === 1) {
73
+ return { position: i, length: 3 };
74
+ }
75
+ else if (data[i + 2] === 0 && i + 3 < data.length && data[i + 3] === 1) {
76
+ return { position: i, length: 4 };
77
+ }
78
+ }
79
+ }
80
+ return null;
81
+ }
82
+ /**
83
+ * Find all AUD positions in buffer
84
+ */
85
+ export function findAudPositions(data, codec) {
86
+ const positions = [];
87
+ let offset = 0;
88
+ while (offset < data.length - 4) {
89
+ const startCode = findStartCode(data, offset);
90
+ if (!startCode)
91
+ break;
92
+ const nalStart = startCode.position + startCode.length;
93
+ if (nalStart < data.length) {
94
+ const nalType = getNalType(data[nalStart], codec);
95
+ if (isAudNal(nalType, codec)) {
96
+ positions.push(startCode.position);
97
+ }
98
+ }
99
+ offset = nalStart;
100
+ }
101
+ return positions;
102
+ }
103
+ /**
104
+ * Check if H.264 frame is a keyframe
105
+ */
106
+ export function isH264KeyFrame(data) {
107
+ let offset = 0;
108
+ while (offset < data.length - 4) {
109
+ const startCode = findStartCode(data, offset);
110
+ if (!startCode)
111
+ break;
112
+ const nalStart = startCode.position + startCode.length;
113
+ if (nalStart < data.length) {
114
+ const nalType = getNalType(data[nalStart], 'h264');
115
+ // IDR slice = keyframe
116
+ if (nalType === H264_NAL_TYPES.IDR)
117
+ return true;
118
+ // Non-IDR slice = not keyframe
119
+ if (nalType === H264_NAL_TYPES.SLICE)
120
+ return false;
121
+ }
122
+ offset = nalStart;
123
+ }
124
+ return false;
125
+ }
126
+ /**
127
+ * Check if HEVC frame is a keyframe
128
+ */
129
+ export function isHEVCKeyFrame(data) {
130
+ let offset = 0;
131
+ while (offset < data.length - 4) {
132
+ const startCode = findStartCode(data, offset);
133
+ if (!startCode)
134
+ break;
135
+ const nalStart = startCode.position + startCode.length;
136
+ if (nalStart < data.length) {
137
+ const nalType = getNalType(data[nalStart], 'hevc');
138
+ // IDR or CRA types are keyframes (16-21)
139
+ if (nalType >= 16 && nalType <= 21)
140
+ return true;
141
+ // Trailing picture types are not keyframes (0-9)
142
+ if (nalType >= 0 && nalType <= 9)
143
+ return false;
144
+ }
145
+ offset = nalStart;
146
+ }
147
+ return false;
148
+ }
149
+ /**
150
+ * Check if frame is a keyframe based on codec
151
+ */
152
+ export function isKeyFrame(data, codec) {
153
+ return codec === 'h264' ? isH264KeyFrame(data) : isHEVCKeyFrame(data);
154
+ }
155
+ /**
156
+ * Parse Annex B frames from accumulated data
157
+ *
158
+ * @param state - Parser state (mutated)
159
+ * @param newData - New data to append
160
+ * @returns Array of parsed frames
161
+ */
162
+ export function parseAnnexBFrames(state, newData) {
163
+ const frames = [];
164
+ // Append new data
165
+ state.buffer = Buffer.concat([state.buffer, newData]);
166
+ // Find all AUD positions
167
+ const audPositions = findAudPositions(state.buffer, state.codec);
168
+ // Need at least 2 AUDs to have a complete frame
169
+ if (audPositions.length < 2) {
170
+ return frames;
171
+ }
172
+ // Emit all complete frames
173
+ for (let i = 0; i < audPositions.length - 1; i++) {
174
+ const frameData = Buffer.from(state.buffer.subarray(audPositions[i], audPositions[i + 1]));
175
+ frames.push({
176
+ data: frameData,
177
+ timestamp: state.frameIndex++,
178
+ keyFrame: isKeyFrame(frameData, state.codec),
179
+ });
180
+ }
181
+ // Keep the last incomplete frame
182
+ const lastAudPos = audPositions[audPositions.length - 1];
183
+ state.buffer = Buffer.from(state.buffer.subarray(lastAudPos));
184
+ return frames;
185
+ }
186
+ /**
187
+ * Flush remaining data as final frame
188
+ */
189
+ export function flushAnnexBParser(state) {
190
+ if (state.buffer.length === 0) {
191
+ return null;
192
+ }
193
+ const frameData = Buffer.from(state.buffer);
194
+ state.buffer = Buffer.alloc(0);
195
+ return {
196
+ data: frameData,
197
+ timestamp: state.frameIndex++,
198
+ keyFrame: isKeyFrame(frameData, state.codec),
199
+ };
200
+ }
201
+ //# sourceMappingURL=annexb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annexb.js","sourceRoot":"","sources":["../../../src/ffmpeg/parsers/annexb.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Frame parsers for different container formats
3
+ */
4
+ export { IVF_HEADER_SIZE, IVF_FRAME_HEADER_SIZE, IVF_SIGNATURE, createIvfParserState, validateIvfSignature, parseIvfFrames, isVP9KeyFrame, isVP8KeyFrame, isAV1KeyFrame, type IvfParserState, } from './ivf.js';
5
+ export { H264_NAL_TYPES, HEVC_NAL_TYPES, createAnnexBParserState, getNalType, isAudNal, findStartCode, findAudPositions, isH264KeyFrame, isHEVCKeyFrame, isKeyFrame, parseAnnexBFrames, flushAnnexBParser, type AnnexBParserState, } from './annexb.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ffmpeg/parsers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,aAAa,EACb,aAAa,EACb,aAAa,EACb,KAAK,cAAc,GACpB,MAAM,UAAU,CAAC;AAGlB,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,EACjB,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAC"}