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,54 @@
1
+ /**
2
+ * Sample format mapping utilities for audio decoding
3
+ */
4
+ import { AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S32P, AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_U8P, } from 'node-av/constants';
5
+ /**
6
+ * Map WebCodecs AudioSampleFormat to FFmpeg AVSampleFormat
7
+ */
8
+ export function mapSampleFormat(format) {
9
+ switch (format) {
10
+ case 'u8':
11
+ return AV_SAMPLE_FMT_U8;
12
+ case 'u8-planar':
13
+ return AV_SAMPLE_FMT_U8P;
14
+ case 's16':
15
+ return AV_SAMPLE_FMT_S16;
16
+ case 's16-planar':
17
+ return AV_SAMPLE_FMT_S16P;
18
+ case 's32':
19
+ return AV_SAMPLE_FMT_S32;
20
+ case 's32-planar':
21
+ return AV_SAMPLE_FMT_S32P;
22
+ case 'f32':
23
+ return AV_SAMPLE_FMT_FLT;
24
+ case 'f32-planar':
25
+ return AV_SAMPLE_FMT_FLTP;
26
+ default:
27
+ return AV_SAMPLE_FMT_FLT;
28
+ }
29
+ }
30
+ /**
31
+ * Map AVSampleFormat to FFmpeg format name string
32
+ */
33
+ export function sampleFormatToFFmpegName(fmt) {
34
+ switch (fmt) {
35
+ case AV_SAMPLE_FMT_U8:
36
+ return 'u8';
37
+ case AV_SAMPLE_FMT_U8P:
38
+ return 'u8p';
39
+ case AV_SAMPLE_FMT_S16:
40
+ return 's16';
41
+ case AV_SAMPLE_FMT_S16P:
42
+ return 's16p';
43
+ case AV_SAMPLE_FMT_S32:
44
+ return 's32';
45
+ case AV_SAMPLE_FMT_S32P:
46
+ return 's32p';
47
+ case AV_SAMPLE_FMT_FLTP:
48
+ return 'fltp';
49
+ case AV_SAMPLE_FMT_FLT:
50
+ default:
51
+ return 'flt';
52
+ }
53
+ }
54
+ //# sourceMappingURL=sample-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sample-format.js","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/decoder/sample-format.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,GAElB,MAAM,mBAAmB,CAAC;AAI3B;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAyB;IACvD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,IAAI;YACP,OAAO,gBAAgB,CAAC;QAC1B,KAAK,WAAW;YACd,OAAO,iBAAiB,CAAC;QAC3B,KAAK,KAAK;YACR,OAAO,iBAAiB,CAAC;QAC3B,KAAK,YAAY;YACf,OAAO,kBAAkB,CAAC;QAC5B,KAAK,KAAK;YACR,OAAO,iBAAiB,CAAC;QAC3B,KAAK,YAAY;YACf,OAAO,kBAAkB,CAAC;QAC5B,KAAK,KAAK;YACR,OAAO,iBAAiB,CAAC;QAC3B,KAAK,YAAY;YACf,OAAO,kBAAkB,CAAC;QAC5B;YACE,OAAO,iBAAiB,CAAC;IAC7B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAmB;IAC1D,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,gBAAgB;YACnB,OAAO,IAAI,CAAC;QACd,KAAK,iBAAiB;YACpB,OAAO,KAAK,CAAC;QACf,KAAK,iBAAiB;YACpB,OAAO,KAAK,CAAC;QACf,KAAK,kBAAkB;YACrB,OAAO,MAAM,CAAC;QAChB,KAAK,iBAAiB;YACpB,OAAO,KAAK,CAAC;QACf,KAAK,kBAAkB;YACrB,OAAO,MAAM,CAAC;QAChB,KAAK,kBAAkB;YACrB,OAAO,MAAM,CAAC;QAChB,KAAK,iBAAiB,CAAC;QACvB;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Channel layout utilities for audio encoding
3
+ */
4
+ /**
5
+ * Get channel layout for the given number of channels
6
+ */
7
+ export declare function getChannelLayout(numChannels: number): {
8
+ nbChannels: number;
9
+ order: number;
10
+ mask: bigint;
11
+ };
12
+ //# sourceMappingURL=channel-layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-layout.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/encoder/channel-layout.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAezG"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Channel layout utilities for audio encoding
3
+ */
4
+ import { AV_CHANNEL_ORDER_NATIVE, AV_CH_LAYOUT_MONO, AV_CH_LAYOUT_STEREO, AV_CH_LAYOUT_5POINT1, AV_CH_LAYOUT_7POINT1, } from 'node-av/constants';
5
+ /**
6
+ * Get channel layout for the given number of channels
7
+ */
8
+ export function getChannelLayout(numChannels) {
9
+ // Standard channel layouts as ChannelLayout objects
10
+ // Order 1 = AV_CHANNEL_ORDER_NATIVE (required for FFmpeg)
11
+ switch (numChannels) {
12
+ case 1:
13
+ return { nbChannels: 1, order: AV_CHANNEL_ORDER_NATIVE, mask: AV_CH_LAYOUT_MONO };
14
+ case 2:
15
+ return { nbChannels: 2, order: AV_CHANNEL_ORDER_NATIVE, mask: AV_CH_LAYOUT_STEREO };
16
+ case 6:
17
+ return { nbChannels: 6, order: AV_CHANNEL_ORDER_NATIVE, mask: AV_CH_LAYOUT_5POINT1 };
18
+ case 8:
19
+ return { nbChannels: 8, order: AV_CHANNEL_ORDER_NATIVE, mask: AV_CH_LAYOUT_7POINT1 };
20
+ default:
21
+ return { nbChannels: numChannels, order: AV_CHANNEL_ORDER_NATIVE, mask: BigInt((1 << numChannels) - 1) };
22
+ }
23
+ }
24
+ //# sourceMappingURL=channel-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-layout.js","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/encoder/channel-layout.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,oDAAoD;IACpD,0DAA0D;IAC1D,QAAQ,WAAW,EAAE,CAAC;QACpB,KAAK,CAAC;YACJ,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;QACpF,KAAK,CAAC;YACJ,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;QACtF,KAAK,CAAC;YACJ,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;QACvF,KAAK,CAAC;YACJ,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;QACvF;YACE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;IAC7G,CAAC;AACH,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Audio codec description utilities
3
+ *
4
+ * Extracts and generates codec-specific description data (extradata)
5
+ * for AAC, Opus, FLAC, and Vorbis codecs.
6
+ */
7
+ import type { Encoder } from 'node-av/api';
8
+ /**
9
+ * Generate OpusHead (Identification Header) per RFC 7845 Section 5.1
10
+ * Used when FFmpeg doesn't provide extradata for Opus encoding
11
+ */
12
+ export declare function generateOpusHead(channels: number, inputSampleRate: number): Buffer;
13
+ /**
14
+ * Build FLAC description from extradata
15
+ * Prepends 'fLaC' magic and STREAMINFO block header
16
+ */
17
+ export declare function buildFlacDescription(extraData: Uint8Array): Buffer;
18
+ export interface CodecDescriptionContext {
19
+ codec: string;
20
+ numberOfChannels: number;
21
+ inputSampleRate: number;
22
+ }
23
+ /**
24
+ * Extract codec description (extradata) from encoder
25
+ *
26
+ * Different codecs have different description formats:
27
+ * - AAC: AudioSpecificConfig
28
+ * - Opus: OpusHead (Identification Header)
29
+ * - FLAC: fLaC magic + STREAMINFO block
30
+ * - Vorbis: identification + comment + setup headers
31
+ */
32
+ export declare function extractCodecDescription(encoder: Encoder, context: CodecDescriptionContext): Buffer | null;
33
+ //# sourceMappingURL=codec-description.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec-description.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/encoder/codec-description.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAK3C;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,GACtB,MAAM,CAmER;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAKlE;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,uBAAuB,GAC/B,MAAM,GAAG,IAAI,CAkDf"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Audio codec description utilities
3
+ *
4
+ * Extracts and generates codec-specific description data (extradata)
5
+ * for AAC, Opus, FLAC, and Vorbis codecs.
6
+ */
7
+ import { createLogger } from '../../../../utils/logger.js';
8
+ const logger = createLogger('audio-codec-description');
9
+ /**
10
+ * Generate OpusHead (Identification Header) per RFC 7845 Section 5.1
11
+ * Used when FFmpeg doesn't provide extradata for Opus encoding
12
+ */
13
+ export function generateOpusHead(channels, inputSampleRate) {
14
+ const sampleRate = inputSampleRate || 48000;
15
+ // OpusHead structure:
16
+ // - Magic Signature: "OpusHead" (8 bytes)
17
+ // - Version: 1 (1 byte)
18
+ // - Channel Count (1 byte)
19
+ // - Pre-skip: samples to skip at start (2 bytes, LE) - 312 is typical for 48kHz
20
+ // - Input Sample Rate (4 bytes, LE) - original sample rate
21
+ // - Output Gain: 0 dB (2 bytes, LE)
22
+ // - Channel Mapping Family (1 byte) - 0 for mono/stereo
23
+ const preSkip = 312;
24
+ const outputGain = 0;
25
+ const mappingFamily = channels <= 2 ? 0 : 1;
26
+ let headerSize = 19; // Base header size for mapping family 0
27
+ if (mappingFamily > 0) {
28
+ headerSize += 2 + channels;
29
+ }
30
+ const header = Buffer.alloc(headerSize);
31
+ let offset = 0;
32
+ // Magic Signature
33
+ header.write('OpusHead', offset);
34
+ offset += 8;
35
+ // Version
36
+ header.writeUInt8(1, offset);
37
+ offset += 1;
38
+ // Channel Count
39
+ header.writeUInt8(channels, offset);
40
+ offset += 1;
41
+ // Pre-skip (little-endian)
42
+ header.writeUInt16LE(preSkip, offset);
43
+ offset += 2;
44
+ // Input Sample Rate (little-endian)
45
+ header.writeUInt32LE(sampleRate, offset);
46
+ offset += 4;
47
+ // Output Gain (little-endian)
48
+ header.writeInt16LE(outputGain, offset);
49
+ offset += 2;
50
+ // Channel Mapping Family
51
+ header.writeUInt8(mappingFamily, offset);
52
+ offset += 1;
53
+ // For mapping family > 0, add stream info and channel mapping
54
+ if (mappingFamily > 0) {
55
+ const streamCount = channels > 2 ? Math.ceil(channels / 2) : 1;
56
+ const coupledCount = channels > 2 ? Math.floor(channels / 2) : 0;
57
+ header.writeUInt8(streamCount, offset);
58
+ offset += 1;
59
+ header.writeUInt8(coupledCount, offset);
60
+ offset += 1;
61
+ // Channel mapping (identity mapping)
62
+ for (let i = 0; i < channels; i++) {
63
+ header.writeUInt8(i, offset);
64
+ offset += 1;
65
+ }
66
+ }
67
+ return header;
68
+ }
69
+ /**
70
+ * Build FLAC description from extradata
71
+ * Prepends 'fLaC' magic and STREAMINFO block header
72
+ */
73
+ export function buildFlacDescription(extraData) {
74
+ const magic = Buffer.from('fLaC');
75
+ // STREAMINFO block header: type (0x00) | last-block flag (0x80)
76
+ const blockHeader = Buffer.from([0x80, 0x00, 0x00, extraData.length]);
77
+ return Buffer.concat([magic, blockHeader, Buffer.from(extraData)]);
78
+ }
79
+ /**
80
+ * Extract codec description (extradata) from encoder
81
+ *
82
+ * Different codecs have different description formats:
83
+ * - AAC: AudioSpecificConfig
84
+ * - Opus: OpusHead (Identification Header)
85
+ * - FLAC: fLaC magic + STREAMINFO block
86
+ * - Vorbis: identification + comment + setup headers
87
+ */
88
+ export function extractCodecDescription(encoder, context) {
89
+ const codecBase = context.codec.split('.')[0].toLowerCase();
90
+ try {
91
+ const ctx = encoder.getCodecContext();
92
+ if (!ctx)
93
+ return null;
94
+ const extraData = ctx.extraData;
95
+ if (codecBase === 'mp4a' || codecBase === 'aac') {
96
+ if (!extraData || extraData.length === 0)
97
+ return null;
98
+ // AAC: extradata contains AudioSpecificConfig
99
+ const description = Buffer.from(extraData);
100
+ logger.debug(`AAC description from extradata: ${description.length} bytes`);
101
+ return description;
102
+ }
103
+ if (codecBase === 'opus') {
104
+ // Opus: extradata contains OpusHead structure
105
+ if (extraData && extraData.length > 0) {
106
+ const description = Buffer.from(extraData);
107
+ logger.debug(`Opus description from extradata: ${description.length} bytes`);
108
+ return description;
109
+ }
110
+ // Generate OpusHead manually if FFmpeg didn't provide it
111
+ const description = generateOpusHead(context.numberOfChannels, context.inputSampleRate);
112
+ logger.debug(`Opus description generated: ${description.length} bytes`);
113
+ return description;
114
+ }
115
+ if (codecBase === 'flac') {
116
+ if (!extraData || extraData.length === 0)
117
+ return null;
118
+ const description = buildFlacDescription(extraData);
119
+ logger.debug(`FLAC description: ${description.length} bytes`);
120
+ return description;
121
+ }
122
+ if (codecBase === 'vorbis') {
123
+ if (!extraData || extraData.length === 0)
124
+ return null;
125
+ // Vorbis: extradata contains all three headers
126
+ const description = Buffer.from(extraData);
127
+ logger.debug(`Vorbis description: ${description.length} bytes`);
128
+ return description;
129
+ }
130
+ return null;
131
+ }
132
+ catch (err) {
133
+ logger.debug(`Failed to extract codec description: ${err}`);
134
+ return null;
135
+ }
136
+ }
137
+ //# sourceMappingURL=codec-description.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec-description.js","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/encoder/codec-description.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,MAAM,MAAM,GAAG,YAAY,CAAC,yBAAyB,CAAC,CAAC;AAEvD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,eAAuB;IAEvB,MAAM,UAAU,GAAG,eAAe,IAAI,KAAK,CAAC;IAE5C,sBAAsB;IACtB,0CAA0C;IAC1C,wBAAwB;IACxB,2BAA2B;IAC3B,gFAAgF;IAChF,2DAA2D;IAC3D,oCAAoC;IACpC,wDAAwD;IACxD,MAAM,OAAO,GAAG,GAAG,CAAC;IACpB,MAAM,UAAU,GAAG,CAAC,CAAC;IACrB,MAAM,aAAa,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5C,IAAI,UAAU,GAAG,EAAE,CAAC,CAAC,wCAAwC;IAC7D,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACtB,UAAU,IAAI,CAAC,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACxC,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,kBAAkB;IAClB,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,IAAI,CAAC,CAAC;IAEZ,UAAU;IACV,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7B,MAAM,IAAI,CAAC,CAAC;IAEZ,gBAAgB;IAChB,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpC,MAAM,IAAI,CAAC,CAAC;IAEZ,2BAA2B;IAC3B,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACtC,MAAM,IAAI,CAAC,CAAC;IAEZ,oCAAoC;IACpC,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,IAAI,CAAC,CAAC;IAEZ,8BAA8B;IAC9B,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACxC,MAAM,IAAI,CAAC,CAAC;IAEZ,yBAAyB;IACzB,MAAM,CAAC,UAAU,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,IAAI,CAAC,CAAC;IAEZ,8DAA8D;IAC9D,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,WAAW,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,CAAC;QACZ,MAAM,CAAC,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,IAAI,CAAC,CAAC;QACZ,qCAAqC;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC7B,MAAM,IAAI,CAAC,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAqB;IACxD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,gEAAgE;IAChE,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACtE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACrE,CAAC;AAQD;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAgB,EAChB,OAAgC;IAEhC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAE5D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QACtC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAEtB,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;QAEhC,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YAChD,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YACtD,8CAA8C;YAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3C,MAAM,CAAC,KAAK,CAAC,mCAAmC,WAAW,CAAC,MAAM,QAAQ,CAAC,CAAC;YAC5E,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACzB,8CAA8C;YAC9C,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC3C,MAAM,CAAC,KAAK,CAAC,oCAAoC,WAAW,CAAC,MAAM,QAAQ,CAAC,CAAC;gBAC7E,OAAO,WAAW,CAAC;YACrB,CAAC;YACD,yDAAyD;YACzD,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,gBAAgB,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;YACxF,MAAM,CAAC,KAAK,CAAC,+BAA+B,WAAW,CAAC,MAAM,QAAQ,CAAC,CAAC;YACxE,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YACtD,MAAM,WAAW,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;YACpD,MAAM,CAAC,KAAK,CAAC,qBAAqB,WAAW,CAAC,MAAM,QAAQ,CAAC,CAAC;YAC9D,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YACtD,+CAA+C;YAC/C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3C,MAAM,CAAC,KAAK,CAAC,uBAAuB,WAAW,CAAC,MAAM,QAAQ,CAAC,CAAC;YAChE,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,wCAAwC,GAAG,EAAE,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Audio codec name mapping utilities
3
+ */
4
+ /**
5
+ * Get FFmpeg encoder name from WebCodecs codec string
6
+ */
7
+ export declare function getEncoderName(codec: string): string;
8
+ /**
9
+ * Get FFmpeg encoder codec from WebCodecs codec string
10
+ */
11
+ export declare function getEncoderCodec(codec: string): string;
12
+ //# sourceMappingURL=codec-mapping.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec-mapping.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/encoder/codec-mapping.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAcpD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAgCrD"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Audio codec name mapping utilities
3
+ */
4
+ /**
5
+ * Get FFmpeg encoder name from WebCodecs codec string
6
+ */
7
+ export function getEncoderName(codec) {
8
+ const codecLower = codec.toLowerCase();
9
+ if (codecLower.startsWith('mp4a') || codecLower === 'aac') {
10
+ return 'aac';
11
+ }
12
+ else if (codecLower === 'opus') {
13
+ return 'libopus';
14
+ }
15
+ else if (codecLower === 'vorbis') {
16
+ return 'libvorbis';
17
+ }
18
+ else if (codecLower === 'flac') {
19
+ return 'flac';
20
+ }
21
+ else if (codecLower === 'mp3') {
22
+ return 'libmp3lame';
23
+ }
24
+ return 'aac';
25
+ }
26
+ /**
27
+ * Get FFmpeg encoder codec from WebCodecs codec string
28
+ */
29
+ export function getEncoderCodec(codec) {
30
+ const codecBase = codec.split('.')[0].toLowerCase();
31
+ switch (codecBase) {
32
+ case 'opus':
33
+ return 'libopus';
34
+ case 'mp3':
35
+ return 'libmp3lame';
36
+ case 'flac':
37
+ return 'flac';
38
+ case 'mp4a':
39
+ case 'aac':
40
+ return 'aac';
41
+ case 'vorbis':
42
+ return 'libvorbis';
43
+ case 'pcm-s16':
44
+ return 'pcm_s16le';
45
+ case 'pcm-s24':
46
+ return 'pcm_s24le';
47
+ case 'pcm-s32':
48
+ return 'pcm_s32le';
49
+ case 'pcm-u8':
50
+ return 'pcm_u8';
51
+ case 'ulaw':
52
+ return 'pcm_mulaw';
53
+ case 'alaw':
54
+ return 'pcm_alaw';
55
+ case 'pcm-f32':
56
+ return 'pcm_f32le';
57
+ default:
58
+ return 'aac';
59
+ }
60
+ }
61
+ //# sourceMappingURL=codec-mapping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec-mapping.js","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/encoder/codec-mapping.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACvC,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QAC1D,OAAO,KAAK,CAAC;IACf,CAAC;SAAM,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QACjC,OAAO,SAAS,CAAC;IACnB,CAAC;SAAM,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAO,WAAW,CAAC;IACrB,CAAC;SAAM,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC;IAChB,CAAC;SAAM,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QAChC,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAEpD,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,SAAS,CAAC;QACnB,KAAK,KAAK;YACR,OAAO,YAAY,CAAC;QACtB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK;YACR,OAAO,KAAK,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,WAAW,CAAC;QACrB,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC;QACrB,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC;QACrB,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,WAAW,CAAC;QACrB,KAAK,MAAM;YACT,OAAO,UAAU,CAAC;QACpB,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC;QACrB;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Audio encoder constants
3
+ */
4
+ /** Default sample rate for Opus codec */
5
+ export declare const OPUS_SAMPLE_RATE = 48000;
6
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/encoder/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,QAAQ,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Audio encoder constants
3
+ */
4
+ /** Default sample rate for Opus codec */
5
+ export const OPUS_SAMPLE_RATE = 48000;
6
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/encoder/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,yCAAyC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Audio packet drain utilities
3
+ *
4
+ * Handles draining encoded packets from the audio 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 AudioDrainContext {
10
+ /** Codec description (AAC AudioSpecificConfig, OpusHead, etc.) */
11
+ codecDescription: Buffer | null;
12
+ /** Encoder sample rate for duration calculation */
13
+ encoderSampleRate: number;
14
+ /** Fallback frame index for timestamp */
15
+ frameIndex: number;
16
+ /** Whether this is the first frame (for attaching description) */
17
+ firstFrame: boolean;
18
+ }
19
+ export interface AudioDrainResult {
20
+ /** Encoded frames extracted from packets */
21
+ frames: EncodedFrame[];
22
+ /** Whether first frame was emitted */
23
+ firstFrameEmitted: boolean;
24
+ }
25
+ /**
26
+ * Drain all available packets from the audio encoder
27
+ *
28
+ * Converts packets to EncodedFrame format, attaching codec description
29
+ * to the first frame.
30
+ */
31
+ export declare function drainAudioPackets(encoder: Encoder, context: AudioDrainContext): Promise<AudioDrainResult>;
32
+ //# sourceMappingURL=drain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drain.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/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;AAKtD,MAAM,WAAW,iBAAiB;IAChC,kEAAkE;IAClE,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,mDAAmD;IACnD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,4CAA4C;IAC5C,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,sCAAsC;IACtC,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CA0C3B"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Audio packet drain utilities
3
+ *
4
+ * Handles draining encoded packets from the audio 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
+ const logger = createLogger('audio-encoder-drain');
10
+ /**
11
+ * Drain all available packets from the audio encoder
12
+ *
13
+ * Converts packets to EncodedFrame format, attaching codec description
14
+ * to the first frame.
15
+ */
16
+ export async function drainAudioPackets(encoder, context) {
17
+ const frames = [];
18
+ let firstFrameEmitted = !context.firstFrame;
19
+ let packet = await encoder.receive();
20
+ while (packet) {
21
+ if (packet.data) {
22
+ const timestamp = packet.pts !== undefined ? Number(packet.pts) : context.frameIndex;
23
+ const keyFrame = (packet.flags & AV_PKT_FLAG_KEY) === AV_PKT_FLAG_KEY || packet.isKeyframe;
24
+ // Get actual duration from packet (in timebase units), convert to samples
25
+ let durationSamples;
26
+ if (packet.duration !== undefined && packet.duration > 0n) {
27
+ const tb = packet.timeBase;
28
+ if (tb && tb.den > 0) {
29
+ // duration_samples = duration * (tb.num / tb.den) * sampleRate
30
+ durationSamples = Number((packet.duration * BigInt(tb.num) * BigInt(context.encoderSampleRate)) / BigInt(tb.den));
31
+ }
32
+ }
33
+ const frameData = {
34
+ data: Buffer.from(packet.data),
35
+ timestamp,
36
+ keyFrame,
37
+ durationSamples,
38
+ };
39
+ // Include codec description on the first frame
40
+ if (!firstFrameEmitted && context.codecDescription) {
41
+ frameData.description = context.codecDescription;
42
+ firstFrameEmitted = true;
43
+ }
44
+ frames.push(frameData);
45
+ }
46
+ packet.unref();
47
+ packet = await encoder.receive();
48
+ }
49
+ return { frames, firstFrameEmitted };
50
+ }
51
+ //# sourceMappingURL=drain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drain.js","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/encoder/drain.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,MAAM,MAAM,GAAG,YAAY,CAAC,qBAAqB,CAAC,CAAC;AAoBnD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAgB,EAChB,OAA0B;IAE1B,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,IAAI,iBAAiB,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;IAE5C,IAAI,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACrC,OAAO,MAAM,EAAE,CAAC;QACd,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;YACrF,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,eAAe,IAAK,MAAc,CAAC,UAAU,CAAC;YAEpG,0EAA0E;YAC1E,IAAI,eAAmC,CAAC;YACxC,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,GAAG,EAAE,EAAE,CAAC;gBAC1D,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC;gBAC3B,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;oBACrB,+DAA+D;oBAC/D,eAAe,GAAG,MAAM,CACtB,CAAC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CACxF,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,MAAM,SAAS,GAAiB;gBAC9B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBAC9B,SAAS;gBACT,QAAQ;gBACR,eAAe;aAChB,CAAC;YAEF,+CAA+C;YAC/C,IAAI,CAAC,iBAAiB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;gBACnD,SAAS,CAAC,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;gBACjD,iBAAiB,GAAG,IAAI,CAAC;YAC3B,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC;QACD,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;AACvC,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Audio encoder helper utilities
3
+ *
4
+ * Organized into focused modules:
5
+ * - constants: Shared constants (OPUS_SAMPLE_RATE)
6
+ * - codec-mapping: Codec name/codec mapping
7
+ * - channel-layout: Channel layout utilities
8
+ * - sample-format-convert: Sample format conversion utilities
9
+ * - options: Encoder options building
10
+ * - codec-description: Codec description extraction
11
+ * - drain: Packet draining utilities
12
+ */
13
+ export { OPUS_SAMPLE_RATE } from './constants.js';
14
+ export { getEncoderName, getEncoderCodec } from './codec-mapping.js';
15
+ export { getChannelLayout } from './channel-layout.js';
16
+ export { convertToPlanar, convertToS16Interleaved, convertToS32Interleaved, convertToS16Planar, convertToU8Interleaved, convertFromPlanarToInterleaved, convertFromS16ToF32Interleaved, convertFromS16PlanarToF32Interleaved, convertFromS32ToF32Interleaved, } from './sample-format-convert.js';
17
+ export { buildAudioEncoderOptions, getCodecSampleFormat, configureOpusOptions, configureAacOptions, type AudioEncoderOptions, } from './options.js';
18
+ export { extractCodecDescription, generateOpusHead, buildFlacDescription, type CodecDescriptionContext, } from './codec-description.js';
19
+ export { drainAudioPackets, type AudioDrainContext, type AudioDrainResult, } from './drain.js';
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/encoder/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,8BAA8B,EAC9B,8BAA8B,EAC9B,oCAAoC,EACpC,8BAA8B,GAC/B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,KAAK,mBAAmB,GACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,EACpB,KAAK,uBAAuB,GAC7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,iBAAiB,EACjB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Audio encoder helper utilities
3
+ *
4
+ * Organized into focused modules:
5
+ * - constants: Shared constants (OPUS_SAMPLE_RATE)
6
+ * - codec-mapping: Codec name/codec mapping
7
+ * - channel-layout: Channel layout utilities
8
+ * - sample-format-convert: Sample format conversion utilities
9
+ * - options: Encoder options building
10
+ * - codec-description: Codec description extraction
11
+ * - drain: Packet draining utilities
12
+ */
13
+ export { OPUS_SAMPLE_RATE } from './constants.js';
14
+ export { getEncoderName, getEncoderCodec } from './codec-mapping.js';
15
+ export { getChannelLayout } from './channel-layout.js';
16
+ export { convertToPlanar, convertToS16Interleaved, convertToS32Interleaved, convertToS16Planar, convertToU8Interleaved, convertFromPlanarToInterleaved, convertFromS16ToF32Interleaved, convertFromS16PlanarToF32Interleaved, convertFromS32ToF32Interleaved, } from './sample-format-convert.js';
17
+ export { buildAudioEncoderOptions, getCodecSampleFormat, configureOpusOptions, configureAacOptions, } from './options.js';
18
+ export { extractCodecDescription, generateOpusHead, buildFlacDescription, } from './codec-description.js';
19
+ export { drainAudioPackets, } from './drain.js';
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/encoder/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,8BAA8B,EAC9B,8BAA8B,EAC9B,oCAAoC,EACpC,8BAA8B,GAC/B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,GAEpB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,GAErB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,iBAAiB,GAGlB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Audio encoder options building utilities
3
+ *
4
+ * Builds codec-specific encoder options for Opus, AAC, FLAC, Vorbis, and PCM codecs
5
+ */
6
+ import type { Rational } from 'node-av/lib';
7
+ import { type AVSampleFormat } from 'node-av/constants';
8
+ import type { AudioEncoderBackendConfig } from '../../../types.js';
9
+ /** Channel layout object for FFmpeg */
10
+ export interface ChannelLayout {
11
+ nbChannels: number;
12
+ order: number;
13
+ mask: bigint;
14
+ }
15
+ export interface AudioEncoderOptions {
16
+ type: 'audio';
17
+ sampleRate: number;
18
+ channelLayout: ChannelLayout;
19
+ sampleFormat: AVSampleFormat;
20
+ timeBase: Rational;
21
+ bitrate?: number;
22
+ options: Record<string, string | number>;
23
+ }
24
+ /**
25
+ * Get the required sample format for a codec
26
+ */
27
+ export declare function getCodecSampleFormat(codecBase: string): AVSampleFormat;
28
+ /**
29
+ * Configure Opus-specific encoder options
30
+ */
31
+ export declare function configureOpusOptions(options: Record<string, string | number>, config: AudioEncoderBackendConfig): void;
32
+ /**
33
+ * Configure AAC-specific encoder options
34
+ */
35
+ export declare function configureAacOptions(options: Record<string, string | number>, config: AudioEncoderBackendConfig): void;
36
+ /**
37
+ * Build complete encoder options for a given audio codec
38
+ */
39
+ export declare function buildAudioEncoderOptions(config: AudioEncoderBackendConfig, timeBase: Rational): AudioEncoderOptions;
40
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/encoder/options.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAGnE,uCAAuC;AACvC,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,EAAE,cAAc,CAAC;IAC7B,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CAC1C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CAuBtE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EACxC,MAAM,EAAE,yBAAyB,GAChC,IAAI,CAmDN;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EACxC,MAAM,EAAE,yBAAyB,GAChC,IAAI,CAON;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,yBAAyB,EACjC,QAAQ,EAAE,QAAQ,GACjB,mBAAmB,CA6BrB"}