@tscaps/engine 0.1.1 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (321) hide show
  1. package/README.md +2 -4
  2. package/dist/modules/css/CssScoper.d.ts +21 -1
  3. package/dist/modules/css/CssScoper.d.ts.map +1 -1
  4. package/dist/modules/css/CssScoper.js +129 -56
  5. package/dist/modules/css/CssScoper.js.map +1 -1
  6. package/dist/modules/css/CssVarReferenceScanner.d.ts +13 -0
  7. package/dist/modules/css/CssVarReferenceScanner.d.ts.map +1 -0
  8. package/dist/modules/css/CssVarReferenceScanner.js +20 -0
  9. package/dist/modules/css/CssVarReferenceScanner.js.map +1 -0
  10. package/dist/modules/css/index.d.ts +1 -0
  11. package/dist/modules/css/index.d.ts.map +1 -1
  12. package/dist/modules/css/index.js +1 -0
  13. package/dist/modules/css/index.js.map +1 -1
  14. package/dist/modules/document/CssVariable.d.ts +24 -3
  15. package/dist/modules/document/CssVariable.d.ts.map +1 -1
  16. package/dist/modules/document/CssVariable.js +30 -2
  17. package/dist/modules/document/CssVariable.js.map +1 -1
  18. package/dist/modules/document/Decoration.d.ts +42 -0
  19. package/dist/modules/document/Decoration.d.ts.map +1 -0
  20. package/dist/modules/document/Decoration.js +52 -0
  21. package/dist/modules/document/Decoration.js.map +1 -0
  22. package/dist/modules/document/Document.d.ts.map +1 -1
  23. package/dist/modules/document/Document.js +0 -3
  24. package/dist/modules/document/Document.js.map +1 -1
  25. package/dist/modules/document/DocumentEditor.d.ts +11 -0
  26. package/dist/modules/document/DocumentEditor.d.ts.map +1 -1
  27. package/dist/modules/document/DocumentEditor.js +49 -9
  28. package/dist/modules/document/DocumentEditor.js.map +1 -1
  29. package/dist/modules/document/Line.d.ts +9 -6
  30. package/dist/modules/document/Line.d.ts.map +1 -1
  31. package/dist/modules/document/Line.js +11 -24
  32. package/dist/modules/document/Line.js.map +1 -1
  33. package/dist/modules/document/Section.d.ts +0 -4
  34. package/dist/modules/document/Section.d.ts.map +1 -1
  35. package/dist/modules/document/Section.js +2 -18
  36. package/dist/modules/document/Section.js.map +1 -1
  37. package/dist/modules/document/Segment.d.ts +10 -7
  38. package/dist/modules/document/Segment.d.ts.map +1 -1
  39. package/dist/modules/document/Segment.js +15 -22
  40. package/dist/modules/document/Segment.js.map +1 -1
  41. package/dist/modules/document/Tag.d.ts +3 -0
  42. package/dist/modules/document/Tag.d.ts.map +1 -1
  43. package/dist/modules/document/Tag.js +3 -0
  44. package/dist/modules/document/Tag.js.map +1 -1
  45. package/dist/modules/document/Word.d.ts +20 -7
  46. package/dist/modules/document/Word.d.ts.map +1 -1
  47. package/dist/modules/document/Word.js +32 -34
  48. package/dist/modules/document/Word.js.map +1 -1
  49. package/dist/modules/document/index.d.ts +1 -0
  50. package/dist/modules/document/index.d.ts.map +1 -1
  51. package/dist/modules/document/index.js +1 -0
  52. package/dist/modules/document/index.js.map +1 -1
  53. package/dist/modules/effect/CarryQuotesEffect.d.ts +1 -7
  54. package/dist/modules/effect/CarryQuotesEffect.d.ts.map +1 -1
  55. package/dist/modules/effect/CarryQuotesEffect.js +17 -30
  56. package/dist/modules/effect/CarryQuotesEffect.js.map +1 -1
  57. package/dist/modules/effect/RemovePunctuationEffect.d.ts +10 -2
  58. package/dist/modules/effect/RemovePunctuationEffect.d.ts.map +1 -1
  59. package/dist/modules/effect/RemovePunctuationEffect.js +26 -6
  60. package/dist/modules/effect/RemovePunctuationEffect.js.map +1 -1
  61. package/dist/modules/effect/SmartLowercaseEffect.d.ts +7 -6
  62. package/dist/modules/effect/SmartLowercaseEffect.d.ts.map +1 -1
  63. package/dist/modules/effect/SmartLowercaseEffect.js +11 -7
  64. package/dist/modules/effect/SmartLowercaseEffect.js.map +1 -1
  65. package/dist/modules/pipeline/RenderPipelineBuilder.d.ts +3 -3
  66. package/dist/modules/pipeline/RenderPipelineBuilder.d.ts.map +1 -1
  67. package/dist/modules/pipeline/RenderPipelineBuilder.js +11 -6
  68. package/dist/modules/pipeline/RenderPipelineBuilder.js.map +1 -1
  69. package/dist/modules/rendering/BrowserSubtitleFrameRenderer.d.ts +19 -25
  70. package/dist/modules/rendering/BrowserSubtitleFrameRenderer.d.ts.map +1 -1
  71. package/dist/modules/rendering/BrowserSubtitleFrameRenderer.js +40 -717
  72. package/dist/modules/rendering/BrowserSubtitleFrameRenderer.js.map +1 -1
  73. package/dist/modules/rendering/SubtitleFrameRenderer.d.ts +8 -5
  74. package/dist/modules/rendering/SubtitleFrameRenderer.d.ts.map +1 -1
  75. package/dist/modules/rendering/index.d.ts +13 -8
  76. package/dist/modules/rendering/index.d.ts.map +1 -1
  77. package/dist/modules/rendering/index.js +5 -2
  78. package/dist/modules/rendering/index.js.map +1 -1
  79. package/dist/modules/rendering/styles/BaselineCssComposer.d.ts +23 -0
  80. package/dist/modules/rendering/styles/BaselineCssComposer.d.ts.map +1 -0
  81. package/dist/modules/rendering/styles/BaselineCssComposer.js +40 -0
  82. package/dist/modules/rendering/styles/BaselineCssComposer.js.map +1 -0
  83. package/dist/modules/rendering/styles/BehindActorBaselineCss.d.ts +19 -0
  84. package/dist/modules/rendering/styles/BehindActorBaselineCss.d.ts.map +1 -0
  85. package/dist/modules/rendering/styles/BehindActorBaselineCss.js +19 -0
  86. package/dist/modules/rendering/styles/BehindActorBaselineCss.js.map +1 -0
  87. package/dist/modules/rendering/styles/DecorationContainerBaselineCss.d.ts +7 -0
  88. package/dist/modules/rendering/styles/DecorationContainerBaselineCss.d.ts.map +1 -0
  89. package/dist/modules/rendering/styles/DecorationContainerBaselineCss.js +34 -0
  90. package/dist/modules/rendering/styles/DecorationContainerBaselineCss.js.map +1 -0
  91. package/dist/modules/rendering/styles/InlineStyleEmitter.d.ts +27 -0
  92. package/dist/modules/rendering/styles/InlineStyleEmitter.d.ts.map +1 -0
  93. package/dist/modules/rendering/styles/InlineStyleEmitter.js +53 -0
  94. package/dist/modules/rendering/styles/InlineStyleEmitter.js.map +1 -0
  95. package/dist/modules/rendering/styles/SegmentPaddingCssRuleBuilder.d.ts +15 -0
  96. package/dist/modules/rendering/styles/SegmentPaddingCssRuleBuilder.d.ts.map +1 -0
  97. package/dist/modules/rendering/styles/SegmentPaddingCssRuleBuilder.js +33 -0
  98. package/dist/modules/rendering/styles/SegmentPaddingCssRuleBuilder.js.map +1 -0
  99. package/dist/modules/rendering/styles/VideoFrameLayerClass.d.ts.map +1 -0
  100. package/dist/modules/rendering/styles/VideoFrameLayerClass.js.map +1 -0
  101. package/dist/modules/rendering/subtitle/AbstractAnim.d.ts +13 -0
  102. package/dist/modules/rendering/subtitle/AbstractAnim.d.ts.map +1 -0
  103. package/dist/modules/rendering/subtitle/AbstractAnim.js +2 -0
  104. package/dist/modules/rendering/subtitle/AbstractAnim.js.map +1 -0
  105. package/dist/modules/rendering/subtitle/ActiveRenderSession.d.ts +20 -0
  106. package/dist/modules/rendering/subtitle/ActiveRenderSession.d.ts.map +1 -0
  107. package/dist/modules/rendering/subtitle/ActiveRenderSession.js +31 -0
  108. package/dist/modules/rendering/subtitle/ActiveRenderSession.js.map +1 -0
  109. package/dist/modules/rendering/subtitle/ActiveRenderSessionFactory.d.ts +19 -0
  110. package/dist/modules/rendering/subtitle/ActiveRenderSessionFactory.d.ts.map +1 -0
  111. package/dist/modules/rendering/subtitle/ActiveRenderSessionFactory.js +41 -0
  112. package/dist/modules/rendering/subtitle/ActiveRenderSessionFactory.js.map +1 -0
  113. package/dist/modules/rendering/subtitle/AnimationProbe.d.ts +25 -0
  114. package/dist/modules/rendering/subtitle/AnimationProbe.d.ts.map +1 -0
  115. package/dist/modules/rendering/subtitle/AnimationProbe.js +198 -0
  116. package/dist/modules/rendering/subtitle/AnimationProbe.js.map +1 -0
  117. package/dist/modules/rendering/subtitle/AssetGroupBuilder.d.ts +15 -0
  118. package/dist/modules/rendering/subtitle/AssetGroupBuilder.d.ts.map +1 -0
  119. package/dist/modules/rendering/subtitle/AssetGroupBuilder.js +26 -0
  120. package/dist/modules/rendering/subtitle/AssetGroupBuilder.js.map +1 -0
  121. package/dist/modules/rendering/subtitle/BatchPlan.d.ts +32 -0
  122. package/dist/modules/rendering/subtitle/BatchPlan.d.ts.map +1 -0
  123. package/dist/modules/rendering/subtitle/BatchPlan.js +2 -0
  124. package/dist/modules/rendering/subtitle/BatchPlan.js.map +1 -0
  125. package/dist/modules/rendering/subtitle/BatchPlanner.d.ts +31 -0
  126. package/dist/modules/rendering/subtitle/BatchPlanner.d.ts.map +1 -0
  127. package/dist/modules/rendering/subtitle/BatchPlanner.js +91 -0
  128. package/dist/modules/rendering/subtitle/BatchPlanner.js.map +1 -0
  129. package/dist/modules/rendering/subtitle/PreparedStyle.d.ts +35 -0
  130. package/dist/modules/rendering/subtitle/PreparedStyle.d.ts.map +1 -0
  131. package/dist/modules/rendering/subtitle/PreparedStyle.js +2 -0
  132. package/dist/modules/rendering/subtitle/PreparedStyle.js.map +1 -0
  133. package/dist/modules/rendering/subtitle/PreparedStyleFactory.d.ts +31 -0
  134. package/dist/modules/rendering/subtitle/PreparedStyleFactory.d.ts.map +1 -0
  135. package/dist/modules/rendering/subtitle/PreparedStyleFactory.js +91 -0
  136. package/dist/modules/rendering/subtitle/PreparedStyleFactory.js.map +1 -0
  137. package/dist/modules/rendering/subtitle/SegmentPaintRegionCache.d.ts +13 -0
  138. package/dist/modules/rendering/subtitle/SegmentPaintRegionCache.d.ts.map +1 -0
  139. package/dist/modules/rendering/subtitle/SegmentPaintRegionCache.js +24 -0
  140. package/dist/modules/rendering/subtitle/SegmentPaintRegionCache.js.map +1 -0
  141. package/dist/modules/rendering/{SegmentPaintRegionResolver.d.ts → subtitle/SegmentPaintRegionResolver.d.ts} +1 -1
  142. package/dist/modules/rendering/subtitle/SegmentPaintRegionResolver.d.ts.map +1 -0
  143. package/dist/modules/rendering/subtitle/SegmentPaintRegionResolver.js.map +1 -0
  144. package/dist/modules/rendering/subtitle/SegmentSubtreeDecomposer.d.ts +45 -0
  145. package/dist/modules/rendering/subtitle/SegmentSubtreeDecomposer.d.ts.map +1 -0
  146. package/dist/modules/rendering/subtitle/SegmentSubtreeDecomposer.js +50 -0
  147. package/dist/modules/rendering/subtitle/SegmentSubtreeDecomposer.js.map +1 -0
  148. package/dist/modules/rendering/subtitle/SegmentSubtreeHtmlBuilder.d.ts +80 -0
  149. package/dist/modules/rendering/subtitle/SegmentSubtreeHtmlBuilder.d.ts.map +1 -0
  150. package/dist/modules/rendering/subtitle/SegmentSubtreeHtmlBuilder.js +188 -0
  151. package/dist/modules/rendering/subtitle/SegmentSubtreeHtmlBuilder.js.map +1 -0
  152. package/dist/modules/rendering/subtitle/SegmentWrapperRenderer.d.ts +45 -0
  153. package/dist/modules/rendering/subtitle/SegmentWrapperRenderer.d.ts.map +1 -0
  154. package/dist/modules/rendering/subtitle/SegmentWrapperRenderer.js +141 -0
  155. package/dist/modules/rendering/subtitle/SegmentWrapperRenderer.js.map +1 -0
  156. package/dist/modules/rendering/subtitle/SpriteSheetCompositor.d.ts +46 -0
  157. package/dist/modules/rendering/subtitle/SpriteSheetCompositor.d.ts.map +1 -0
  158. package/dist/modules/rendering/subtitle/SpriteSheetCompositor.js +134 -0
  159. package/dist/modules/rendering/subtitle/SpriteSheetCompositor.js.map +1 -0
  160. package/dist/modules/rendering/subtitle/SpriteSheetSizeProber.d.ts +17 -0
  161. package/dist/modules/rendering/subtitle/SpriteSheetSizeProber.d.ts.map +1 -0
  162. package/dist/modules/rendering/subtitle/SpriteSheetSizeProber.js +58 -0
  163. package/dist/modules/rendering/subtitle/SpriteSheetSizeProber.js.map +1 -0
  164. package/dist/modules/rendering/subtitle/SvgFilterMaterializer.d.ts +27 -0
  165. package/dist/modules/rendering/subtitle/SvgFilterMaterializer.d.ts.map +1 -0
  166. package/dist/modules/rendering/subtitle/SvgFilterMaterializer.js +40 -0
  167. package/dist/modules/rendering/subtitle/SvgFilterMaterializer.js.map +1 -0
  168. package/dist/modules/rendering/subtitle/VideoFrameVarsBuilder.d.ts +42 -0
  169. package/dist/modules/rendering/subtitle/VideoFrameVarsBuilder.d.ts.map +1 -0
  170. package/dist/modules/rendering/subtitle/VideoFrameVarsBuilder.js +112 -0
  171. package/dist/modules/rendering/subtitle/VideoFrameVarsBuilder.js.map +1 -0
  172. package/dist/modules/rendering/types/AlignmentConfig.d.ts.map +1 -0
  173. package/dist/modules/rendering/types/AlignmentConfig.js.map +1 -0
  174. package/dist/modules/rendering/types/BehindActorRequirement.d.ts +12 -0
  175. package/dist/modules/rendering/types/BehindActorRequirement.d.ts.map +1 -0
  176. package/dist/modules/rendering/types/BehindActorRequirement.js +2 -0
  177. package/dist/modules/rendering/types/BehindActorRequirement.js.map +1 -0
  178. package/dist/modules/rendering/types/BoxEdges.d.ts.map +1 -0
  179. package/dist/modules/rendering/types/BoxEdges.js.map +1 -0
  180. package/dist/modules/rendering/types/DecorationPlacementSide.d.ts +8 -0
  181. package/dist/modules/rendering/types/DecorationPlacementSide.d.ts.map +1 -0
  182. package/dist/modules/rendering/types/DecorationPlacementSide.js +2 -0
  183. package/dist/modules/rendering/types/DecorationPlacementSide.js.map +1 -0
  184. package/dist/modules/rendering/{ElementRenderOverrides.d.ts → types/ElementRenderOverrides.d.ts} +1 -1
  185. package/dist/modules/rendering/types/ElementRenderOverrides.d.ts.map +1 -0
  186. package/dist/modules/rendering/types/ElementRenderOverrides.js.map +1 -0
  187. package/dist/modules/rendering/types/InlineStyleMap.d.ts.map +1 -0
  188. package/dist/modules/rendering/types/InlineStyleMap.js.map +1 -0
  189. package/dist/modules/rendering/{RenderingConfig.d.ts → types/RenderingConfig.d.ts} +3 -1
  190. package/dist/modules/rendering/types/RenderingConfig.d.ts.map +1 -0
  191. package/dist/modules/rendering/types/RenderingConfig.js.map +1 -0
  192. package/dist/modules/rendering/{ScopedRenderOverride.d.ts → types/ScopedRenderOverride.d.ts} +2 -2
  193. package/dist/modules/rendering/types/ScopedRenderOverride.d.ts.map +1 -0
  194. package/dist/modules/rendering/types/ScopedRenderOverride.js.map +1 -0
  195. package/dist/modules/rendering/types/VideoFrameSource.d.ts.map +1 -0
  196. package/dist/modules/rendering/types/VideoFrameSource.js.map +1 -0
  197. package/dist/modules/splitting/BoundaryScoreLimitByCharsSegmentSplitter.d.ts +33 -0
  198. package/dist/modules/splitting/BoundaryScoreLimitByCharsSegmentSplitter.d.ts.map +1 -0
  199. package/dist/modules/splitting/BoundaryScoreLimitByCharsSegmentSplitter.js +100 -0
  200. package/dist/modules/splitting/BoundaryScoreLimitByCharsSegmentSplitter.js.map +1 -0
  201. package/dist/modules/splitting/FixedTailLineSplitter.d.ts +29 -0
  202. package/dist/modules/splitting/FixedTailLineSplitter.d.ts.map +1 -0
  203. package/dist/modules/splitting/FixedTailLineSplitter.js +43 -0
  204. package/dist/modules/splitting/FixedTailLineSplitter.js.map +1 -0
  205. package/dist/modules/splitting/index.d.ts +4 -0
  206. package/dist/modules/splitting/index.d.ts.map +1 -1
  207. package/dist/modules/splitting/index.js +2 -0
  208. package/dist/modules/splitting/index.js.map +1 -1
  209. package/dist/modules/tagging/PauseTagger.d.ts +24 -0
  210. package/dist/modules/tagging/PauseTagger.d.ts.map +1 -0
  211. package/dist/modules/tagging/PauseTagger.js +41 -0
  212. package/dist/modules/tagging/PauseTagger.js.map +1 -0
  213. package/dist/modules/tagging/StructureTagger.d.ts +1 -1
  214. package/dist/modules/tagging/StructureTagger.d.ts.map +1 -1
  215. package/dist/modules/tagging/StructureTagger.js +11 -5
  216. package/dist/modules/tagging/StructureTagger.js.map +1 -1
  217. package/dist/modules/tagging/index.d.ts +2 -0
  218. package/dist/modules/tagging/index.d.ts.map +1 -1
  219. package/dist/modules/tagging/index.js +1 -0
  220. package/dist/modules/tagging/index.js.map +1 -1
  221. package/dist/modules/transcription/VttTranscriber.d.ts +28 -0
  222. package/dist/modules/transcription/VttTranscriber.d.ts.map +1 -0
  223. package/dist/modules/transcription/VttTranscriber.js +59 -0
  224. package/dist/modules/transcription/VttTranscriber.js.map +1 -0
  225. package/dist/modules/transcription/index.d.ts +1 -0
  226. package/dist/modules/transcription/index.d.ts.map +1 -1
  227. package/dist/modules/transcription/index.js +1 -0
  228. package/dist/modules/transcription/index.js.map +1 -1
  229. package/dist/modules/video/RenderJob.d.ts +17 -0
  230. package/dist/modules/video/RenderJob.d.ts.map +1 -1
  231. package/dist/modules/video/RenderTimeMap.d.ts +50 -0
  232. package/dist/modules/video/RenderTimeMap.d.ts.map +1 -0
  233. package/dist/modules/video/RenderTimeMap.js +90 -0
  234. package/dist/modules/video/RenderTimeMap.js.map +1 -0
  235. package/dist/modules/video/index.d.ts +8 -1
  236. package/dist/modules/video/index.d.ts.map +1 -1
  237. package/dist/modules/video/index.js +4 -0
  238. package/dist/modules/video/index.js.map +1 -1
  239. package/dist/modules/video/mediabunny/MediaBunnyTranscodeCoordinator.d.ts +102 -0
  240. package/dist/modules/video/mediabunny/MediaBunnyTranscodeCoordinator.d.ts.map +1 -0
  241. package/dist/modules/video/mediabunny/MediaBunnyTranscodeCoordinator.js +199 -0
  242. package/dist/modules/video/mediabunny/MediaBunnyTranscodeCoordinator.js.map +1 -0
  243. package/dist/modules/video/mediabunny/MediaBunnyVideoRenderer.d.ts +12 -52
  244. package/dist/modules/video/mediabunny/MediaBunnyVideoRenderer.d.ts.map +1 -1
  245. package/dist/modules/video/mediabunny/MediaBunnyVideoRenderer.js +25 -190
  246. package/dist/modules/video/mediabunny/MediaBunnyVideoRenderer.js.map +1 -1
  247. package/dist/modules/video/mediabunny/audio/AudioTrackBridgeFactory.d.ts +7 -0
  248. package/dist/modules/video/mediabunny/audio/AudioTrackBridgeFactory.d.ts.map +1 -1
  249. package/dist/modules/video/mediabunny/audio/DefaultAudioTrackBridgeFactory.js +2 -2
  250. package/dist/modules/video/mediabunny/audio/DefaultAudioTrackBridgeFactory.js.map +1 -1
  251. package/dist/modules/video/mediabunny/audio/PassthroughAudioTrackBridge.d.ts +2 -0
  252. package/dist/modules/video/mediabunny/audio/PassthroughAudioTrackBridge.d.ts.map +1 -1
  253. package/dist/modules/video/mediabunny/audio/PassthroughAudioTrackBridge.js +8 -2
  254. package/dist/modules/video/mediabunny/audio/PassthroughAudioTrackBridge.js.map +1 -1
  255. package/dist/modules/video/mediabunny/audio/TranscodeAudioTrackBridge.d.ts +3 -0
  256. package/dist/modules/video/mediabunny/audio/TranscodeAudioTrackBridge.d.ts.map +1 -1
  257. package/dist/modules/video/mediabunny/audio/TranscodeAudioTrackBridge.js +9 -2
  258. package/dist/modules/video/mediabunny/audio/TranscodeAudioTrackBridge.js.map +1 -1
  259. package/dist/modules/video/mediabunny/codec/CodecPolicy.d.ts +7 -0
  260. package/dist/modules/video/mediabunny/codec/CodecPolicy.d.ts.map +1 -1
  261. package/dist/modules/video/mediabunny/frame/CurrentFrameVideoSource.d.ts +1 -1
  262. package/dist/modules/video/mediabunny/frame/CurrentFrameVideoSource.d.ts.map +1 -1
  263. package/dist/modules/video/mediabunny/frame/FrameCompositor.d.ts +9 -2
  264. package/dist/modules/video/mediabunny/frame/FrameCompositor.d.ts.map +1 -1
  265. package/dist/modules/video/mediabunny/frame/LayeredFrameCompositor.d.ts +5 -2
  266. package/dist/modules/video/mediabunny/frame/LayeredFrameCompositor.d.ts.map +1 -1
  267. package/dist/modules/video/mediabunny/frame/LayeredFrameCompositor.js +8 -2
  268. package/dist/modules/video/mediabunny/frame/LayeredFrameCompositor.js.map +1 -1
  269. package/dist/modules/video/mediabunny/painter/CaptionsOverlayFramePainter.d.ts +35 -0
  270. package/dist/modules/video/mediabunny/painter/CaptionsOverlayFramePainter.d.ts.map +1 -0
  271. package/dist/modules/video/mediabunny/painter/CaptionsOverlayFramePainter.js +69 -0
  272. package/dist/modules/video/mediabunny/painter/CaptionsOverlayFramePainter.js.map +1 -0
  273. package/dist/modules/video/mediabunny/painter/CaptionsOverlayFramePainterFactory.d.ts +23 -0
  274. package/dist/modules/video/mediabunny/painter/CaptionsOverlayFramePainterFactory.d.ts.map +1 -0
  275. package/dist/modules/video/mediabunny/painter/CaptionsOverlayFramePainterFactory.js +23 -0
  276. package/dist/modules/video/mediabunny/painter/CaptionsOverlayFramePainterFactory.js.map +1 -0
  277. package/dist/modules/video/mediabunny/painter/FramePainter.d.ts +46 -0
  278. package/dist/modules/video/mediabunny/painter/FramePainter.d.ts.map +1 -0
  279. package/dist/modules/video/mediabunny/painter/FramePainter.js +2 -0
  280. package/dist/modules/video/mediabunny/painter/FramePainter.js.map +1 -0
  281. package/dist/modules/video/mediabunny/painter/TopLayerSource.d.ts +25 -0
  282. package/dist/modules/video/mediabunny/painter/TopLayerSource.d.ts.map +1 -0
  283. package/dist/modules/video/mediabunny/painter/TopLayerSource.js +2 -0
  284. package/dist/modules/video/mediabunny/painter/TopLayerSource.js.map +1 -0
  285. package/package.json +1 -1
  286. package/dist/modules/rendering/AlignmentConfig.d.ts.map +0 -1
  287. package/dist/modules/rendering/AlignmentConfig.js.map +0 -1
  288. package/dist/modules/rendering/BoxEdges.d.ts.map +0 -1
  289. package/dist/modules/rendering/BoxEdges.js.map +0 -1
  290. package/dist/modules/rendering/ElementRenderOverrides.d.ts.map +0 -1
  291. package/dist/modules/rendering/ElementRenderOverrides.js.map +0 -1
  292. package/dist/modules/rendering/InlineStyleMap.d.ts.map +0 -1
  293. package/dist/modules/rendering/InlineStyleMap.js.map +0 -1
  294. package/dist/modules/rendering/RenderingConfig.d.ts.map +0 -1
  295. package/dist/modules/rendering/RenderingConfig.js.map +0 -1
  296. package/dist/modules/rendering/ScopedRenderOverride.d.ts.map +0 -1
  297. package/dist/modules/rendering/ScopedRenderOverride.js.map +0 -1
  298. package/dist/modules/rendering/SegmentPaintRegionResolver.d.ts.map +0 -1
  299. package/dist/modules/rendering/SegmentPaintRegionResolver.js.map +0 -1
  300. package/dist/modules/rendering/SegmentSubtreeHtmlBuilder.d.ts +0 -58
  301. package/dist/modules/rendering/SegmentSubtreeHtmlBuilder.d.ts.map +0 -1
  302. package/dist/modules/rendering/SegmentSubtreeHtmlBuilder.js +0 -132
  303. package/dist/modules/rendering/SegmentSubtreeHtmlBuilder.js.map +0 -1
  304. package/dist/modules/rendering/VideoFrameLayerClass.d.ts.map +0 -1
  305. package/dist/modules/rendering/VideoFrameLayerClass.js.map +0 -1
  306. package/dist/modules/rendering/VideoFrameSource.d.ts.map +0 -1
  307. package/dist/modules/rendering/VideoFrameSource.js.map +0 -1
  308. /package/dist/modules/rendering/{VideoFrameLayerClass.d.ts → styles/VideoFrameLayerClass.d.ts} +0 -0
  309. /package/dist/modules/rendering/{VideoFrameLayerClass.js → styles/VideoFrameLayerClass.js} +0 -0
  310. /package/dist/modules/rendering/{SegmentPaintRegionResolver.js → subtitle/SegmentPaintRegionResolver.js} +0 -0
  311. /package/dist/modules/rendering/{AlignmentConfig.d.ts → types/AlignmentConfig.d.ts} +0 -0
  312. /package/dist/modules/rendering/{AlignmentConfig.js → types/AlignmentConfig.js} +0 -0
  313. /package/dist/modules/rendering/{BoxEdges.d.ts → types/BoxEdges.d.ts} +0 -0
  314. /package/dist/modules/rendering/{BoxEdges.js → types/BoxEdges.js} +0 -0
  315. /package/dist/modules/rendering/{ElementRenderOverrides.js → types/ElementRenderOverrides.js} +0 -0
  316. /package/dist/modules/rendering/{InlineStyleMap.d.ts → types/InlineStyleMap.d.ts} +0 -0
  317. /package/dist/modules/rendering/{InlineStyleMap.js → types/InlineStyleMap.js} +0 -0
  318. /package/dist/modules/rendering/{RenderingConfig.js → types/RenderingConfig.js} +0 -0
  319. /package/dist/modules/rendering/{ScopedRenderOverride.js → types/ScopedRenderOverride.js} +0 -0
  320. /package/dist/modules/rendering/{VideoFrameSource.d.ts → types/VideoFrameSource.d.ts} +0 -0
  321. /package/dist/modules/rendering/{VideoFrameSource.js → types/VideoFrameSource.js} +0 -0
@@ -0,0 +1,199 @@
1
+ import { Input, BlobSource, ALL_FORMATS, } from 'mediabunny';
2
+ import { RenderTimeMap } from '../../video/RenderTimeMap';
3
+ /**
4
+ * Runs one mediabunny transcode: opens the source input, resolves the
5
+ * output dimensions / frame rate / duration, wires the encoder and the
6
+ * audio bridge, and drives the decode → paint → encode loop.
7
+ *
8
+ * Consumer-specific per-frame composition (captions, overlay, raw-frame
9
+ * passthrough) lives behind the request's {@link FramePainter}; codec
10
+ * choice, container format, time-range skipping, and audio-loss and
11
+ * fallback-decoder notifications are per-request inputs. The coordinator
12
+ * itself knows nothing about documents, styles, or overlays — those
13
+ * live inside the painter.
14
+ *
15
+ * One run at a time per instance; concurrent {@link execute} calls on
16
+ * the same instance are not supported.
17
+ */
18
+ export class MediaBunnyTranscodeCoordinator {
19
+ videoFrameDecoderFactory;
20
+ videoTrackEncoderFactory;
21
+ audioTrackBridgeFactory;
22
+ outputTargetBuilder;
23
+ constructor(config) {
24
+ this.videoFrameDecoderFactory = config.videoFrameDecoderFactory;
25
+ this.videoTrackEncoderFactory = config.videoTrackEncoderFactory;
26
+ this.audioTrackBridgeFactory = config.audioTrackBridgeFactory;
27
+ this.outputTargetBuilder = config.outputTargetBuilder;
28
+ }
29
+ async execute(request) {
30
+ this.assertWebCodecsAvailable();
31
+ const input = new Input({ formats: ALL_FORMATS, source: new BlobSource(request.source) });
32
+ const videoTrack = await input.getPrimaryVideoTrack();
33
+ if (!videoTrack) {
34
+ throw new Error('No video track found in the input file');
35
+ }
36
+ const { width, height } = this.resolveOutputDimensions(videoTrack.displayWidth, videoTrack.displayHeight, request.outputResolution);
37
+ const fps = await this.readFrameRate(videoTrack);
38
+ const timeMap = request.timeMap ?? new RenderTimeMap([]);
39
+ const { output, target, format } = this.outputTargetBuilder.build({
40
+ format: request.outputFormat,
41
+ stream: request.outputStream,
42
+ });
43
+ const codecResolution = await request.codecPolicy.resolveVideo({
44
+ supportedCodecs: format.getSupportedVideoCodecs(),
45
+ width,
46
+ height,
47
+ fps,
48
+ quality: request.quality,
49
+ });
50
+ const encoder = this.videoTrackEncoderFactory.create({
51
+ width,
52
+ height,
53
+ encoderConfig: this.toEncoderConfig(codecResolution),
54
+ });
55
+ encoder.attachTo(output);
56
+ const audioBridge = await this.audioTrackBridgeFactory.create({
57
+ input,
58
+ format,
59
+ timeMap,
60
+ ...(request.onAudioDiscarded ? { onAudioDiscarded: request.onAudioDiscarded } : {}),
61
+ });
62
+ await audioBridge.attachTo(output);
63
+ const decoder = await this.videoFrameDecoderFactory.create({
64
+ track: videoTrack,
65
+ source: request.source,
66
+ ...(request.confirmFallbackDecoder ? { confirmFallback: request.confirmFallbackDecoder } : {}),
67
+ });
68
+ const sourceDuration = await this.computeDuration(videoTrack);
69
+ const outputDuration = Math.max(0, sourceDuration - timeMap.totalSkipDuration());
70
+ let painterStarted = false;
71
+ try {
72
+ await request.painter.begin(width, height, fps);
73
+ painterStarted = true;
74
+ await output.start();
75
+ await this.runEncodeLoop({
76
+ decoder,
77
+ encoder,
78
+ audioBridge,
79
+ timeMap,
80
+ outputDuration,
81
+ painter: request.painter,
82
+ onProgress: request.onProgress,
83
+ });
84
+ await audioBridge.finish();
85
+ await output.finalize();
86
+ }
87
+ catch (err) {
88
+ await this.safeCancel(output);
89
+ throw err;
90
+ }
91
+ finally {
92
+ decoder.close();
93
+ if (painterStarted)
94
+ request.painter.end();
95
+ }
96
+ return this.buildResult(target, request.outputFormat, width, height);
97
+ }
98
+ // One decoded video frame is alive at any time: holding more would
99
+ // back-pressure the WebCodecs frame pool into a stall.
100
+ async runEncodeLoop(params) {
101
+ let frameCount = 0;
102
+ for await (const frame of params.decoder.samples()) {
103
+ try {
104
+ if (frame.timestamp < 0)
105
+ continue;
106
+ if (params.timeMap.isSkipped(frame.timestamp))
107
+ continue;
108
+ const outputTimestamp = params.timeMap.toOutputTime(frame.timestamp);
109
+ const paintFrame = await params.painter.paint(frame, outputTimestamp);
110
+ await params.encoder.encode(outputTimestamp, frame.duration, paintFrame);
111
+ await params.audioBridge.pumpUntil(frame.timestamp);
112
+ frameCount++;
113
+ if (params.onProgress) {
114
+ params.onProgress(this.toProgress(outputTimestamp, params.outputDuration, frameCount));
115
+ }
116
+ }
117
+ finally {
118
+ frame.close();
119
+ }
120
+ }
121
+ }
122
+ toEncoderConfig(resolution) {
123
+ const config = {
124
+ codec: resolution.codec,
125
+ bitrate: resolution.bitrate,
126
+ bitrateMode: resolution.bitrateMode,
127
+ latencyMode: resolution.latencyMode,
128
+ };
129
+ if (resolution.contentHint !== undefined)
130
+ config.contentHint = resolution.contentHint;
131
+ if (resolution.keyFrameInterval !== undefined)
132
+ config.keyFrameInterval = resolution.keyFrameInterval;
133
+ return config;
134
+ }
135
+ async computeDuration(videoTrack) {
136
+ try {
137
+ return await videoTrack.computeDuration();
138
+ }
139
+ catch {
140
+ return 0;
141
+ }
142
+ }
143
+ resolveOutputDimensions(sourceWidth, sourceHeight, requested) {
144
+ if (!requested)
145
+ return { width: sourceWidth, height: sourceHeight };
146
+ const width = Math.min(requested.width, sourceWidth);
147
+ const height = Math.min(requested.height, sourceHeight);
148
+ return { width: this.toEven(width), height: this.toEven(height) };
149
+ }
150
+ toEven(value) {
151
+ const rounded = Math.round(value);
152
+ return rounded % 2 === 0 ? rounded : rounded - 1;
153
+ }
154
+ async readFrameRate(videoTrack) {
155
+ try {
156
+ const stats = await videoTrack.computePacketStats(120);
157
+ if (Number.isFinite(stats.averagePacketRate) && stats.averagePacketRate > 0) {
158
+ return stats.averagePacketRate;
159
+ }
160
+ }
161
+ catch {
162
+ // Falls through to the default.
163
+ }
164
+ console.warn('Could not determine input frame rate; defaulting to 30 fps');
165
+ return 30;
166
+ }
167
+ toProgress(timestamp, duration, frameCount) {
168
+ const percent = duration > 0 ? Math.min(100, Math.round((timestamp / duration) * 100)) : 0;
169
+ return { percent, currentFrame: frameCount, totalFrames: 0 };
170
+ }
171
+ async safeCancel(output) {
172
+ if (output.state === 'finalized' || output.state === 'canceled')
173
+ return;
174
+ try {
175
+ await output.cancel();
176
+ }
177
+ catch {
178
+ // Cancellation is best-effort; the original error has priority.
179
+ }
180
+ }
181
+ assertWebCodecsAvailable() {
182
+ if (typeof globalThis.VideoEncoder === 'undefined') {
183
+ throw new Error('This browser does not support video encoding (WebCodecs). ' +
184
+ 'Use Chrome, Firefox, or Safari 17.4+ on a recent device.');
185
+ }
186
+ }
187
+ buildResult(target, format, width, height) {
188
+ const mimeType = format === 'webm' ? 'video/webm' : 'video/mp4';
189
+ if (!target)
190
+ return { blob: null, mimeType, width, height };
191
+ return {
192
+ blob: new Blob([target.buffer], { type: mimeType }),
193
+ mimeType,
194
+ width,
195
+ height,
196
+ };
197
+ }
198
+ }
199
+ //# sourceMappingURL=MediaBunnyTranscodeCoordinator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaBunnyTranscodeCoordinator.js","sourceRoot":"","sources":["../../../../src/modules/video/mediabunny/MediaBunnyTranscodeCoordinator.ts"],"names":[],"mappings":"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"}
@@ -1,69 +1,29 @@
1
1
  import type { VideoRenderer } from '../../video/VideoRenderer';
2
2
  import type { RenderJob, RenderResult, RenderProgress } from '../../video/RenderJob';
3
- import type { OverlayFrameRenderer } from '../../rendering/OverlayFrameRenderer';
4
3
  import type { CodecPolicy } from '../../video/mediabunny/codec/CodecPolicy';
5
- import type { VideoFrameDecoderFactory } from '../../video/mediabunny/frame/VideoFrameDecoderFactory';
6
- import type { AudioTrackBridgeFactory } from '../../video/mediabunny/audio/AudioTrackBridgeFactory';
7
- import type { OutputTargetBuilder } from '../../video/mediabunny/output/OutputTargetBuilder';
8
- import type { VideoTrackEncoderFactory } from '../../video/mediabunny/encoder/VideoTrackEncoderFactory';
9
- import type { FrameCompositor } from '../../video/mediabunny/frame/FrameCompositor';
10
- import type { SubtitleLayerSource } from '../../video/mediabunny/caption/SubtitleLayerSource';
4
+ import type { MediaBunnyTranscodeCoordinator } from '../../video/mediabunny/MediaBunnyTranscodeCoordinator';
5
+ import type { CaptionsOverlayFramePainterFactory } from '../../video/mediabunny/painter/CaptionsOverlayFramePainterFactory';
11
6
  export interface MediaBunnyVideoRendererConfig {
12
- /**
13
- * Produces the caption raster painted onto each output frame. The
14
- * coordinator does not split styles, snap times to caption ticks,
15
- * or composite layers — all caption-side strategy lives behind
16
- * this single source.
17
- */
18
- subtitleLayer: SubtitleLayerSource;
19
- overlayRenderer: OverlayFrameRenderer;
7
+ coordinator: MediaBunnyTranscodeCoordinator;
20
8
  codecPolicy: CodecPolicy;
21
- videoFrameDecoderFactory: VideoFrameDecoderFactory;
22
- videoTrackEncoderFactory: VideoTrackEncoderFactory;
23
- audioTrackBridgeFactory: AudioTrackBridgeFactory;
24
- outputTargetBuilder: OutputTargetBuilder;
25
- frameCompositor: FrameCompositor;
9
+ painterFactory: CaptionsOverlayFramePainterFactory;
26
10
  }
27
11
  /**
28
- * Renders a `RenderJob` into a mediabunny {@link Output} container.
29
- *
30
- * Coordinates the decoder, the subtitle layer source, the frame
31
- * compositor, the encoder, and the audio bridge. Caption strategy
32
- * (batching, video-frame sampling, mixed) lives entirely behind the
33
- * configured {@link SubtitleLayerSource}.
12
+ * Renders a {@link RenderJob} through the mediabunny transcode
13
+ * coordinator. Owns the caption/overlay side of the pipeline — the
14
+ * document, style set, overlay HTML, and skip ranges from the job are
15
+ * translated into a painter and a time map that the coordinator drives.
16
+ * Encoding, containerization, and audio handling live in the
17
+ * coordinator.
34
18
  *
35
19
  * One job at a time per instance: concurrent {@link render} calls on
36
20
  * the same instance are not supported.
37
- *
38
- * Caption ticks step at most at {@link CAPTION_FPS_CAP}; inputs
39
- * below that cap step at the input's own framerate.
40
21
  */
41
22
  export declare class MediaBunnyVideoRenderer implements VideoRenderer {
42
- private readonly subtitleLayer;
43
- private readonly overlayRenderer;
23
+ private readonly coordinator;
44
24
  private readonly codecPolicy;
45
- private readonly videoFrameDecoderFactory;
46
- private readonly videoTrackEncoderFactory;
47
- private readonly audioTrackBridgeFactory;
48
- private readonly outputTargetBuilder;
49
- private readonly frameCompositor;
25
+ private readonly painterFactory;
50
26
  constructor(config: MediaBunnyVideoRendererConfig);
51
27
  render(job: RenderJob, onProgress?: (progress: RenderProgress) => void): Promise<RenderResult>;
52
- private runEncodeLoop;
53
- private toEncoderConfig;
54
- private computeDuration;
55
- /**
56
- * Resolves the final pixel dimensions for the output. When the caller
57
- * specifies `outputResolution`, those values win — but the renderer
58
- * never upscales beyond the source and snaps to even numbers, which
59
- * most hardware video encoders require.
60
- */
61
- private resolveOutputDimensions;
62
- private toEven;
63
- private readFrameRate;
64
- private toProgress;
65
- private safeCancel;
66
- private assertWebCodecsAvailable;
67
- private buildResult;
68
28
  }
69
29
  //# sourceMappingURL=MediaBunnyVideoRenderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MediaBunnyVideoRenderer.d.ts","sourceRoot":"","sources":["../../../../src/modules/video/mediabunny/MediaBunnyVideoRenderer.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,cAAc,EAEf,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,oBAAoB,EAAgB,MAAM,yCAAyC,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAwB,MAAM,6CAA6C,CAAC;AACrG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0DAA0D,CAAC;AAEzG,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AAEvG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sDAAsD,CAAC;AAEhG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4DAA4D,CAAC;AAC3G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iDAAiD,CAAC;AACvF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uDAAuD,CAAC;AAQjG,MAAM,WAAW,6BAA6B;IAC5C;;;;;OAKG;IACH,aAAa,EAAE,mBAAmB,CAAC;IACnC,eAAe,EAAE,oBAAoB,CAAC;IACtC,WAAW,EAAE,WAAW,CAAC;IACzB,wBAAwB,EAAE,wBAAwB,CAAC;IACnD,wBAAwB,EAAE,wBAAwB,CAAC;IACnD,uBAAuB,EAAE,uBAAuB,CAAC;IACjD,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,eAAe,EAAE,eAAe,CAAC;CAClC;AAWD;;;;;;;;;;;;;GAaG;AACH,qBAAa,uBAAwB,YAAW,aAAa;IAE3D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAuB;IACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAA2B;IACpE,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAA2B;IACpE,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA0B;IAClE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsB;IAC1D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;gBAEtC,MAAM,EAAE,6BAA6B;IAW3C,MAAM,CACV,GAAG,EAAE,SAAS,EACd,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,GAC9C,OAAO,CAAC,YAAY,CAAC;YAyEV,aAAa;IA6B3B,OAAO,CAAC,eAAe;YAWT,eAAe;IAQ7B;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAW/B,OAAO,CAAC,MAAM;YAKA,aAAa;IAe3B,OAAO,CAAC,UAAU;YAKJ,UAAU;IASxB,OAAO,CAAC,wBAAwB;IAShC,OAAO,CAAC,WAAW;CAQpB"}
1
+ {"version":3,"file":"MediaBunnyVideoRenderer.d.ts","sourceRoot":"","sources":["../../../../src/modules/video/mediabunny/MediaBunnyVideoRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAExF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,0DAA0D,CAAC;AAC/G,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,sEAAsE,CAAC;AAE/H,MAAM,WAAW,6BAA6B;IAC5C,WAAW,EAAE,8BAA8B,CAAC;IAC5C,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,kCAAkC,CAAC;CACpD;AAED;;;;;;;;;;GAUG;AACH,qBAAa,uBAAwB,YAAW,aAAa;IAE3D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiC;IAC7D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqC;gBAExD,MAAM,EAAE,6BAA6B;IAM3C,MAAM,CACV,GAAG,EAAE,SAAS,EACd,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,GAC9C,OAAO,CAAC,YAAY,CAAC;CAkBzB"}
@@ -1,206 +1,41 @@
1
- import { Input, BlobSource, ALL_FORMATS, } from 'mediabunny';
2
- // Captions step at the video's frame rate up to this cap. Past it,
3
- // per-letter or per-word animations gain nothing from extra renders
4
- // (the eye doesn't resolve sub-30fps differences in caption motion)
5
- // and the per-batch subtitle decode dominates the render budget.
6
- const CAPTION_FPS_CAP = 30;
1
+ import { RenderTimeMap } from '../../video/RenderTimeMap';
7
2
  /**
8
- * Renders a `RenderJob` into a mediabunny {@link Output} container.
9
- *
10
- * Coordinates the decoder, the subtitle layer source, the frame
11
- * compositor, the encoder, and the audio bridge. Caption strategy
12
- * (batching, video-frame sampling, mixed) lives entirely behind the
13
- * configured {@link SubtitleLayerSource}.
3
+ * Renders a {@link RenderJob} through the mediabunny transcode
4
+ * coordinator. Owns the caption/overlay side of the pipeline — the
5
+ * document, style set, overlay HTML, and skip ranges from the job are
6
+ * translated into a painter and a time map that the coordinator drives.
7
+ * Encoding, containerization, and audio handling live in the
8
+ * coordinator.
14
9
  *
15
10
  * One job at a time per instance: concurrent {@link render} calls on
16
11
  * the same instance are not supported.
17
- *
18
- * Caption ticks step at most at {@link CAPTION_FPS_CAP}; inputs
19
- * below that cap step at the input's own framerate.
20
12
  */
21
13
  export class MediaBunnyVideoRenderer {
22
- subtitleLayer;
23
- overlayRenderer;
14
+ coordinator;
24
15
  codecPolicy;
25
- videoFrameDecoderFactory;
26
- videoTrackEncoderFactory;
27
- audioTrackBridgeFactory;
28
- outputTargetBuilder;
29
- frameCompositor;
16
+ painterFactory;
30
17
  constructor(config) {
31
- this.subtitleLayer = config.subtitleLayer;
32
- this.overlayRenderer = config.overlayRenderer;
18
+ this.coordinator = config.coordinator;
33
19
  this.codecPolicy = config.codecPolicy;
34
- this.videoFrameDecoderFactory = config.videoFrameDecoderFactory;
35
- this.videoTrackEncoderFactory = config.videoTrackEncoderFactory;
36
- this.audioTrackBridgeFactory = config.audioTrackBridgeFactory;
37
- this.outputTargetBuilder = config.outputTargetBuilder;
38
- this.frameCompositor = config.frameCompositor;
20
+ this.painterFactory = config.painterFactory;
39
21
  }
40
22
  async render(job, onProgress) {
41
- this.assertWebCodecsAvailable();
42
- const input = new Input({ formats: ALL_FORMATS, source: new BlobSource(job.video) });
43
- const videoTrack = await input.getPrimaryVideoTrack();
44
- if (!videoTrack) {
45
- throw new Error('No video track found in the input file');
46
- }
47
- const { width, height } = this.resolveOutputDimensions(videoTrack.displayWidth, videoTrack.displayHeight, job.outputResolution);
48
- const fps = await this.readFrameRate(videoTrack);
49
- const captionInterval = 1 / Math.min(fps, CAPTION_FPS_CAP);
50
- await this.subtitleLayer.open(job.document, job.styles, width, height, captionInterval);
51
- const { output, target, format } = this.outputTargetBuilder.build({
52
- format: job.outputFormat,
53
- stream: job.outputStream,
54
- });
55
- const codecResolution = await this.codecPolicy.resolveVideo({
56
- supportedCodecs: format.getSupportedVideoCodecs(),
57
- width,
58
- height,
59
- fps,
60
- quality: job.quality,
61
- });
62
- const encoder = this.videoTrackEncoderFactory.create({
63
- width,
64
- height,
65
- encoderConfig: this.toEncoderConfig(codecResolution),
66
- });
67
- encoder.attachTo(output);
68
- const audioBridge = await this.audioTrackBridgeFactory.create({
69
- input,
70
- format,
71
- ...(job.onAudioDiscarded ? { onAudioDiscarded: job.onAudioDiscarded } : {}),
72
- });
73
- await audioBridge.attachTo(output);
74
- const decoder = await this.videoFrameDecoderFactory.create({
75
- track: videoTrack,
23
+ const painter = this.painterFactory.create(job.document, job.styles, job.overlayHtml, job.topLayer ?? null);
24
+ const timeMap = new RenderTimeMap(job.skipRanges ?? []);
25
+ const result = await this.coordinator.execute({
76
26
  source: job.video,
77
- ...(job.confirmFallbackDecoder ? { confirmFallback: job.confirmFallbackDecoder } : {}),
27
+ codecPolicy: this.codecPolicy,
28
+ painter,
29
+ timeMap,
30
+ ...(job.outputResolution ? { outputResolution: job.outputResolution } : {}),
31
+ ...(job.outputFormat ? { outputFormat: job.outputFormat } : {}),
32
+ ...(job.quality ? { quality: job.quality } : {}),
33
+ ...(job.outputStream ? { outputStream: job.outputStream } : {}),
34
+ ...(onProgress ? { onProgress } : {}),
35
+ ...(job.onAudioDiscarded ? { onAudioDiscarded: job.onAudioDiscarded } : {}),
36
+ ...(job.confirmFallbackDecoder ? { confirmFallbackDecoder: job.confirmFallbackDecoder } : {}),
78
37
  });
79
- const duration = await this.computeDuration(videoTrack);
80
- const overlay = job.overlayHtml ? await this.overlayRenderer.render(job.overlayHtml, width, height) : null;
81
- await output.start();
82
- try {
83
- await this.runEncodeLoop({ decoder, encoder, audioBridge, duration, overlay, onProgress });
84
- await audioBridge.finish();
85
- await output.finalize();
86
- }
87
- catch (err) {
88
- await this.safeCancel(output);
89
- throw err;
90
- }
91
- finally {
92
- decoder.close();
93
- this.subtitleLayer.close();
94
- }
95
- return this.buildResult(target, job.outputFormat);
96
- }
97
- // One decoded video frame is alive at any time: holding more would
98
- // back-pressure the WebCodecs frame pool into a stall.
99
- async runEncodeLoop(params) {
100
- const width = params.encoder.width;
101
- const height = params.encoder.height;
102
- let frameCount = 0;
103
- for await (const frame of params.decoder.samples()) {
104
- try {
105
- if (frame.timestamp < 0)
106
- continue;
107
- const captionLayer = await this.subtitleLayer.frameAt(frame.timestamp, frame);
108
- await params.encoder.encode(frame.timestamp, frame.duration, (ctx) => {
109
- this.frameCompositor.compose(ctx, {
110
- frame,
111
- captions: captionLayer,
112
- overlay: params.overlay,
113
- width,
114
- height,
115
- });
116
- });
117
- await params.audioBridge.pumpUntil(frame.timestamp);
118
- frameCount++;
119
- if (params.onProgress)
120
- params.onProgress(this.toProgress(frame.timestamp, params.duration, frameCount));
121
- }
122
- finally {
123
- frame.close();
124
- }
125
- }
126
- }
127
- toEncoderConfig(resolution) {
128
- const config = {
129
- codec: resolution.codec,
130
- bitrate: resolution.bitrate,
131
- bitrateMode: resolution.bitrateMode,
132
- latencyMode: resolution.latencyMode,
133
- };
134
- if (resolution.contentHint !== undefined)
135
- config.contentHint = resolution.contentHint;
136
- return config;
137
- }
138
- async computeDuration(videoTrack) {
139
- try {
140
- return await videoTrack.computeDuration();
141
- }
142
- catch {
143
- return 0;
144
- }
145
- }
146
- /**
147
- * Resolves the final pixel dimensions for the output. When the caller
148
- * specifies `outputResolution`, those values win — but the renderer
149
- * never upscales beyond the source and snaps to even numbers, which
150
- * most hardware video encoders require.
151
- */
152
- resolveOutputDimensions(sourceWidth, sourceHeight, requested) {
153
- if (!requested)
154
- return { width: sourceWidth, height: sourceHeight };
155
- const width = Math.min(requested.width, sourceWidth);
156
- const height = Math.min(requested.height, sourceHeight);
157
- return { width: this.toEven(width), height: this.toEven(height) };
158
- }
159
- toEven(value) {
160
- const rounded = Math.round(value);
161
- return rounded % 2 === 0 ? rounded : rounded - 1;
162
- }
163
- async readFrameRate(videoTrack) {
164
- try {
165
- const stats = await videoTrack.computePacketStats(120);
166
- if (Number.isFinite(stats.averagePacketRate) && stats.averagePacketRate > 0) {
167
- return stats.averagePacketRate;
168
- }
169
- }
170
- catch {
171
- // Falls through to the default.
172
- }
173
- console.warn('Could not determine input frame rate; defaulting to 30 fps');
174
- return 30;
175
- }
176
- toProgress(timestamp, duration, frameCount) {
177
- const percent = duration > 0 ? Math.min(100, Math.round((timestamp / duration) * 100)) : 0;
178
- return { percent, currentFrame: frameCount, totalFrames: 0 };
179
- }
180
- async safeCancel(output) {
181
- if (output.state === 'finalized' || output.state === 'canceled')
182
- return;
183
- try {
184
- await output.cancel();
185
- }
186
- catch {
187
- // Cancellation is best-effort; the original error has priority.
188
- }
189
- }
190
- assertWebCodecsAvailable() {
191
- if (typeof globalThis.VideoEncoder === 'undefined') {
192
- throw new Error('This browser does not support video encoding (WebCodecs). ' +
193
- 'Use Chrome, Firefox, or Safari 17.4+ on a recent device.');
194
- }
195
- }
196
- buildResult(target, format) {
197
- const mimeType = format === 'webm' ? 'video/webm' : 'video/mp4';
198
- if (!target)
199
- return { blob: null, mimeType };
200
- return {
201
- blob: new Blob([target.buffer], { type: mimeType }),
202
- mimeType,
203
- };
38
+ return { blob: result.blob, mimeType: result.mimeType };
204
39
  }
205
40
  }
206
41
  //# sourceMappingURL=MediaBunnyVideoRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MediaBunnyVideoRenderer.js","sourceRoot":"","sources":["../../../../src/modules/video/mediabunny/MediaBunnyVideoRenderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MediaBunnyVideoRenderer.js","sourceRoot":"","sources":["../../../../src/modules/video/mediabunny/MediaBunnyVideoRenderer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAW7D;;;;;;;;;;GAUG;AACH,MAAM,OAAO,uBAAuB;IAEjB,WAAW,CAAiC;IAC5C,WAAW,CAAc;IACzB,cAAc,CAAqC;IAEpE,YAAY,MAAqC;QAC/C,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,MAAM,CACV,GAAc,EACd,UAA+C;QAE/C,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC;QAC5G,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;YAC5C,MAAM,EAAE,GAAG,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO;YACP,OAAO;YACP,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrC,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,GAAG,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,GAAG,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9F,CAAC,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC1D,CAAC;CACF"}
@@ -1,9 +1,16 @@
1
1
  import type { Input, OutputFormat as MediaBunnyOutputFormat } from 'mediabunny';
2
2
  import type { AudioTrackBridge } from '../../../video/mediabunny/audio/AudioTrackBridge';
3
3
  import type { AudioDiscardReason } from '../../../video/RenderJob';
4
+ import type { RenderTimeMap } from '../../../video/RenderTimeMap';
4
5
  export interface AudioTrackBridgeRequest {
5
6
  input: Input;
6
7
  format: MediaBunnyOutputFormat;
8
+ /**
9
+ * Maps source-time audio positions to output-time positions when
10
+ * the render excludes one or more time windows. An empty mapper
11
+ * passes audio through unchanged.
12
+ */
13
+ timeMap: RenderTimeMap;
7
14
  /**
8
15
  * Called when the input had an audio track but the bridge has to drop
9
16
  * it. Not invoked when the input has no audio at all.
@@ -1 +1 @@
1
- {"version":3,"file":"AudioTrackBridgeFactory.d.ts","sourceRoot":"","sources":["../../../../../src/modules/video/mediabunny/audio/AudioTrackBridgeFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,IAAI,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAC;AACzF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,sBAAsB,CAAC;IAC/B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACzD;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACrE"}
1
+ {"version":3,"file":"AudioTrackBridgeFactory.d.ts","sourceRoot":"","sources":["../../../../../src/modules/video/mediabunny/audio/AudioTrackBridgeFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,IAAI,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAC;AACzF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,sBAAsB,CAAC;IAC/B;;;;OAIG;IACH,OAAO,EAAE,aAAa,CAAC;IACvB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACzD;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACrE"}
@@ -19,11 +19,11 @@ export class DefaultAudioTrackBridgeFactory {
19
19
  }
20
20
  const supportedCodecs = request.format.getSupportedAudioCodecs();
21
21
  if (supportedCodecs.includes(codec)) {
22
- return new PassthroughAudioTrackBridge({ inputTrack: track, codec });
22
+ return new PassthroughAudioTrackBridge({ inputTrack: track, codec, timeMap: request.timeMap });
23
23
  }
24
24
  const transcodeTarget = await getFirstEncodableAudioCodec(supportedCodecs);
25
25
  if (transcodeTarget) {
26
- return new TranscodeAudioTrackBridge({ inputTrack: track, codec: transcodeTarget });
26
+ return new TranscodeAudioTrackBridge({ inputTrack: track, codec: transcodeTarget, timeMap: request.timeMap });
27
27
  }
28
28
  request.onAudioDiscarded?.('no-encodable-target-codec');
29
29
  return new DiscardAudioTrackBridge();
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultAudioTrackBridgeFactory.js","sourceRoot":"","sources":["../../../../../src/modules/video/mediabunny/audio/DefaultAudioTrackBridgeFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAQzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,6DAA6D,CAAC;AAC1G,OAAO,EAAE,yBAAyB,EAAE,MAAM,2DAA2D,CAAC;AACtG,OAAO,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AAElG;;;;GAIG;AACH,MAAM,OAAO,8BAA8B;IAEzC,KAAK,CAAC,MAAM,CAAC,OAAgC;QAC3C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC;QACzD,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,uBAAuB,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,gBAAgB,EAAE,CAAC,sBAAsB,CAAC,CAAC;YACnD,OAAO,IAAI,uBAAuB,EAAE,CAAC;QACvC,CAAC;QACD,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,uBAAuB,EAAE,CAAC;QACjE,IAAI,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,2BAA2B,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,eAAe,GAAG,MAAM,2BAA2B,CAAC,eAAe,CAAC,CAAC;QAC3E,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,IAAI,yBAAyB,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;QACtF,CAAC;QACD,OAAO,CAAC,gBAAgB,EAAE,CAAC,2BAA2B,CAAC,CAAC;QACxD,OAAO,IAAI,uBAAuB,EAAE,CAAC;IACvC,CAAC;CACF"}
1
+ {"version":3,"file":"DefaultAudioTrackBridgeFactory.js","sourceRoot":"","sources":["../../../../../src/modules/video/mediabunny/audio/DefaultAudioTrackBridgeFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAQzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,6DAA6D,CAAC;AAC1G,OAAO,EAAE,yBAAyB,EAAE,MAAM,2DAA2D,CAAC;AACtG,OAAO,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AAElG;;;;GAIG;AACH,MAAM,OAAO,8BAA8B;IAEzC,KAAK,CAAC,MAAM,CAAC,OAAgC;QAC3C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC;QACzD,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,uBAAuB,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,gBAAgB,EAAE,CAAC,sBAAsB,CAAC,CAAC;YACnD,OAAO,IAAI,uBAAuB,EAAE,CAAC;QACvC,CAAC;QACD,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,uBAAuB,EAAE,CAAC;QACjE,IAAI,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,2BAA2B,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACjG,CAAC;QACD,MAAM,eAAe,GAAG,MAAM,2BAA2B,CAAC,eAAe,CAAC,CAAC;QAC3E,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,IAAI,yBAAyB,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAChH,CAAC;QACD,OAAO,CAAC,gBAAgB,EAAE,CAAC,2BAA2B,CAAC,CAAC;QACxD,OAAO,IAAI,uBAAuB,EAAE,CAAC;IACvC,CAAC;CACF"}
@@ -1,8 +1,10 @@
1
1
  import { type AudioCodec, type InputAudioTrack, type Output } from 'mediabunny';
2
2
  import type { AudioTrackBridge } from '../../../video/mediabunny/audio/AudioTrackBridge';
3
+ import type { RenderTimeMap } from '../../../video/RenderTimeMap';
3
4
  export interface PassthroughAudioTrackBridgeConfig {
4
5
  inputTrack: InputAudioTrack;
5
6
  codec: AudioCodec;
7
+ timeMap: RenderTimeMap;
6
8
  }
7
9
  /**
8
10
  * Copies the input's encoded audio packets straight into the output
@@ -1 +1 @@
1
- {"version":3,"file":"PassthroughAudioTrackBridge.d.ts","sourceRoot":"","sources":["../../../../../src/modules/video/mediabunny/audio/PassthroughAudioTrackBridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,UAAU,EAEf,KAAK,eAAe,EACpB,KAAK,MAAM,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAC;AAEzF,MAAM,WAAW,iCAAiC;IAChD,UAAU,EAAE,eAAe,CAAC;IAC5B,KAAK,EAAE,UAAU,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,qBAAa,2BAA4B,YAAW,gBAAgB;IAQtD,OAAO,CAAC,QAAQ,CAAC,MAAM;IANnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAClD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoB;IACzC,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,kBAAkB,CAAQ;gBAEL,MAAM,EAAE,iCAAiC;IAKhE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvC,SAAS,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOhD,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;YAOf,IAAI;CAWnB"}
1
+ {"version":3,"file":"PassthroughAudioTrackBridge.d.ts","sourceRoot":"","sources":["../../../../../src/modules/video/mediabunny/audio/PassthroughAudioTrackBridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,UAAU,EAEf,KAAK,eAAe,EACpB,KAAK,MAAM,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAC;AACzF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,MAAM,WAAW,iCAAiC;IAChD,UAAU,EAAE,eAAe,CAAC;IAC5B,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,aAAa,CAAC;CACxB;AAED;;;;;;;GAOG;AACH,qBAAa,2BAA4B,YAAW,gBAAgB;IAQtD,OAAO,CAAC,QAAQ,CAAC,MAAM;IANnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAClD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoB;IACzC,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,kBAAkB,CAAQ;gBAEL,MAAM,EAAE,iCAAiC;IAKhE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvC,SAAS,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOhD,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;YAOf,IAAI;CAgBnB"}