webcodecs-node 0.7.5 → 0.8.5

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 (479) hide show
  1. package/README.md +12 -4
  2. package/dist/backends/node-av/HardwarePipeline.d.ts +36 -0
  3. package/dist/backends/node-av/HardwarePipeline.d.ts.map +1 -0
  4. package/dist/backends/node-av/HardwarePipeline.js +203 -0
  5. package/dist/backends/node-av/HardwarePipeline.js.map +1 -0
  6. package/dist/backends/node-av/audio/NodeAvAudioDecoder.d.ts +46 -0
  7. package/dist/backends/node-av/audio/NodeAvAudioDecoder.d.ts.map +1 -0
  8. package/dist/backends/node-av/audio/NodeAvAudioDecoder.js +277 -0
  9. package/dist/backends/node-av/audio/NodeAvAudioDecoder.js.map +1 -0
  10. package/dist/backends/node-av/audio/NodeAvAudioEncoder.d.ts +47 -0
  11. package/dist/backends/node-av/audio/NodeAvAudioEncoder.d.ts.map +1 -0
  12. package/dist/backends/node-av/audio/NodeAvAudioEncoder.js +363 -0
  13. package/dist/backends/node-av/audio/NodeAvAudioEncoder.js.map +1 -0
  14. package/dist/backends/node-av/audio/decoder/channel-layout.d.ts +12 -0
  15. package/dist/backends/node-av/audio/decoder/channel-layout.d.ts.map +1 -0
  16. package/dist/backends/node-av/audio/decoder/channel-layout.js +24 -0
  17. package/dist/backends/node-av/audio/decoder/channel-layout.js.map +1 -0
  18. package/dist/backends/node-av/audio/decoder/codec-mapping.d.ts +9 -0
  19. package/dist/backends/node-av/audio/decoder/codec-mapping.d.ts.map +1 -0
  20. package/dist/backends/node-av/audio/decoder/codec-mapping.js +40 -0
  21. package/dist/backends/node-av/audio/decoder/codec-mapping.js.map +1 -0
  22. package/dist/backends/node-av/audio/decoder/constants.d.ts +6 -0
  23. package/dist/backends/node-av/audio/decoder/constants.d.ts.map +1 -0
  24. package/dist/backends/node-av/audio/decoder/constants.js +6 -0
  25. package/dist/backends/node-av/audio/decoder/constants.js.map +1 -0
  26. package/dist/backends/node-av/audio/decoder/index.d.ts +8 -0
  27. package/dist/backends/node-av/audio/decoder/index.d.ts.map +1 -0
  28. package/dist/backends/node-av/audio/decoder/index.js +8 -0
  29. package/dist/backends/node-av/audio/decoder/index.js.map +1 -0
  30. package/dist/backends/node-av/audio/decoder/sample-format.d.ts +14 -0
  31. package/dist/backends/node-av/audio/decoder/sample-format.d.ts.map +1 -0
  32. package/dist/backends/node-av/audio/decoder/sample-format.js +54 -0
  33. package/dist/backends/node-av/audio/decoder/sample-format.js.map +1 -0
  34. package/dist/backends/node-av/audio/encoder/channel-layout.d.ts +12 -0
  35. package/dist/backends/node-av/audio/encoder/channel-layout.d.ts.map +1 -0
  36. package/dist/backends/node-av/audio/encoder/channel-layout.js +24 -0
  37. package/dist/backends/node-av/audio/encoder/channel-layout.js.map +1 -0
  38. package/dist/backends/node-av/audio/encoder/codec-description.d.ts +33 -0
  39. package/dist/backends/node-av/audio/encoder/codec-description.d.ts.map +1 -0
  40. package/dist/backends/node-av/audio/encoder/codec-description.js +137 -0
  41. package/dist/backends/node-av/audio/encoder/codec-description.js.map +1 -0
  42. package/dist/backends/node-av/audio/encoder/codec-mapping.d.ts +12 -0
  43. package/dist/backends/node-av/audio/encoder/codec-mapping.d.ts.map +1 -0
  44. package/dist/backends/node-av/audio/encoder/codec-mapping.js +61 -0
  45. package/dist/backends/node-av/audio/encoder/codec-mapping.js.map +1 -0
  46. package/dist/backends/node-av/audio/encoder/constants.d.ts +6 -0
  47. package/dist/backends/node-av/audio/encoder/constants.d.ts.map +1 -0
  48. package/dist/backends/node-av/audio/encoder/constants.js +6 -0
  49. package/dist/backends/node-av/audio/encoder/constants.js.map +1 -0
  50. package/dist/backends/node-av/audio/encoder/drain.d.ts +32 -0
  51. package/dist/backends/node-av/audio/encoder/drain.d.ts.map +1 -0
  52. package/dist/backends/node-av/audio/encoder/drain.js +51 -0
  53. package/dist/backends/node-av/audio/encoder/drain.js.map +1 -0
  54. package/dist/backends/node-av/audio/encoder/index.d.ts +20 -0
  55. package/dist/backends/node-av/audio/encoder/index.d.ts.map +1 -0
  56. package/dist/backends/node-av/audio/encoder/index.js +20 -0
  57. package/dist/backends/node-av/audio/encoder/index.js.map +1 -0
  58. package/dist/backends/node-av/audio/encoder/options.d.ts +40 -0
  59. package/dist/backends/node-av/audio/encoder/options.d.ts.map +1 -0
  60. package/dist/backends/node-av/audio/encoder/options.js +127 -0
  61. package/dist/backends/node-av/audio/encoder/options.js.map +1 -0
  62. package/dist/backends/node-av/audio/encoder/sample-format-convert.d.ts +40 -0
  63. package/dist/backends/node-av/audio/encoder/sample-format-convert.d.ts.map +1 -0
  64. package/dist/backends/node-av/audio/encoder/sample-format-convert.js +152 -0
  65. package/dist/backends/node-av/audio/encoder/sample-format-convert.js.map +1 -0
  66. package/dist/backends/node-av/hardware-pipeline/capabilities.d.ts +10 -0
  67. package/dist/backends/node-av/hardware-pipeline/capabilities.d.ts.map +1 -0
  68. package/dist/backends/node-av/hardware-pipeline/capabilities.js +45 -0
  69. package/dist/backends/node-av/hardware-pipeline/capabilities.js.map +1 -0
  70. package/dist/backends/node-av/hardware-pipeline/index.d.ts +6 -0
  71. package/dist/backends/node-av/hardware-pipeline/index.d.ts.map +1 -0
  72. package/dist/backends/node-av/hardware-pipeline/index.js +5 -0
  73. package/dist/backends/node-av/hardware-pipeline/index.js.map +1 -0
  74. package/dist/backends/node-av/hardware-pipeline/types.d.ts +13 -0
  75. package/dist/backends/node-av/hardware-pipeline/types.d.ts.map +1 -0
  76. package/dist/backends/node-av/hardware-pipeline/types.js +5 -0
  77. package/dist/backends/node-av/hardware-pipeline/types.js.map +1 -0
  78. package/dist/backends/node-av/image/NodeAvImageDecoder.d.ts +95 -0
  79. package/dist/backends/node-av/image/NodeAvImageDecoder.d.ts.map +1 -0
  80. package/dist/backends/node-av/image/NodeAvImageDecoder.js +383 -0
  81. package/dist/backends/node-av/image/NodeAvImageDecoder.js.map +1 -0
  82. package/dist/backends/node-av/image/WebPImageDecoder.d.ts +57 -0
  83. package/dist/backends/node-av/image/WebPImageDecoder.d.ts.map +1 -0
  84. package/dist/backends/node-av/image/WebPImageDecoder.js +178 -0
  85. package/dist/backends/node-av/image/WebPImageDecoder.js.map +1 -0
  86. package/dist/backends/node-av/image/decoder/constants.d.ts +14 -0
  87. package/dist/backends/node-av/image/decoder/constants.d.ts.map +1 -0
  88. package/dist/backends/node-av/image/decoder/constants.js +24 -0
  89. package/dist/backends/node-av/image/decoder/constants.js.map +1 -0
  90. package/dist/backends/node-av/image/decoder/index.d.ts +7 -0
  91. package/dist/backends/node-av/image/decoder/index.d.ts.map +1 -0
  92. package/dist/backends/node-av/image/decoder/index.js +6 -0
  93. package/dist/backends/node-av/image/decoder/index.js.map +1 -0
  94. package/dist/backends/node-av/image/decoder/probe.d.ts +12 -0
  95. package/dist/backends/node-av/image/decoder/probe.d.ts.map +1 -0
  96. package/dist/backends/node-av/image/decoder/probe.js +57 -0
  97. package/dist/backends/node-av/image/decoder/probe.js.map +1 -0
  98. package/dist/backends/node-av/image/decoder/types.d.ts +25 -0
  99. package/dist/backends/node-av/image/decoder/types.d.ts.map +1 -0
  100. package/dist/backends/node-av/image/decoder/types.js +5 -0
  101. package/dist/backends/node-av/image/decoder/types.js.map +1 -0
  102. package/dist/backends/node-av/video/NodeAvVideoDecoder.d.ts +44 -0
  103. package/dist/backends/node-av/video/NodeAvVideoDecoder.d.ts.map +1 -0
  104. package/dist/backends/node-av/video/NodeAvVideoDecoder.js +326 -0
  105. package/dist/backends/node-av/video/NodeAvVideoDecoder.js.map +1 -0
  106. package/dist/backends/node-av/video/NodeAvVideoEncoder.d.ts +49 -0
  107. package/dist/backends/node-av/video/NodeAvVideoEncoder.d.ts.map +1 -0
  108. package/dist/backends/node-av/video/NodeAvVideoEncoder.js +317 -0
  109. package/dist/backends/node-av/video/NodeAvVideoEncoder.js.map +1 -0
  110. package/dist/backends/node-av/video/decoder/codec-mapping.d.ts +9 -0
  111. package/dist/backends/node-av/video/decoder/codec-mapping.d.ts.map +1 -0
  112. package/dist/backends/node-av/video/decoder/codec-mapping.js +25 -0
  113. package/dist/backends/node-av/video/decoder/codec-mapping.js.map +1 -0
  114. package/dist/backends/node-av/video/decoder/constants.d.ts +13 -0
  115. package/dist/backends/node-av/video/decoder/constants.d.ts.map +1 -0
  116. package/dist/backends/node-av/video/decoder/constants.js +13 -0
  117. package/dist/backends/node-av/video/decoder/constants.js.map +1 -0
  118. package/dist/backends/node-av/video/decoder/index.d.ts +7 -0
  119. package/dist/backends/node-av/video/decoder/index.d.ts.map +1 -0
  120. package/dist/backends/node-av/video/decoder/index.js +7 -0
  121. package/dist/backends/node-av/video/decoder/index.js.map +1 -0
  122. package/dist/backends/node-av/video/decoder/pixel-format.d.ts +13 -0
  123. package/dist/backends/node-av/video/decoder/pixel-format.d.ts.map +1 -0
  124. package/dist/backends/node-av/video/decoder/pixel-format.js +88 -0
  125. package/dist/backends/node-av/video/decoder/pixel-format.js.map +1 -0
  126. package/dist/backends/node-av/video/encoder/codec-description.d.ts +26 -0
  127. package/dist/backends/node-av/video/encoder/codec-description.d.ts.map +1 -0
  128. package/dist/backends/node-av/video/encoder/codec-description.js +86 -0
  129. package/dist/backends/node-av/video/encoder/codec-description.js.map +1 -0
  130. package/dist/backends/node-av/video/encoder/drain.d.ts +34 -0
  131. package/dist/backends/node-av/video/encoder/drain.d.ts.map +1 -0
  132. package/dist/backends/node-av/video/encoder/drain.js +51 -0
  133. package/dist/backends/node-av/video/encoder/drain.js.map +1 -0
  134. package/dist/backends/node-av/video/encoder/filters.d.ts +37 -0
  135. package/dist/backends/node-av/video/encoder/filters.d.ts.map +1 -0
  136. package/dist/backends/node-av/video/encoder/filters.js +71 -0
  137. package/dist/backends/node-av/video/encoder/filters.js.map +1 -0
  138. package/dist/backends/node-av/video/encoder/gpu-filters.d.ts +9 -0
  139. package/dist/backends/node-av/video/encoder/gpu-filters.d.ts.map +1 -0
  140. package/dist/backends/node-av/video/encoder/gpu-filters.js +26 -0
  141. package/dist/backends/node-av/video/encoder/gpu-filters.js.map +1 -0
  142. package/dist/backends/node-av/video/encoder/hardware-constraints.d.ts +12 -0
  143. package/dist/backends/node-av/video/encoder/hardware-constraints.d.ts.map +1 -0
  144. package/dist/backends/node-av/video/encoder/hardware-constraints.js +31 -0
  145. package/dist/backends/node-av/video/encoder/hardware-constraints.js.map +1 -0
  146. package/dist/backends/node-av/video/encoder/index.d.ts +28 -0
  147. package/dist/backends/node-av/video/encoder/index.d.ts.map +1 -0
  148. package/dist/backends/node-av/video/encoder/index.js +28 -0
  149. package/dist/backends/node-av/video/encoder/index.js.map +1 -0
  150. package/dist/backends/node-av/video/encoder/options.d.ts +39 -0
  151. package/dist/backends/node-av/video/encoder/options.d.ts.map +1 -0
  152. package/dist/backends/node-av/video/encoder/options.js +195 -0
  153. package/dist/backends/node-av/video/encoder/options.js.map +1 -0
  154. package/dist/backends/node-av/video/encoder/pixel-format-config.d.ts +42 -0
  155. package/dist/backends/node-av/video/encoder/pixel-format-config.d.ts.map +1 -0
  156. package/dist/backends/node-av/video/encoder/pixel-format-config.js +122 -0
  157. package/dist/backends/node-av/video/encoder/pixel-format-config.js.map +1 -0
  158. package/dist/backends/node-av/video/encoder/pixel-format.d.ts +13 -0
  159. package/dist/backends/node-av/video/encoder/pixel-format.d.ts.map +1 -0
  160. package/dist/backends/node-av/video/encoder/pixel-format.js +68 -0
  161. package/dist/backends/node-av/video/encoder/pixel-format.js.map +1 -0
  162. package/dist/backends/node-av/video/encoder/setup.d.ts +33 -0
  163. package/dist/backends/node-av/video/encoder/setup.d.ts.map +1 -0
  164. package/dist/backends/node-av/video/encoder/setup.js +62 -0
  165. package/dist/backends/node-av/video/encoder/setup.js.map +1 -0
  166. package/dist/backends/node-av/video/encoder/software-encoders.d.ts +8 -0
  167. package/dist/backends/node-av/video/encoder/software-encoders.d.ts.map +1 -0
  168. package/dist/backends/node-av/video/encoder/software-encoders.js +17 -0
  169. package/dist/backends/node-av/video/encoder/software-encoders.js.map +1 -0
  170. package/dist/backends/node-av/video/encoder/timestamp.d.ts +34 -0
  171. package/dist/backends/node-av/video/encoder/timestamp.d.ts.map +1 -0
  172. package/dist/backends/node-av/video/encoder/timestamp.js +39 -0
  173. package/dist/backends/node-av/video/encoder/timestamp.js.map +1 -0
  174. package/dist/backends/types.d.ts +44 -0
  175. package/dist/backends/types.d.ts.map +1 -1
  176. package/dist/backends/types.js.map +1 -1
  177. package/dist/codec-utils/formats.d.ts.map +1 -1
  178. package/dist/codec-utils/formats.js +78 -0
  179. package/dist/codec-utils/formats.js.map +1 -1
  180. package/dist/codec-utils/types.d.ts +1 -1
  181. package/dist/codecs/aac.d.ts +10 -0
  182. package/dist/codecs/aac.d.ts.map +1 -0
  183. package/dist/codecs/aac.js +10 -0
  184. package/dist/codecs/aac.js.map +1 -0
  185. package/dist/codecs/avc.d.ts +11 -0
  186. package/dist/codecs/avc.d.ts.map +1 -0
  187. package/dist/codecs/avc.js +11 -0
  188. package/dist/codecs/avc.js.map +1 -0
  189. package/dist/codecs/hevc.d.ts +11 -0
  190. package/dist/codecs/hevc.d.ts.map +1 -0
  191. package/dist/codecs/hevc.js +11 -0
  192. package/dist/codecs/hevc.js.map +1 -0
  193. package/dist/codecs/index.d.ts +10 -0
  194. package/dist/codecs/index.d.ts.map +1 -0
  195. package/dist/codecs/index.js +14 -0
  196. package/dist/codecs/index.js.map +1 -0
  197. package/dist/codecs/validation/audio.d.ts +19 -0
  198. package/dist/codecs/validation/audio.d.ts.map +1 -0
  199. package/dist/codecs/validation/audio.js +111 -0
  200. package/dist/codecs/validation/audio.js.map +1 -0
  201. package/dist/codecs/validation/config.d.ts +27 -0
  202. package/dist/codecs/validation/config.d.ts.map +1 -0
  203. package/dist/codecs/validation/config.js +154 -0
  204. package/dist/codecs/validation/config.js.map +1 -0
  205. package/dist/codecs/validation/index.d.ts +9 -0
  206. package/dist/codecs/validation/index.d.ts.map +1 -0
  207. package/dist/codecs/validation/index.js +12 -0
  208. package/dist/codecs/validation/index.js.map +1 -0
  209. package/dist/codecs/validation/video.d.ts +24 -0
  210. package/dist/codecs/validation/video.d.ts.map +1 -0
  211. package/dist/codecs/validation/video.js +196 -0
  212. package/dist/codecs/validation/video.js.map +1 -0
  213. package/dist/containers/NodeAvMuxer.d.ts +7 -0
  214. package/dist/containers/NodeAvMuxer.d.ts.map +1 -1
  215. package/dist/containers/NodeAvMuxer.js +127 -7
  216. package/dist/containers/NodeAvMuxer.js.map +1 -1
  217. package/dist/core/AudioData.d.ts.map +1 -1
  218. package/dist/core/AudioData.js +54 -12
  219. package/dist/core/AudioData.js.map +1 -1
  220. package/dist/core/EncodedAudioChunk.d.ts.map +1 -1
  221. package/dist/core/EncodedAudioChunk.js +74 -6
  222. package/dist/core/EncodedAudioChunk.js.map +1 -1
  223. package/dist/core/EncodedVideoChunk.d.ts +2 -0
  224. package/dist/core/EncodedVideoChunk.d.ts.map +1 -1
  225. package/dist/core/EncodedVideoChunk.js +70 -2
  226. package/dist/core/EncodedVideoChunk.js.map +1 -1
  227. package/dist/core/VideoFrame.d.ts +16 -10
  228. package/dist/core/VideoFrame.d.ts.map +1 -1
  229. package/dist/core/VideoFrame.js +238 -129
  230. package/dist/core/VideoFrame.js.map +1 -1
  231. package/dist/core/video-frame/layout.d.ts +10 -0
  232. package/dist/core/video-frame/layout.d.ts.map +1 -0
  233. package/dist/core/video-frame/layout.js +97 -0
  234. package/dist/core/video-frame/layout.js.map +1 -0
  235. package/dist/core/video-frame/orientation.d.ts +23 -0
  236. package/dist/core/video-frame/orientation.d.ts.map +1 -0
  237. package/dist/core/video-frame/orientation.js +49 -0
  238. package/dist/core/video-frame/orientation.js.map +1 -0
  239. package/dist/core/video-frame/transfer.d.ts +19 -0
  240. package/dist/core/video-frame/transfer.d.ts.map +1 -0
  241. package/dist/core/video-frame/transfer.js +78 -0
  242. package/dist/core/video-frame/transfer.js.map +1 -0
  243. package/dist/core/video-frame/validation.d.ts +28 -0
  244. package/dist/core/video-frame/validation.d.ts.map +1 -0
  245. package/dist/core/video-frame/validation.js +76 -0
  246. package/dist/core/video-frame/validation.js.map +1 -0
  247. package/dist/decoders/AudioDecoder.d.ts +2 -19
  248. package/dist/decoders/AudioDecoder.d.ts.map +1 -1
  249. package/dist/decoders/AudioDecoder.js +27 -11
  250. package/dist/decoders/AudioDecoder.js.map +1 -1
  251. package/dist/decoders/ImageDecoder.d.ts +34 -41
  252. package/dist/decoders/ImageDecoder.d.ts.map +1 -1
  253. package/dist/decoders/ImageDecoder.js +158 -266
  254. package/dist/decoders/ImageDecoder.js.map +1 -1
  255. package/dist/decoders/VideoDecoder.d.ts +2 -38
  256. package/dist/decoders/VideoDecoder.d.ts.map +1 -1
  257. package/dist/decoders/VideoDecoder.js +120 -120
  258. package/dist/decoders/VideoDecoder.js.map +1 -1
  259. package/dist/decoders/audio/config.d.ts +23 -0
  260. package/dist/decoders/audio/config.d.ts.map +1 -0
  261. package/dist/decoders/audio/config.js +112 -0
  262. package/dist/decoders/audio/config.js.map +1 -0
  263. package/dist/decoders/audio/constants.d.ts +6 -0
  264. package/dist/decoders/audio/constants.d.ts.map +1 -0
  265. package/dist/decoders/audio/constants.js +6 -0
  266. package/dist/decoders/audio/constants.js.map +1 -0
  267. package/dist/decoders/audio/types.d.ts +21 -0
  268. package/dist/decoders/audio/types.d.ts.map +1 -0
  269. package/dist/decoders/audio/types.js +5 -0
  270. package/dist/decoders/audio/types.js.map +1 -0
  271. package/dist/decoders/image/orientation.d.ts +16 -0
  272. package/dist/decoders/image/orientation.d.ts.map +1 -0
  273. package/dist/decoders/image/orientation.js +170 -0
  274. package/dist/decoders/image/orientation.js.map +1 -0
  275. package/dist/decoders/image/stream.d.ts +12 -0
  276. package/dist/decoders/image/stream.d.ts.map +1 -0
  277. package/dist/decoders/image/stream.js +41 -0
  278. package/dist/decoders/image/stream.js.map +1 -0
  279. package/dist/decoders/image/tracks.d.ts +76 -0
  280. package/dist/decoders/image/tracks.d.ts.map +1 -0
  281. package/dist/decoders/image/tracks.js +136 -0
  282. package/dist/decoders/image/tracks.js.map +1 -0
  283. package/dist/decoders/image/types.d.ts +36 -0
  284. package/dist/decoders/image/types.d.ts.map +1 -0
  285. package/dist/decoders/image/types.js +5 -0
  286. package/dist/decoders/image/types.js.map +1 -0
  287. package/dist/decoders/video/codec-specific.d.ts +19 -0
  288. package/dist/decoders/video/codec-specific.d.ts.map +1 -0
  289. package/dist/decoders/video/codec-specific.js +62 -0
  290. package/dist/decoders/video/codec-specific.js.map +1 -0
  291. package/dist/decoders/video/config.d.ts +17 -0
  292. package/dist/decoders/video/config.d.ts.map +1 -0
  293. package/dist/decoders/video/config.js +91 -0
  294. package/dist/decoders/video/config.js.map +1 -0
  295. package/dist/decoders/video/constants.d.ts +8 -0
  296. package/dist/decoders/video/constants.d.ts.map +1 -0
  297. package/dist/decoders/video/constants.js +13 -0
  298. package/dist/decoders/video/constants.js.map +1 -0
  299. package/dist/decoders/video/queue.d.ts +9 -0
  300. package/dist/decoders/video/queue.d.ts.map +1 -0
  301. package/dist/decoders/video/queue.js +17 -0
  302. package/dist/decoders/video/queue.js.map +1 -0
  303. package/dist/decoders/video/types.d.ts +41 -0
  304. package/dist/decoders/video/types.d.ts.map +1 -0
  305. package/dist/decoders/video/types.js +5 -0
  306. package/dist/decoders/video/types.js.map +1 -0
  307. package/dist/demos/demo-audio-visualizer.js +74 -48
  308. package/dist/demos/demo-audio-visualizer.js.map +1 -1
  309. package/dist/demos/demo-dvd-logo.js +26 -23
  310. package/dist/demos/demo-dvd-logo.js.map +1 -1
  311. package/dist/demos/demo-flow-field.d.ts +11 -0
  312. package/dist/demos/demo-flow-field.d.ts.map +1 -0
  313. package/dist/demos/demo-flow-field.js +305 -0
  314. package/dist/demos/demo-flow-field.js.map +1 -0
  315. package/dist/demos/demo-four-corners.js +56 -120
  316. package/dist/demos/demo-four-corners.js.map +1 -1
  317. package/dist/demos/demo-image.js +24 -19
  318. package/dist/demos/demo-image.js.map +1 -1
  319. package/dist/demos/demo-matrix-rain.d.ts +11 -0
  320. package/dist/demos/demo-matrix-rain.d.ts.map +1 -0
  321. package/dist/demos/demo-matrix-rain.js +246 -0
  322. package/dist/demos/demo-matrix-rain.js.map +1 -0
  323. package/dist/demos/demo-pipeline.js +56 -51
  324. package/dist/demos/demo-pipeline.js.map +1 -1
  325. package/dist/demos/demo-samples.js +56 -402
  326. package/dist/demos/demo-samples.js.map +1 -1
  327. package/dist/encoders/AudioEncoder.d.ts +2 -28
  328. package/dist/encoders/AudioEncoder.d.ts.map +1 -1
  329. package/dist/encoders/AudioEncoder.js +80 -20
  330. package/dist/encoders/AudioEncoder.js.map +1 -1
  331. package/dist/encoders/VideoEncoder.d.ts +25 -46
  332. package/dist/encoders/VideoEncoder.d.ts.map +1 -1
  333. package/dist/encoders/VideoEncoder.js +180 -88
  334. package/dist/encoders/VideoEncoder.js.map +1 -1
  335. package/dist/encoders/audio/config.d.ts +30 -0
  336. package/dist/encoders/audio/config.d.ts.map +1 -0
  337. package/dist/encoders/audio/config.js +169 -0
  338. package/dist/encoders/audio/config.js.map +1 -0
  339. package/dist/encoders/audio/constants.d.ts +8 -0
  340. package/dist/encoders/audio/constants.d.ts.map +1 -0
  341. package/dist/encoders/audio/constants.js +8 -0
  342. package/dist/encoders/audio/constants.js.map +1 -0
  343. package/dist/encoders/audio/types.d.ts +70 -0
  344. package/dist/encoders/audio/types.d.ts.map +1 -0
  345. package/dist/encoders/audio/types.js +5 -0
  346. package/dist/encoders/audio/types.js.map +1 -0
  347. package/dist/encoders/video/config.d.ts +25 -0
  348. package/dist/encoders/video/config.d.ts.map +1 -0
  349. package/dist/encoders/video/config.js +132 -0
  350. package/dist/encoders/video/config.js.map +1 -0
  351. package/dist/encoders/video/constants.d.ts +8 -0
  352. package/dist/encoders/video/constants.d.ts.map +1 -0
  353. package/dist/encoders/video/constants.js +8 -0
  354. package/dist/encoders/video/constants.js.map +1 -0
  355. package/dist/encoders/video/queue.d.ts +9 -0
  356. package/dist/encoders/video/queue.d.ts.map +1 -0
  357. package/dist/encoders/video/queue.js +17 -0
  358. package/dist/encoders/video/queue.js.map +1 -0
  359. package/dist/encoders/video/types.d.ts +104 -0
  360. package/dist/encoders/video/types.d.ts.map +1 -0
  361. package/dist/encoders/video/types.js +5 -0
  362. package/dist/encoders/video/types.js.map +1 -0
  363. package/dist/formats/color-space/convert.d.ts +27 -0
  364. package/dist/formats/color-space/convert.d.ts.map +1 -0
  365. package/dist/formats/color-space/convert.js +91 -0
  366. package/dist/formats/color-space/convert.js.map +1 -0
  367. package/dist/formats/color-space/extract.d.ts +32 -0
  368. package/dist/formats/color-space/extract.d.ts.map +1 -0
  369. package/dist/formats/color-space/extract.js +116 -0
  370. package/dist/formats/color-space/extract.js.map +1 -0
  371. package/dist/formats/color-space/index.d.ts +10 -0
  372. package/dist/formats/color-space/index.d.ts.map +1 -0
  373. package/dist/formats/color-space/index.js +14 -0
  374. package/dist/formats/color-space/index.js.map +1 -0
  375. package/dist/formats/color-space/maps.d.ts +70 -0
  376. package/dist/formats/color-space/maps.d.ts.map +1 -0
  377. package/dist/formats/color-space/maps.js +70 -0
  378. package/dist/formats/color-space/maps.js.map +1 -0
  379. package/dist/formats/color-space/types.d.ts +68 -0
  380. package/dist/formats/color-space/types.d.ts.map +1 -0
  381. package/dist/formats/color-space/types.js +49 -0
  382. package/dist/formats/color-space/types.js.map +1 -0
  383. package/dist/formats/color-space.d.ts +4 -124
  384. package/dist/formats/color-space.d.ts.map +1 -1
  385. package/dist/formats/color-space.js +5 -108
  386. package/dist/formats/color-space.js.map +1 -1
  387. package/dist/formats/conversions/frame-converter.d.ts +8 -3
  388. package/dist/formats/conversions/frame-converter.d.ts.map +1 -1
  389. package/dist/formats/conversions/frame-converter.js +16 -12
  390. package/dist/formats/conversions/frame-converter.js.map +1 -1
  391. package/dist/formats/pixel-format/helpers.d.ts +49 -0
  392. package/dist/formats/pixel-format/helpers.d.ts.map +1 -0
  393. package/dist/formats/pixel-format/helpers.js +117 -0
  394. package/dist/formats/pixel-format/helpers.js.map +1 -0
  395. package/dist/formats/pixel-format/index.d.ts +9 -0
  396. package/dist/formats/pixel-format/index.d.ts.map +1 -0
  397. package/dist/formats/pixel-format/index.js +10 -0
  398. package/dist/formats/pixel-format/index.js.map +1 -0
  399. package/dist/formats/pixel-format/sizes.d.ts +17 -0
  400. package/dist/formats/pixel-format/sizes.d.ts.map +1 -0
  401. package/dist/formats/pixel-format/sizes.js +159 -0
  402. package/dist/formats/pixel-format/sizes.js.map +1 -0
  403. package/dist/formats/pixel-format/types.d.ts +13 -0
  404. package/dist/formats/pixel-format/types.d.ts.map +1 -0
  405. package/dist/formats/pixel-format/types.js +5 -0
  406. package/dist/formats/pixel-format/types.js.map +1 -0
  407. package/dist/formats/pixel-formats.d.ts +4 -53
  408. package/dist/formats/pixel-formats.d.ts.map +1 -1
  409. package/dist/formats/pixel-formats.js +5 -179
  410. package/dist/formats/pixel-formats.js.map +1 -1
  411. package/dist/hardware/types.d.ts.map +1 -1
  412. package/dist/hardware/types.js +8 -2
  413. package/dist/hardware/types.js.map +1 -1
  414. package/dist/transfer/detach.d.ts +42 -0
  415. package/dist/transfer/detach.d.ts.map +1 -0
  416. package/dist/transfer/detach.js +93 -0
  417. package/dist/transfer/detach.js.map +1 -0
  418. package/dist/transfer/index.d.ts +9 -0
  419. package/dist/transfer/index.d.ts.map +1 -0
  420. package/dist/transfer/index.js +11 -0
  421. package/dist/transfer/index.js.map +1 -0
  422. package/dist/transfer/validate.d.ts +45 -0
  423. package/dist/transfer/validate.d.ts.map +1 -0
  424. package/dist/transfer/validate.js +98 -0
  425. package/dist/transfer/validate.js.map +1 -0
  426. package/dist/types/video.d.ts +16 -0
  427. package/dist/types/video.d.ts.map +1 -1
  428. package/dist/utils/codec-validation.d.ts +3 -28
  429. package/dist/utils/codec-validation.d.ts.map +1 -1
  430. package/dist/utils/codec-validation.js +4 -248
  431. package/dist/utils/codec-validation.js.map +1 -1
  432. package/docs/api.md +4 -2
  433. package/docs/architecture-refactor-plan.md +149 -0
  434. package/docs/architecture.md +258 -0
  435. package/package.json +6 -4
  436. package/dist/config/ffmpeg-quality.d.ts +0 -23
  437. package/dist/config/ffmpeg-quality.d.ts.map +0 -1
  438. package/dist/config/ffmpeg-quality.js +0 -15
  439. package/dist/config/ffmpeg-quality.js.map +0 -1
  440. package/dist/containers/FFmpegSpawnMuxer.d.ts +0 -42
  441. package/dist/containers/FFmpegSpawnMuxer.d.ts.map +0 -1
  442. package/dist/containers/FFmpegSpawnMuxer.js +0 -311
  443. package/dist/containers/FFmpegSpawnMuxer.js.map +0 -1
  444. package/dist/containers/FallbackMuxer.d.ts +0 -42
  445. package/dist/containers/FallbackMuxer.d.ts.map +0 -1
  446. package/dist/containers/FallbackMuxer.js +0 -311
  447. package/dist/containers/FallbackMuxer.js.map +0 -1
  448. package/dist/containers/MuxerWithFallback.d.ts +0 -110
  449. package/dist/containers/MuxerWithFallback.d.ts.map +0 -1
  450. package/dist/containers/MuxerWithFallback.js +0 -239
  451. package/dist/containers/MuxerWithFallback.js.map +0 -1
  452. package/dist/demos/demo-audio-visualizer-mediabunny.d.ts +0 -10
  453. package/dist/demos/demo-audio-visualizer-mediabunny.d.ts.map +0 -1
  454. package/dist/demos/demo-audio-visualizer-mediabunny.js +0 -357
  455. package/dist/demos/demo-audio-visualizer-mediabunny.js.map +0 -1
  456. package/dist/demos/demo-audio-visualizer-nodeav.d.ts +0 -10
  457. package/dist/demos/demo-audio-visualizer-nodeav.d.ts.map +0 -1
  458. package/dist/demos/demo-audio-visualizer-nodeav.js +0 -318
  459. package/dist/demos/demo-audio-visualizer-nodeav.js.map +0 -1
  460. package/dist/demos/demo-muxer-fallback.d.ts +0 -8
  461. package/dist/demos/demo-muxer-fallback.d.ts.map +0 -1
  462. package/dist/demos/demo-muxer-fallback.js +0 -165
  463. package/dist/demos/demo-muxer-fallback.js.map +0 -1
  464. package/dist/polyfills/CanvasRenderingContext2DPolyfill.d.ts +0 -72
  465. package/dist/polyfills/CanvasRenderingContext2DPolyfill.d.ts.map +0 -1
  466. package/dist/polyfills/CanvasRenderingContext2DPolyfill.js +0 -293
  467. package/dist/polyfills/CanvasRenderingContext2DPolyfill.js.map +0 -1
  468. package/dist/polyfills/ImageDataPolyfill.d.ts +0 -12
  469. package/dist/polyfills/ImageDataPolyfill.d.ts.map +0 -1
  470. package/dist/polyfills/ImageDataPolyfill.js +0 -22
  471. package/dist/polyfills/ImageDataPolyfill.js.map +0 -1
  472. package/dist/polyfills/OffscreenCanvasPolyfill.d.ts +0 -16
  473. package/dist/polyfills/OffscreenCanvasPolyfill.d.ts.map +0 -1
  474. package/dist/polyfills/OffscreenCanvasPolyfill.js +0 -46
  475. package/dist/polyfills/OffscreenCanvasPolyfill.js.map +0 -1
  476. package/dist/polyfills/VideoFramePolyfill.d.ts +0 -44
  477. package/dist/polyfills/VideoFramePolyfill.d.ts.map +0 -1
  478. package/dist/polyfills/VideoFramePolyfill.js +0 -98
  479. package/dist/polyfills/VideoFramePolyfill.js.map +0 -1
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Codec description utilities for H.264/HEVC
3
+ *
4
+ * Handles extraction of parameter sets (SPS/PPS/VPS) from encoded packets
5
+ * and builds decoder configuration records (AVCC/HVCC) for MP4 containers.
6
+ */
7
+ import { extractHevcParameterSetsFromAnnexB, buildHvccDecoderConfig, convertAnnexBToHvcc, } from '../../../../utils/hevc.js';
8
+ import { extractAvcParameterSetsFromAnnexB, buildAvcDecoderConfig, convertAnnexBToAvcc, } from '../../../../utils/avc.js';
9
+ import { createLogger } from '../../../../utils/logger.js';
10
+ const logger = createLogger('codec-description');
11
+ /**
12
+ * Process H.264 packet: extract AVCC description and convert to length-prefixed format
13
+ */
14
+ export function processAvcPacket(packetData, isKeyFrame, existingDescription, outputFormat) {
15
+ let description = existingDescription;
16
+ let frameData = Buffer.from(packetData);
17
+ // Extract SPS/PPS from first keyframe to build AVCC description
18
+ if (isKeyFrame && !description) {
19
+ try {
20
+ const { sps, pps } = extractAvcParameterSetsFromAnnexB(packetData);
21
+ if (sps.length > 0 && pps.length > 0) {
22
+ description = Buffer.from(buildAvcDecoderConfig(sps, pps, 4));
23
+ logger.debug(`Built AVCC description: ${description.length} bytes`);
24
+ }
25
+ else {
26
+ logger.warn('H.264 keyframe missing parameter sets (SPS/PPS)');
27
+ }
28
+ }
29
+ catch (err) {
30
+ logger.warn(`Failed to extract H.264 parameter sets: ${err.message}`);
31
+ }
32
+ }
33
+ // Convert Annex B to length-prefixed format for MP4
34
+ if (outputFormat !== 'annexb') {
35
+ frameData = convertAnnexBToAvcc(packetData, 4);
36
+ logger.debug(`Converted H.264 frame to length-prefixed: ${packetData.length} -> ${frameData.length} bytes`);
37
+ }
38
+ return { description, frameData };
39
+ }
40
+ /**
41
+ * Process HEVC packet: extract HVCC description and convert to length-prefixed format
42
+ */
43
+ export function processHevcPacket(packetData, isKeyFrame, existingDescription, outputFormat) {
44
+ let description = existingDescription;
45
+ let frameData = Buffer.from(packetData);
46
+ // Extract VPS/SPS/PPS from first keyframe to build HVCC description
47
+ if (isKeyFrame && !description) {
48
+ try {
49
+ const { vps, sps, pps } = extractHevcParameterSetsFromAnnexB(packetData);
50
+ if (vps.length > 0 && sps.length > 0 && pps.length > 0) {
51
+ description = Buffer.from(buildHvccDecoderConfig(vps, sps, pps, 4));
52
+ logger.debug(`Built HVCC description: ${description.length} bytes`);
53
+ }
54
+ else {
55
+ logger.warn('HEVC keyframe missing parameter sets (VPS/SPS/PPS)');
56
+ }
57
+ }
58
+ catch (err) {
59
+ logger.warn(`Failed to extract HEVC parameter sets: ${err.message}`);
60
+ }
61
+ }
62
+ // Convert Annex B to length-prefixed format for MP4
63
+ if (outputFormat !== 'annexb') {
64
+ frameData = convertAnnexBToHvcc(packetData, 4);
65
+ logger.debug(`Converted HEVC frame to length-prefixed: ${packetData.length} -> ${frameData.length} bytes`);
66
+ }
67
+ return { description, frameData };
68
+ }
69
+ /**
70
+ * Process an encoded packet, handling codec-specific description extraction
71
+ * and format conversion based on codec type
72
+ */
73
+ export function processEncodedPacket(packetData, isKeyFrame, codecType, existingDescription, outputFormat) {
74
+ if (codecType === 'avc') {
75
+ return processAvcPacket(packetData, isKeyFrame, existingDescription, outputFormat);
76
+ }
77
+ if (codecType === 'hevc') {
78
+ return processHevcPacket(packetData, isKeyFrame, existingDescription, outputFormat);
79
+ }
80
+ // For other codecs (VP8, VP9, AV1), no conversion needed
81
+ return {
82
+ description: existingDescription,
83
+ frameData: Buffer.from(packetData),
84
+ };
85
+ }
86
+ //# sourceMappingURL=codec-description.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec-description.js","sourceRoot":"","sources":["../../../../../src/backends/node-av/video/encoder/codec-description.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Packet drain utilities for video encoding
3
+ *
4
+ * Handles draining encoded packets from the encoder
5
+ * and converting them to EncodedFrame output format.
6
+ */
7
+ import type { Encoder } from 'node-av/api';
8
+ import type { EncodedFrame } from '../../../types.js';
9
+ export interface DrainContext {
10
+ /** Current codec description (AVCC/HVCC) */
11
+ codecDescription: Buffer | null;
12
+ /** Whether this is AVC codec */
13
+ isAvcCodec: boolean;
14
+ /** Whether this is HEVC codec */
15
+ isHevcCodec: boolean;
16
+ /** Output format (annexb or mp4) */
17
+ outputFormat: 'annexb' | 'mp4';
18
+ /** Fallback frame index for timestamp */
19
+ frameIndex: number;
20
+ }
21
+ export interface DrainResult {
22
+ /** Encoded frames extracted from packets */
23
+ frames: EncodedFrame[];
24
+ /** Updated codec description (may have been extracted from first keyframe) */
25
+ codecDescription: Buffer | null;
26
+ }
27
+ /**
28
+ * Drain all available packets from the encoder
29
+ *
30
+ * Converts packets to EncodedFrame format, extracting codec description
31
+ * from the first keyframe if needed.
32
+ */
33
+ export declare function drainEncoderPackets(encoder: Encoder, context: DrainContext): Promise<DrainResult>;
34
+ //# sourceMappingURL=drain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drain.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/video/encoder/drain.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAOtD,MAAM,WAAW,YAAY;IAC3B,4CAA4C;IAC5C,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gCAAgC;IAChC,UAAU,EAAE,OAAO,CAAC;IACpB,iCAAiC;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,oCAAoC;IACpC,YAAY,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC/B,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,4CAA4C;IAC5C,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,8EAA8E;IAC9E,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,WAAW,CAAC,CA8CtB"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Packet drain utilities for video encoding
3
+ *
4
+ * Handles draining encoded packets from the encoder
5
+ * and converting them to EncodedFrame output format.
6
+ */
7
+ import { AV_PKT_FLAG_KEY } from 'node-av/constants';
8
+ import { createLogger } from '../../../../utils/logger.js';
9
+ import { processEncodedPacket } from './codec-description.js';
10
+ import { ptsToMicroseconds } from './timestamp.js';
11
+ const logger = createLogger('encoder-drain');
12
+ /**
13
+ * Drain all available packets from the encoder
14
+ *
15
+ * Converts packets to EncodedFrame format, extracting codec description
16
+ * from the first keyframe if needed.
17
+ */
18
+ export async function drainEncoderPackets(encoder, context) {
19
+ const frames = [];
20
+ let codecDescription = context.codecDescription;
21
+ let packet = await encoder.receive();
22
+ while (packet) {
23
+ if (packet.data) {
24
+ // Convert packet PTS from packet's timebase to microseconds
25
+ let timestamp = context.frameIndex;
26
+ if (packet.pts !== undefined) {
27
+ timestamp = ptsToMicroseconds(packet.pts, packet.timeBase);
28
+ }
29
+ const keyFrame = (packet.flags & AV_PKT_FLAG_KEY) === AV_PKT_FLAG_KEY || packet.isKeyframe;
30
+ // Process packet: extract codec description and convert format if needed
31
+ const codecType = context.isAvcCodec ? 'avc' : context.isHevcCodec ? 'hevc' : 'other';
32
+ const result = processEncodedPacket(packet.data, keyFrame, codecType, codecDescription, context.outputFormat);
33
+ // Update codec description if newly extracted
34
+ if (result.description && !codecDescription) {
35
+ codecDescription = result.description;
36
+ }
37
+ const frame = {
38
+ data: result.frameData,
39
+ timestamp,
40
+ keyFrame,
41
+ description: codecDescription ?? undefined,
42
+ };
43
+ logger.debug(`Encoded packet: size=${packet.data.length}, key=${keyFrame}`);
44
+ frames.push(frame);
45
+ }
46
+ packet.unref();
47
+ packet = await encoder.receive();
48
+ }
49
+ return { frames, codecDescription };
50
+ }
51
+ //# sourceMappingURL=drain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drain.js","sourceRoot":"","sources":["../../../../../src/backends/node-av/video/encoder/drain.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;AAsB7C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAgB,EAChB,OAAqB;IAErB,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,IAAI,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAEhD,IAAI,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACrC,OAAO,MAAM,EAAE,CAAC;QACd,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,4DAA4D;YAC5D,IAAI,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;YACnC,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBAC7B,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC7D,CAAC;YAED,MAAM,QAAQ,GACZ,CAAC,MAAM,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,eAAe,IAAI,MAAM,CAAC,UAAU,CAAC;YAE5E,yEAAyE;YACzE,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;YACtF,MAAM,MAAM,GAAG,oBAAoB,CACjC,MAAM,CAAC,IAAI,EACX,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,OAAO,CAAC,YAAY,CACrB,CAAC;YAEF,8CAA8C;YAC9C,IAAI,MAAM,CAAC,WAAW,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC5C,gBAAgB,GAAG,MAAM,CAAC,WAAW,CAAC;YACxC,CAAC;YAED,MAAM,KAAK,GAAiB;gBAC1B,IAAI,EAAE,MAAM,CAAC,SAAS;gBACtB,SAAS;gBACT,QAAQ;gBACR,WAAW,EAAE,gBAAgB,IAAI,SAAS;aAC3C,CAAC;YAEF,MAAM,CAAC,KAAK,CAAC,wBAAwB,MAAM,CAAC,IAAI,CAAC,MAAM,SAAS,QAAQ,EAAE,CAAC,CAAC;YAC5E,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QACD,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;AACtC,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Filter chain utilities for video encoding
3
+ *
4
+ * Handles creation and management of FFmpeg filter chains
5
+ * for format conversion and rescaling.
6
+ */
7
+ import { FilterAPI, type HardwareContext } from 'node-av/api';
8
+ export interface FilterConfig {
9
+ /** Target format name (e.g., 'nv12', 'yuv420p') */
10
+ targetFormat: string;
11
+ /** Input dimensions */
12
+ inputWidth: number;
13
+ inputHeight: number;
14
+ /** Output dimensions */
15
+ outputWidth: number;
16
+ outputHeight: number;
17
+ /** Whether rescaling is needed */
18
+ needsRescaling: boolean;
19
+ /** Whether format conversion is needed */
20
+ needsFormatConversion: boolean;
21
+ }
22
+ /**
23
+ * Build a CPU filter chain string for format conversion and/or rescaling
24
+ */
25
+ export declare function buildCpuFilterChain(config: FilterConfig): string;
26
+ /**
27
+ * Create a filter chain for encoding
28
+ *
29
+ * Tries GPU-accelerated filter first if hardware context is available,
30
+ * falls back to CPU filter chain otherwise.
31
+ */
32
+ export declare function createEncoderFilter(config: FilterConfig, hardware: HardwareContext | null): FilterAPI | null;
33
+ /**
34
+ * Create a CPU fallback filter after GPU filter failure
35
+ */
36
+ export declare function createCpuFallbackFilter(config: FilterConfig): FilterAPI;
37
+ //# sourceMappingURL=filters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/video/encoder/filters.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAO9D,MAAM,WAAW,YAAY;IAC3B,mDAAmD;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,cAAc,EAAE,OAAO,CAAC;IACxB,0CAA0C;IAC1C,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAahE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,eAAe,GAAG,IAAI,GAC/B,SAAS,GAAG,IAAI,CA2ClB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAIvE"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Filter chain utilities for video encoding
3
+ *
4
+ * Handles creation and management of FFmpeg filter chains
5
+ * for format conversion and rescaling.
6
+ */
7
+ import { FilterAPI } from 'node-av/api';
8
+ import { createLogger } from '../../../../utils/logger.js';
9
+ import { buildGpuFilterChain } from './gpu-filters.js';
10
+ const logger = createLogger('encoder-filters');
11
+ /**
12
+ * Build a CPU filter chain string for format conversion and/or rescaling
13
+ */
14
+ export function buildCpuFilterChain(config) {
15
+ const filterParts = [];
16
+ if (config.needsRescaling) {
17
+ // Use lanczos scaling for high quality
18
+ filterParts.push(`scale=${config.outputWidth}:${config.outputHeight}:flags=lanczos`);
19
+ }
20
+ if (config.needsFormatConversion) {
21
+ filterParts.push(`format=${config.targetFormat}`);
22
+ }
23
+ return filterParts.join(',');
24
+ }
25
+ /**
26
+ * Create a filter chain for encoding
27
+ *
28
+ * Tries GPU-accelerated filter first if hardware context is available,
29
+ * falls back to CPU filter chain otherwise.
30
+ */
31
+ export function createEncoderFilter(config, hardware) {
32
+ // No filter needed if no conversion or rescaling
33
+ if (!config.needsFormatConversion && !config.needsRescaling) {
34
+ return null;
35
+ }
36
+ // Log rescaling if needed
37
+ if (config.needsRescaling) {
38
+ logger.debug(`Rescaling: ${config.inputWidth}x${config.inputHeight} → ${config.outputWidth}x${config.outputHeight}`);
39
+ }
40
+ // Try GPU-accelerated filter if hardware context is available
41
+ if (hardware) {
42
+ const hwType = hardware.deviceTypeName;
43
+ const gpuFilter = buildGpuFilterChain(hwType, config.targetFormat, config.inputWidth, config.inputHeight, config.outputWidth, config.outputHeight);
44
+ if (gpuFilter) {
45
+ try {
46
+ const filter = FilterAPI.create(gpuFilter, {
47
+ hardware,
48
+ });
49
+ logger.debug(`Created GPU filter chain (${hwType}): ${gpuFilter}`);
50
+ return filter;
51
+ }
52
+ catch (err) {
53
+ logger.debug(`GPU filter failed, falling back to CPU: ${err.message}`);
54
+ }
55
+ }
56
+ }
57
+ // Fallback: CPU filter chain via libswscale
58
+ const filterChain = buildCpuFilterChain(config);
59
+ const filter = FilterAPI.create(filterChain);
60
+ logger.debug(`Created CPU filter chain: ${filterChain}`);
61
+ return filter;
62
+ }
63
+ /**
64
+ * Create a CPU fallback filter after GPU filter failure
65
+ */
66
+ export function createCpuFallbackFilter(config) {
67
+ const filterChain = buildCpuFilterChain(config);
68
+ logger.debug(`Created CPU fallback filter: ${filterChain}`);
69
+ return FilterAPI.create(filterChain);
70
+ }
71
+ //# sourceMappingURL=filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.js","sourceRoot":"","sources":["../../../../../src/backends/node-av/video/encoder/filters.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAwB,MAAM,aAAa,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,MAAM,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAC;AAiB/C;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAoB;IACtD,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,uCAAuC;QACvC,WAAW,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,YAAY,gBAAgB,CAAC,CAAC;IACvF,CAAC;IAED,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;QACjC,WAAW,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAoB,EACpB,QAAgC;IAEhC,iDAAiD;IACjD,IAAI,CAAC,MAAM,CAAC,qBAAqB,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0BAA0B;IAC1B,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,CACV,cAAc,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,WAAW,MAAM,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,YAAY,EAAE,CACvG,CAAC;IACJ,CAAC;IAED,8DAA8D;IAC9D,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC;QACvC,MAAM,SAAS,GAAG,mBAAmB,CACnC,MAAM,EACN,MAAM,CAAC,YAAY,EACnB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,YAAY,CACpB,CAAC;QAEF,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE;oBACzC,QAAQ;iBACF,CAAC,CAAC;gBACV,MAAM,CAAC,KAAK,CAAC,6BAA6B,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;gBACnE,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,2CAA4C,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,MAAM,WAAW,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,CAAC,6BAA6B,WAAW,EAAE,CAAC,CAAC;IACzD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAoB;IAC1D,MAAM,WAAW,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,CAAC,gCAAgC,WAAW,EAAE,CAAC,CAAC;IAC5D,OAAO,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * GPU-accelerated filter chain builders for video encoding
3
+ */
4
+ /**
5
+ * Build GPU-accelerated filter chain for format conversion and optional rescaling
6
+ * Returns null if no GPU filter is available for this hardware type
7
+ */
8
+ export declare function buildGpuFilterChain(hwType: string, targetFormat: string, inputWidth: number | undefined, inputHeight: number | undefined, outputWidth: number, outputHeight: number): string | null;
9
+ //# sourceMappingURL=gpu-filters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gpu-filters.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/video/encoder/gpu-filters.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,MAAM,GAAG,IAAI,CAkBf"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * GPU-accelerated filter chain builders for video encoding
3
+ */
4
+ /**
5
+ * Build GPU-accelerated filter chain for format conversion and optional rescaling
6
+ * Returns null if no GPU filter is available for this hardware type
7
+ */
8
+ export function buildGpuFilterChain(hwType, targetFormat, inputWidth, inputHeight, outputWidth, outputHeight) {
9
+ const needsScale = inputWidth !== undefined && inputHeight !== undefined &&
10
+ (inputWidth !== outputWidth || inputHeight !== outputHeight);
11
+ const scaleParams = needsScale ? `w=${outputWidth}:h=${outputHeight}:` : '';
12
+ // GPU filter chains: upload to GPU → scale on GPU (if needed) → convert format → keep on GPU for encoder
13
+ switch (hwType) {
14
+ case 'vaapi':
15
+ return `format=nv12,hwupload,scale_vaapi=${scaleParams}format=${targetFormat}`;
16
+ case 'cuda':
17
+ return `format=nv12,hwupload_cuda,scale_cuda=${scaleParams}format=${targetFormat}`;
18
+ case 'qsv':
19
+ return `format=nv12,hwupload=extra_hw_frames=64,scale_qsv=${scaleParams}format=${targetFormat}`;
20
+ case 'videotoolbox':
21
+ return `format=nv12,hwupload,scale_vt=${scaleParams}format=${targetFormat}`;
22
+ default:
23
+ return null;
24
+ }
25
+ }
26
+ //# sourceMappingURL=gpu-filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gpu-filters.js","sourceRoot":"","sources":["../../../../../src/backends/node-av/video/encoder/gpu-filters.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAc,EACd,YAAoB,EACpB,UAA8B,EAC9B,WAA+B,EAC/B,WAAmB,EACnB,YAAoB;IAEpB,MAAM,UAAU,GAAG,UAAU,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS;QACtE,CAAC,UAAU,KAAK,WAAW,IAAI,WAAW,KAAK,YAAY,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,WAAW,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5E,yGAAyG;IACzG,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,OAAO;YACV,OAAO,oCAAoC,WAAW,UAAU,YAAY,EAAE,CAAC;QACjF,KAAK,MAAM;YACT,OAAO,wCAAwC,WAAW,UAAU,YAAY,EAAE,CAAC;QACrF,KAAK,KAAK;YACR,OAAO,qDAAqD,WAAW,UAAU,YAAY,EAAE,CAAC;QAClG,KAAK,cAAc;YACjB,OAAO,iCAAiC,WAAW,UAAU,YAAY,EAAE,CAAC;QAC9E;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Hardware encoder constraints and minimum resolution requirements
3
+ */
4
+ /**
5
+ * Get minimum resolution requirements for hardware encoders
6
+ * These are known constraints from hardware encoder specifications
7
+ */
8
+ export declare function getHardwareMinResolution(hwaccel: string, codec: string): {
9
+ width: number;
10
+ height: number;
11
+ };
12
+ //# sourceMappingURL=hardware-constraints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hardware-constraints.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/video/encoder/hardware-constraints.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAkB1G"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Hardware encoder constraints and minimum resolution requirements
3
+ */
4
+ /**
5
+ * Get minimum resolution requirements for hardware encoders
6
+ * These are known constraints from hardware encoder specifications
7
+ */
8
+ export function getHardwareMinResolution(hwaccel, codec) {
9
+ // VAAPI constraints (Intel/AMD)
10
+ if (hwaccel === 'vaapi') {
11
+ if (codec === 'h264')
12
+ return { width: 128, height: 128 };
13
+ if (codec === 'hevc' || codec === 'h265')
14
+ return { width: 130, height: 128 };
15
+ if (codec === 'vp8' || codec === 'vp9')
16
+ return { width: 128, height: 128 };
17
+ if (codec === 'av1')
18
+ return { width: 128, height: 128 };
19
+ }
20
+ // QSV constraints (Intel)
21
+ if (hwaccel === 'qsv') {
22
+ return { width: 128, height: 128 };
23
+ }
24
+ // NVENC typically supports smaller sizes
25
+ if (hwaccel === 'nvenc') {
26
+ return { width: 32, height: 32 };
27
+ }
28
+ // Default: no minimum constraint
29
+ return { width: 1, height: 1 };
30
+ }
31
+ //# sourceMappingURL=hardware-constraints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hardware-constraints.js","sourceRoot":"","sources":["../../../../../src/backends/node-av/video/encoder/hardware-constraints.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAe,EAAE,KAAa;IACrE,gCAAgC;IAChC,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,IAAI,KAAK,KAAK,MAAM;YAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QACzD,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM;YAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QAC7E,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK;YAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QAC3E,IAAI,KAAK,KAAK,KAAK;YAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAC1D,CAAC;IACD,0BAA0B;IAC1B,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACtB,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACrC,CAAC;IACD,yCAAyC;IACzC,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;IACD,iCAAiC;IACjC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AACjC,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Video encoder helper utilities
3
+ *
4
+ * Organized into focused modules:
5
+ * - pixel-format: Input pixel format mapping
6
+ * - pixel-format-config: Encoder pixel format configuration
7
+ * - software-encoders: Software encoder selection
8
+ * - hardware-constraints: Hardware minimum resolution
9
+ * - gpu-filters: GPU filter chain building
10
+ * - filters: Filter chain creation and management
11
+ * - options: Encoder options building
12
+ * - codec-description: AVCC/HVCC extraction
13
+ * - timestamp: PTS conversion utilities
14
+ * - setup: Encoder codec selection
15
+ * - drain: Packet draining utilities
16
+ */
17
+ export { pixelFormatName, mapPixelFormat } from './pixel-format.js';
18
+ export { getSoftwareEncoder } from './software-encoders.js';
19
+ export { getHardwareMinResolution } from './hardware-constraints.js';
20
+ export { buildGpuFilterChain } from './gpu-filters.js';
21
+ export { buildEncoderOptions, configureVpxOptions, configureSvtAv1Options, configureX26xOptions, type EncoderOptions, } from './options.js';
22
+ export { processEncodedPacket, processAvcPacket, processHevcPacket, type CodecDescriptionResult, } from './codec-description.js';
23
+ export { microsecondsToPts, ptsToMicroseconds, getCodecTimeBase, } from './timestamp.js';
24
+ export { selectEncoderCodec, fallbackToSoftware, type EncoderSelection, type EncoderCodec, } from './setup.js';
25
+ export { configureEncoderPixelFormat, hasAlphaChannel, is10BitFormat, codecSupportsAlpha, codecSupports10Bit, type PixelFormatConfig, } from './pixel-format-config.js';
26
+ export { createEncoderFilter, createCpuFallbackFilter, buildCpuFilterChain, type FilterConfig, } from './filters.js';
27
+ export { drainEncoderPackets, type DrainContext, type DrainResult, } from './drain.js';
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/video/encoder/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,KAAK,cAAc,GACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,sBAAsB,GAC5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,2BAA2B,EAC3B,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,iBAAiB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,KAAK,YAAY,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,mBAAmB,EACnB,KAAK,YAAY,EACjB,KAAK,WAAW,GACjB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Video encoder helper utilities
3
+ *
4
+ * Organized into focused modules:
5
+ * - pixel-format: Input pixel format mapping
6
+ * - pixel-format-config: Encoder pixel format configuration
7
+ * - software-encoders: Software encoder selection
8
+ * - hardware-constraints: Hardware minimum resolution
9
+ * - gpu-filters: GPU filter chain building
10
+ * - filters: Filter chain creation and management
11
+ * - options: Encoder options building
12
+ * - codec-description: AVCC/HVCC extraction
13
+ * - timestamp: PTS conversion utilities
14
+ * - setup: Encoder codec selection
15
+ * - drain: Packet draining utilities
16
+ */
17
+ export { pixelFormatName, mapPixelFormat } from './pixel-format.js';
18
+ export { getSoftwareEncoder } from './software-encoders.js';
19
+ export { getHardwareMinResolution } from './hardware-constraints.js';
20
+ export { buildGpuFilterChain } from './gpu-filters.js';
21
+ export { buildEncoderOptions, configureVpxOptions, configureSvtAv1Options, configureX26xOptions, } from './options.js';
22
+ export { processEncodedPacket, processAvcPacket, processHevcPacket, } from './codec-description.js';
23
+ export { microsecondsToPts, ptsToMicroseconds, getCodecTimeBase, } from './timestamp.js';
24
+ export { selectEncoderCodec, fallbackToSoftware, } from './setup.js';
25
+ export { configureEncoderPixelFormat, hasAlphaChannel, is10BitFormat, codecSupportsAlpha, codecSupports10Bit, } from './pixel-format-config.js';
26
+ export { createEncoderFilter, createCpuFallbackFilter, buildCpuFilterChain, } from './filters.js';
27
+ export { drainEncoderPackets, } from './drain.js';
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/backends/node-av/video/encoder/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,GAErB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,GAElB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GAGnB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,2BAA2B,EAC3B,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,kBAAkB,GAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,GAEpB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,mBAAmB,GAGpB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Encoder options building utilities
3
+ *
4
+ * Builds codec-specific encoder options for x264/x265, VP8/VP9, and SVT-AV1
5
+ */
6
+ import { Rational } from 'node-av/lib';
7
+ import type { HardwareContext } from 'node-av/api';
8
+ import type { AVPixelFormat } from 'node-av/constants';
9
+ import type { VideoEncoderBackendConfig } from '../../../types.js';
10
+ export interface EncoderOptions {
11
+ type: 'video';
12
+ width: number;
13
+ height: number;
14
+ pixelFormat: AVPixelFormat;
15
+ timeBase: Rational;
16
+ frameRate: Rational;
17
+ bitrate?: number;
18
+ gopSize: number;
19
+ maxBFrames?: number;
20
+ hardware?: HardwareContext;
21
+ options: Record<string, string | number>;
22
+ }
23
+ /**
24
+ * Configure VP8/VP9 encoder options
25
+ */
26
+ export declare function configureVpxOptions(options: Record<string, string | number>, config: VideoEncoderBackendConfig): void;
27
+ /**
28
+ * Configure SVT-AV1 encoder options
29
+ */
30
+ export declare function configureSvtAv1Options(options: Record<string, string | number>, config: VideoEncoderBackendConfig): void;
31
+ /**
32
+ * Configure x264/x265 encoder options (software and hardware variants)
33
+ */
34
+ export declare function configureX26xOptions(options: Record<string, string | number>, config: VideoEncoderBackendConfig, hwType?: string): void;
35
+ /**
36
+ * Build complete encoder options for a given codec
37
+ */
38
+ export declare function buildEncoderOptions(config: VideoEncoderBackendConfig, codecName: string, inputPixelFormat: AVPixelFormat, timeBase: Rational, hardware: HardwareContext | null): EncoderOptions;
39
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/video/encoder/options.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAQnE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,aAAa,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,QAAQ,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CAC1C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EACxC,MAAM,EAAE,yBAAyB,GAChC,IAAI,CAiBN;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EACxC,MAAM,EAAE,yBAAyB,GAChC,IAAI,CAwBN;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EACxC,MAAM,EAAE,yBAAyB,EACjC,MAAM,CAAC,EAAE,MAAM,GACd,IAAI,CAgEN;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,yBAAyB,EACjC,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,aAAa,EAC/B,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,eAAe,GAAG,IAAI,GAC/B,cAAc,CAyDhB"}