@tscaps/engine 0.3.1 → 0.4.0

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 (251) hide show
  1. package/README.md +35 -8
  2. package/dist/modules/document/CssVariable.d.ts +6 -0
  3. package/dist/modules/document/CssVariable.d.ts.map +1 -1
  4. package/dist/modules/document/CssVariable.js +6 -0
  5. package/dist/modules/document/CssVariable.js.map +1 -1
  6. package/dist/modules/document/Document.d.ts +3 -0
  7. package/dist/modules/document/Document.d.ts.map +1 -1
  8. package/dist/modules/document/Document.js +12 -1
  9. package/dist/modules/document/Document.js.map +1 -1
  10. package/dist/modules/document/DocumentEditor.d.ts +16 -4
  11. package/dist/modules/document/DocumentEditor.d.ts.map +1 -1
  12. package/dist/modules/document/DocumentEditor.js +14 -10
  13. package/dist/modules/document/DocumentEditor.js.map +1 -1
  14. package/dist/modules/document/Line.d.ts +6 -0
  15. package/dist/modules/document/Line.d.ts.map +1 -1
  16. package/dist/modules/document/Line.js +10 -0
  17. package/dist/modules/document/Line.js.map +1 -1
  18. package/dist/modules/document/Word.d.ts +8 -0
  19. package/dist/modules/document/Word.d.ts.map +1 -1
  20. package/dist/modules/document/Word.js +11 -1
  21. package/dist/modules/document/Word.js.map +1 -1
  22. package/dist/modules/pipeline/RenderPipelineBuilder.d.ts +1 -1
  23. package/dist/modules/pipeline/RenderPipelineBuilder.d.ts.map +1 -1
  24. package/dist/modules/pipeline/RenderPipelineBuilder.js +15 -5
  25. package/dist/modules/pipeline/RenderPipelineBuilder.js.map +1 -1
  26. package/dist/modules/rendering/BrowserSubtitleFrameRenderer.d.ts +18 -8
  27. package/dist/modules/rendering/BrowserSubtitleFrameRenderer.d.ts.map +1 -1
  28. package/dist/modules/rendering/BrowserSubtitleFrameRenderer.js +27 -21
  29. package/dist/modules/rendering/BrowserSubtitleFrameRenderer.js.map +1 -1
  30. package/dist/modules/rendering/SubtitleFrameRenderer.d.ts +41 -33
  31. package/dist/modules/rendering/SubtitleFrameRenderer.d.ts.map +1 -1
  32. package/dist/modules/rendering/index.d.ts +4 -0
  33. package/dist/modules/rendering/index.d.ts.map +1 -1
  34. package/dist/modules/rendering/index.js +2 -0
  35. package/dist/modules/rendering/index.js.map +1 -1
  36. package/dist/modules/rendering/subtitle/ActiveRenderSession.d.ts +13 -6
  37. package/dist/modules/rendering/subtitle/ActiveRenderSession.d.ts.map +1 -1
  38. package/dist/modules/rendering/subtitle/ActiveRenderSession.js +16 -9
  39. package/dist/modules/rendering/subtitle/ActiveRenderSession.js.map +1 -1
  40. package/dist/modules/rendering/subtitle/ActiveRenderSessionFactory.d.ts +5 -2
  41. package/dist/modules/rendering/subtitle/ActiveRenderSessionFactory.d.ts.map +1 -1
  42. package/dist/modules/rendering/subtitle/ActiveRenderSessionFactory.js +26 -8
  43. package/dist/modules/rendering/subtitle/ActiveRenderSessionFactory.js.map +1 -1
  44. package/dist/modules/rendering/subtitle/AnimationStateFingerprint.d.ts +20 -0
  45. package/dist/modules/rendering/subtitle/AnimationStateFingerprint.d.ts.map +1 -0
  46. package/dist/modules/rendering/subtitle/AnimationStateFingerprint.js +2 -0
  47. package/dist/modules/rendering/subtitle/AnimationStateFingerprint.js.map +1 -0
  48. package/dist/modules/rendering/subtitle/AssetGroupBuilder.d.ts +4 -0
  49. package/dist/modules/rendering/subtitle/AssetGroupBuilder.d.ts.map +1 -1
  50. package/dist/modules/rendering/subtitle/AssetGroupBuilder.js +8 -0
  51. package/dist/modules/rendering/subtitle/AssetGroupBuilder.js.map +1 -1
  52. package/dist/modules/rendering/subtitle/BatchPlanner.d.ts +50 -5
  53. package/dist/modules/rendering/subtitle/BatchPlanner.d.ts.map +1 -1
  54. package/dist/modules/rendering/subtitle/BatchPlanner.js +97 -15
  55. package/dist/modules/rendering/subtitle/BatchPlanner.js.map +1 -1
  56. package/dist/modules/rendering/subtitle/ElementWidthMeasurer.d.ts +56 -0
  57. package/dist/modules/rendering/subtitle/ElementWidthMeasurer.d.ts.map +1 -0
  58. package/dist/modules/rendering/subtitle/ElementWidthMeasurer.js +119 -0
  59. package/dist/modules/rendering/subtitle/ElementWidthMeasurer.js.map +1 -0
  60. package/dist/modules/rendering/subtitle/ElementWidths.d.ts +23 -0
  61. package/dist/modules/rendering/subtitle/ElementWidths.d.ts.map +1 -0
  62. package/dist/modules/rendering/subtitle/ElementWidths.js +29 -0
  63. package/dist/modules/rendering/subtitle/ElementWidths.js.map +1 -0
  64. package/dist/modules/rendering/subtitle/ImageDecodeSpriteSheetRasterProbe.d.ts +18 -0
  65. package/dist/modules/rendering/subtitle/ImageDecodeSpriteSheetRasterProbe.d.ts.map +1 -0
  66. package/dist/modules/rendering/subtitle/ImageDecodeSpriteSheetRasterProbe.js +42 -0
  67. package/dist/modules/rendering/subtitle/ImageDecodeSpriteSheetRasterProbe.js.map +1 -0
  68. package/dist/modules/rendering/subtitle/KeyframeScanAnimationStateFingerprint.d.ts +35 -0
  69. package/dist/modules/rendering/subtitle/KeyframeScanAnimationStateFingerprint.d.ts.map +1 -0
  70. package/dist/modules/rendering/subtitle/KeyframeScanAnimationStateFingerprint.js +64 -0
  71. package/dist/modules/rendering/subtitle/KeyframeScanAnimationStateFingerprint.js.map +1 -0
  72. package/dist/modules/rendering/subtitle/PreparedStyle.d.ts +2 -0
  73. package/dist/modules/rendering/subtitle/PreparedStyle.d.ts.map +1 -1
  74. package/dist/modules/rendering/subtitle/PreparedStyleFactory.d.ts.map +1 -1
  75. package/dist/modules/rendering/subtitle/PreparedStyleFactory.js +12 -1
  76. package/dist/modules/rendering/subtitle/PreparedStyleFactory.js.map +1 -1
  77. package/dist/modules/rendering/subtitle/SegmentAnchorVarsBuilder.d.ts +28 -0
  78. package/dist/modules/rendering/subtitle/SegmentAnchorVarsBuilder.d.ts.map +1 -0
  79. package/dist/modules/rendering/subtitle/SegmentAnchorVarsBuilder.js +23 -0
  80. package/dist/modules/rendering/subtitle/SegmentAnchorVarsBuilder.js.map +1 -0
  81. package/dist/modules/rendering/subtitle/SegmentSubtreeHtmlBuilder.d.ts +3 -0
  82. package/dist/modules/rendering/subtitle/SegmentSubtreeHtmlBuilder.d.ts.map +1 -1
  83. package/dist/modules/rendering/subtitle/SegmentSubtreeHtmlBuilder.js +12 -3
  84. package/dist/modules/rendering/subtitle/SegmentSubtreeHtmlBuilder.js.map +1 -1
  85. package/dist/modules/rendering/subtitle/SegmentWrapperRenderer.d.ts +7 -1
  86. package/dist/modules/rendering/subtitle/SegmentWrapperRenderer.d.ts.map +1 -1
  87. package/dist/modules/rendering/subtitle/SegmentWrapperRenderer.js +23 -5
  88. package/dist/modules/rendering/subtitle/SegmentWrapperRenderer.js.map +1 -1
  89. package/dist/modules/rendering/subtitle/SpriteSheetProbeObserver.d.ts +29 -0
  90. package/dist/modules/rendering/subtitle/SpriteSheetProbeObserver.d.ts.map +1 -0
  91. package/dist/modules/rendering/subtitle/SpriteSheetProbeObserver.js +2 -0
  92. package/dist/modules/rendering/subtitle/SpriteSheetProbeObserver.js.map +1 -0
  93. package/dist/modules/rendering/subtitle/SpriteSheetRasterProbe.d.ts +19 -0
  94. package/dist/modules/rendering/subtitle/SpriteSheetRasterProbe.d.ts.map +1 -0
  95. package/dist/modules/rendering/subtitle/SpriteSheetRasterProbe.js +2 -0
  96. package/dist/modules/rendering/subtitle/SpriteSheetRasterProbe.js.map +1 -0
  97. package/dist/modules/rendering/subtitle/SpriteSheetSizeProbe.d.ts +31 -0
  98. package/dist/modules/rendering/subtitle/SpriteSheetSizeProbe.d.ts.map +1 -0
  99. package/dist/modules/rendering/subtitle/SpriteSheetSizeProbe.js +89 -0
  100. package/dist/modules/rendering/subtitle/SpriteSheetSizeProbe.js.map +1 -0
  101. package/dist/modules/rendering/subtitle/SubtreeAnimationReading.d.ts +49 -0
  102. package/dist/modules/rendering/subtitle/SubtreeAnimationReading.d.ts.map +1 -0
  103. package/dist/modules/rendering/subtitle/SubtreeAnimationReading.js +87 -0
  104. package/dist/modules/rendering/subtitle/SubtreeAnimationReading.js.map +1 -0
  105. package/dist/modules/rendering/subtitle/SubtreeAnimationSupport.d.ts +17 -0
  106. package/dist/modules/rendering/subtitle/SubtreeAnimationSupport.d.ts.map +1 -0
  107. package/dist/modules/rendering/subtitle/SubtreeAnimationSupport.js +53 -0
  108. package/dist/modules/rendering/subtitle/SubtreeAnimationSupport.js.map +1 -0
  109. package/dist/modules/rendering/subtitle/SubtreeMountAnimationStateFingerprint.d.ts +62 -0
  110. package/dist/modules/rendering/subtitle/SubtreeMountAnimationStateFingerprint.d.ts.map +1 -0
  111. package/dist/modules/rendering/subtitle/SubtreeMountAnimationStateFingerprint.js +153 -0
  112. package/dist/modules/rendering/subtitle/SubtreeMountAnimationStateFingerprint.js.map +1 -0
  113. package/dist/modules/rendering/subtitle/SvgFilterStateFingerprint.d.ts +47 -0
  114. package/dist/modules/rendering/subtitle/SvgFilterStateFingerprint.d.ts.map +1 -0
  115. package/dist/modules/rendering/subtitle/SvgFilterStateFingerprint.js +69 -0
  116. package/dist/modules/rendering/subtitle/SvgFilterStateFingerprint.js.map +1 -0
  117. package/dist/modules/rendering/subtitle/UnknownAnimationStateFingerprint.d.ts +9 -0
  118. package/dist/modules/rendering/subtitle/UnknownAnimationStateFingerprint.d.ts.map +1 -0
  119. package/dist/modules/rendering/subtitle/UnknownAnimationStateFingerprint.js +10 -0
  120. package/dist/modules/rendering/subtitle/UnknownAnimationStateFingerprint.js.map +1 -0
  121. package/dist/modules/rendering/subtitle/VideoFrameVarsBuilder.d.ts.map +1 -1
  122. package/dist/modules/rendering/subtitle/VideoFrameVarsBuilder.js +2 -0
  123. package/dist/modules/rendering/subtitle/VideoFrameVarsBuilder.js.map +1 -1
  124. package/dist/modules/rendering/types/ElementRenderOverrides.d.ts +2 -0
  125. package/dist/modules/rendering/types/ElementRenderOverrides.d.ts.map +1 -1
  126. package/dist/modules/rendering/types/ElementRenderOverrides.js +4 -0
  127. package/dist/modules/rendering/types/ElementRenderOverrides.js.map +1 -1
  128. package/dist/modules/splitting/BalancedLineSplitter.d.ts +9 -0
  129. package/dist/modules/splitting/BalancedLineSplitter.d.ts.map +1 -1
  130. package/dist/modules/splitting/BalancedLineSplitter.js +15 -3
  131. package/dist/modules/splitting/BalancedLineSplitter.js.map +1 -1
  132. package/dist/modules/splitting/BalancedPixelWidthLineSplitter.d.ts +1 -4
  133. package/dist/modules/splitting/BalancedPixelWidthLineSplitter.d.ts.map +1 -1
  134. package/dist/modules/splitting/BalancedPixelWidthLineSplitter.js +5 -7
  135. package/dist/modules/splitting/BalancedPixelWidthLineSplitter.js.map +1 -1
  136. package/dist/modules/splitting/DomProbeCanvasTextMeasurer.d.ts +16 -7
  137. package/dist/modules/splitting/DomProbeCanvasTextMeasurer.d.ts.map +1 -1
  138. package/dist/modules/splitting/DomProbeCanvasTextMeasurer.js +44 -33
  139. package/dist/modules/splitting/DomProbeCanvasTextMeasurer.js.map +1 -1
  140. package/dist/modules/splitting/TextMeasurer.d.ts +9 -4
  141. package/dist/modules/splitting/TextMeasurer.d.ts.map +1 -1
  142. package/dist/modules/svg-filter/SvgFilter.d.ts +9 -0
  143. package/dist/modules/svg-filter/SvgFilter.d.ts.map +1 -1
  144. package/dist/modules/svg-filter/SvgFilter.js +17 -0
  145. package/dist/modules/svg-filter/SvgFilter.js.map +1 -1
  146. package/dist/modules/svg-filter/SvgFilterDefinitions.d.ts +7 -0
  147. package/dist/modules/svg-filter/SvgFilterDefinitions.d.ts.map +1 -1
  148. package/dist/modules/svg-filter/SvgFilterDefinitions.js +17 -0
  149. package/dist/modules/svg-filter/SvgFilterDefinitions.js.map +1 -1
  150. package/dist/modules/tagging/RegexTagger.js +1 -2
  151. package/dist/modules/tagging/RegexTagger.js.map +1 -1
  152. package/dist/modules/tagging/SpanTagger.js +1 -2
  153. package/dist/modules/tagging/SpanTagger.js.map +1 -1
  154. package/dist/modules/tagging/StructureTagger.js +1 -2
  155. package/dist/modules/tagging/StructureTagger.js.map +1 -1
  156. package/dist/modules/tagging/WordlistTagger.js +1 -2
  157. package/dist/modules/tagging/WordlistTagger.js.map +1 -1
  158. package/dist/modules/transcription/AudioSegmentLayout.d.ts +23 -0
  159. package/dist/modules/transcription/AudioSegmentLayout.d.ts.map +1 -0
  160. package/dist/modules/transcription/AudioSegmentLayout.js +40 -0
  161. package/dist/modules/transcription/AudioSegmentLayout.js.map +1 -0
  162. package/dist/modules/transcription/FallbackAudioDecoder.d.ts +25 -0
  163. package/dist/modules/transcription/FallbackAudioDecoder.d.ts.map +1 -0
  164. package/dist/modules/transcription/FallbackAudioDecoder.js +46 -0
  165. package/dist/modules/transcription/FallbackAudioDecoder.js.map +1 -0
  166. package/dist/modules/transcription/MediaBunnyAudioOnlyRemuxer.d.ts +71 -0
  167. package/dist/modules/transcription/MediaBunnyAudioOnlyRemuxer.d.ts.map +1 -0
  168. package/dist/modules/transcription/MediaBunnyAudioOnlyRemuxer.js +145 -0
  169. package/dist/modules/transcription/MediaBunnyAudioOnlyRemuxer.js.map +1 -0
  170. package/dist/modules/transcription/WebAudioAudioDecoder.d.ts +46 -0
  171. package/dist/modules/transcription/WebAudioAudioDecoder.d.ts.map +1 -0
  172. package/dist/modules/transcription/WebAudioAudioDecoder.js +123 -0
  173. package/dist/modules/transcription/WebAudioAudioDecoder.js.map +1 -0
  174. package/dist/modules/transcription/index.d.ts +4 -0
  175. package/dist/modules/transcription/index.d.ts.map +1 -1
  176. package/dist/modules/transcription/index.js +3 -0
  177. package/dist/modules/transcription/index.js.map +1 -1
  178. package/dist/modules/video/RenderJob.d.ts +23 -0
  179. package/dist/modules/video/RenderJob.d.ts.map +1 -1
  180. package/dist/modules/video/index.d.ts +5 -3
  181. package/dist/modules/video/index.d.ts.map +1 -1
  182. package/dist/modules/video/index.js +2 -0
  183. package/dist/modules/video/index.js.map +1 -1
  184. package/dist/modules/video/mediabunny/MediaBunnyTranscodeCoordinator.d.ts +33 -1
  185. package/dist/modules/video/mediabunny/MediaBunnyTranscodeCoordinator.d.ts.map +1 -1
  186. package/dist/modules/video/mediabunny/MediaBunnyTranscodeCoordinator.js +97 -20
  187. package/dist/modules/video/mediabunny/MediaBunnyTranscodeCoordinator.js.map +1 -1
  188. package/dist/modules/video/mediabunny/MediaBunnyVideoRenderer.d.ts.map +1 -1
  189. package/dist/modules/video/mediabunny/MediaBunnyVideoRenderer.js +1 -0
  190. package/dist/modules/video/mediabunny/MediaBunnyVideoRenderer.js.map +1 -1
  191. package/dist/modules/video/mediabunny/caption/BatchedSubtitleLayerSource.d.ts +20 -9
  192. package/dist/modules/video/mediabunny/caption/BatchedSubtitleLayerSource.d.ts.map +1 -1
  193. package/dist/modules/video/mediabunny/caption/BatchedSubtitleLayerSource.js +56 -14
  194. package/dist/modules/video/mediabunny/caption/BatchedSubtitleLayerSource.js.map +1 -1
  195. package/dist/modules/video/mediabunny/caption/ComposedSubtitleLayerSource.d.ts +29 -10
  196. package/dist/modules/video/mediabunny/caption/ComposedSubtitleLayerSource.d.ts.map +1 -1
  197. package/dist/modules/video/mediabunny/caption/ComposedSubtitleLayerSource.js +48 -17
  198. package/dist/modules/video/mediabunny/caption/ComposedSubtitleLayerSource.js.map +1 -1
  199. package/dist/modules/video/mediabunny/caption/SubtitleLayerSource.d.ts +28 -11
  200. package/dist/modules/video/mediabunny/caption/SubtitleLayerSource.d.ts.map +1 -1
  201. package/dist/modules/video/mediabunny/caption/VideoBoundSubtitleLayerSource.d.ts +33 -12
  202. package/dist/modules/video/mediabunny/caption/VideoBoundSubtitleLayerSource.d.ts.map +1 -1
  203. package/dist/modules/video/mediabunny/caption/VideoBoundSubtitleLayerSource.js +53 -18
  204. package/dist/modules/video/mediabunny/caption/VideoBoundSubtitleLayerSource.js.map +1 -1
  205. package/dist/modules/video/mediabunny/encoder/MediaBunnyCanvasVideoTrackEncoder.d.ts.map +1 -1
  206. package/dist/modules/video/mediabunny/encoder/MediaBunnyCanvasVideoTrackEncoder.js +7 -3
  207. package/dist/modules/video/mediabunny/encoder/MediaBunnyCanvasVideoTrackEncoder.js.map +1 -1
  208. package/dist/modules/video/mediabunny/frame/BufferedVideoFrameSource.d.ts +45 -0
  209. package/dist/modules/video/mediabunny/frame/BufferedVideoFrameSource.d.ts.map +1 -0
  210. package/dist/modules/video/mediabunny/frame/BufferedVideoFrameSource.js +93 -0
  211. package/dist/modules/video/mediabunny/frame/BufferedVideoFrameSource.js.map +1 -0
  212. package/dist/modules/video/mediabunny/frame/DefaultVideoFrameDecoderFactory.d.ts.map +1 -1
  213. package/dist/modules/video/mediabunny/frame/DefaultVideoFrameDecoderFactory.js +3 -1
  214. package/dist/modules/video/mediabunny/frame/DefaultVideoFrameDecoderFactory.js.map +1 -1
  215. package/dist/modules/video/mediabunny/frame/RetainedVideoFrame.d.ts +26 -0
  216. package/dist/modules/video/mediabunny/frame/RetainedVideoFrame.d.ts.map +1 -0
  217. package/dist/modules/video/mediabunny/frame/RetainedVideoFrame.js +55 -0
  218. package/dist/modules/video/mediabunny/frame/RetainedVideoFrame.js.map +1 -0
  219. package/dist/modules/video/mediabunny/frame/VideoFrameDecoderFactory.d.ts +6 -1
  220. package/dist/modules/video/mediabunny/frame/VideoFrameDecoderFactory.d.ts.map +1 -1
  221. package/dist/modules/video/mediabunny/frame/VideoFrameDecoderSelectionFailedError.d.ts +14 -0
  222. package/dist/modules/video/mediabunny/frame/VideoFrameDecoderSelectionFailedError.d.ts.map +1 -0
  223. package/dist/modules/video/mediabunny/frame/VideoFrameDecoderSelectionFailedError.js +14 -0
  224. package/dist/modules/video/mediabunny/frame/VideoFrameDecoderSelectionFailedError.js.map +1 -0
  225. package/dist/modules/video/mediabunny/frame/WebCodecsOnlyVideoFrameDecoderFactory.d.ts +16 -0
  226. package/dist/modules/video/mediabunny/frame/WebCodecsOnlyVideoFrameDecoderFactory.d.ts.map +1 -0
  227. package/dist/modules/video/mediabunny/frame/WebCodecsOnlyVideoFrameDecoderFactory.js +23 -0
  228. package/dist/modules/video/mediabunny/frame/WebCodecsOnlyVideoFrameDecoderFactory.js.map +1 -0
  229. package/dist/modules/video/mediabunny/painter/CaptionsOverlayFramePainter.d.ts +9 -3
  230. package/dist/modules/video/mediabunny/painter/CaptionsOverlayFramePainter.d.ts.map +1 -1
  231. package/dist/modules/video/mediabunny/painter/CaptionsOverlayFramePainter.js +24 -7
  232. package/dist/modules/video/mediabunny/painter/CaptionsOverlayFramePainter.js.map +1 -1
  233. package/dist/modules/video/mediabunny/painter/FramePainter.d.ts +35 -14
  234. package/dist/modules/video/mediabunny/painter/FramePainter.d.ts.map +1 -1
  235. package/package.json +1 -1
  236. package/dist/modules/rendering/subtitle/AbstractAnim.d.ts +0 -13
  237. package/dist/modules/rendering/subtitle/AbstractAnim.d.ts.map +0 -1
  238. package/dist/modules/rendering/subtitle/AbstractAnim.js +0 -2
  239. package/dist/modules/rendering/subtitle/AbstractAnim.js.map +0 -1
  240. package/dist/modules/rendering/subtitle/AnimationProbe.d.ts +0 -39
  241. package/dist/modules/rendering/subtitle/AnimationProbe.d.ts.map +0 -1
  242. package/dist/modules/rendering/subtitle/AnimationProbe.js +0 -203
  243. package/dist/modules/rendering/subtitle/AnimationProbe.js.map +0 -1
  244. package/dist/modules/rendering/subtitle/SpriteSheetSizeProber.d.ts +0 -17
  245. package/dist/modules/rendering/subtitle/SpriteSheetSizeProber.d.ts.map +0 -1
  246. package/dist/modules/rendering/subtitle/SpriteSheetSizeProber.js +0 -58
  247. package/dist/modules/rendering/subtitle/SpriteSheetSizeProber.js.map +0 -1
  248. package/dist/modules/video/mediabunny/frame/CurrentFrameVideoSource.d.ts +0 -27
  249. package/dist/modules/video/mediabunny/frame/CurrentFrameVideoSource.d.ts.map +0 -1
  250. package/dist/modules/video/mediabunny/frame/CurrentFrameVideoSource.js +0 -84
  251. package/dist/modules/video/mediabunny/frame/CurrentFrameVideoSource.js.map +0 -1
@@ -3,11 +3,12 @@ import type { WordSplitter } from '../../splitting/WordSplitter';
3
3
  import type { WordFragmenter } from '../../bidi/WordFragmenter';
4
4
  import type { VideoFrameSource } from '../../rendering/types/VideoFrameSource';
5
5
  import type { BaselineCssComposer } from '../../rendering/styles/BaselineCssComposer';
6
+ import type { AnimationStateFingerprintStrategy } from '../../rendering/subtitle/AnimationStateFingerprint';
6
7
  import { ActiveRenderSession } from '../../rendering/subtitle/ActiveRenderSession';
7
8
  import type { PreparedStyle } from '../../rendering/subtitle/PreparedStyle';
8
9
  /**
9
10
  * Assembles an `ActiveRenderSession` and its per-session collaborator
10
- * graph: animation probe, segment paint-region cache, video-frame
11
+ * graph: animation state fingerprint, segment paint-region cache, video-frame
11
12
  * vars builder, segment wrapper renderer, batch planner, and sprite
12
13
  * sheet compositor.
13
14
  */
@@ -15,7 +16,9 @@ export declare class ActiveRenderSessionFactory {
15
16
  private readonly wordSplitter;
16
17
  private readonly wordFragmenter;
17
18
  private readonly baselineCssComposer;
18
- constructor(wordSplitter: WordSplitter, wordFragmenter: WordFragmenter, baselineCssComposer: BaselineCssComposer);
19
+ private readonly animationStrategy;
20
+ constructor(wordSplitter: WordSplitter, wordFragmenter: WordFragmenter, baselineCssComposer: BaselineCssComposer, animationStrategy: AnimationStateFingerprintStrategy);
19
21
  create(doc: Document, styles: Readonly<Record<string, PreparedStyle>>, width: number, height: number, videoFrameSource: VideoFrameSource | null): ActiveRenderSession;
22
+ private buildAnimationFingerprint;
20
23
  }
21
24
  //# sourceMappingURL=ActiveRenderSessionFactory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActiveRenderSessionFactory.d.ts","sourceRoot":"","sources":["../../../../src/modules/rendering/subtitle/ActiveRenderSessionFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAGnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AAczF,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AACtF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAE/E;;;;;GAKG;AACH,qBAAa,0BAA0B;IAGnC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,mBAAmB;gBAFnB,YAAY,EAAE,YAAY,EAC1B,cAAc,EAAE,cAAc,EAC9B,mBAAmB,EAAE,mBAAmB;IAG3D,MAAM,CACJ,GAAG,EAAE,QAAQ,EACb,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,EAC/C,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,GACxC,mBAAmB;CA0CvB"}
1
+ {"version":3,"file":"ActiveRenderSessionFactory.d.ts","sourceRoot":"","sources":["../../../../src/modules/rendering/subtitle/ActiveRenderSessionFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAGnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AAezF,OAAO,KAAK,EAA6B,iCAAiC,EAAE,MAAM,uDAAuD,CAAC;AAO1I,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AACtF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAE/E;;;;;GAKG;AACH,qBAAa,0BAA0B;IAGnC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAHjB,YAAY,EAAE,YAAY,EAC1B,cAAc,EAAE,cAAc,EAC9B,mBAAmB,EAAE,mBAAmB,EACxC,iBAAiB,EAAE,iCAAiC;IAGvE,MAAM,CACJ,GAAG,EAAE,QAAQ,EACb,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,EAC/C,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,GACxC,mBAAmB;IAgDtB,OAAO,CAAC,yBAAyB;CAWlC"}
@@ -8,15 +8,22 @@ import { SegmentSubtreeDecomposer } from '../../rendering/subtitle/SegmentSubtre
8
8
  import { SegmentPaintRegionResolver } from '../../rendering/subtitle/SegmentPaintRegionResolver';
9
9
  import { SegmentPaintRegionCache } from '../../rendering/subtitle/SegmentPaintRegionCache';
10
10
  import { VideoFrameVarsBuilder } from '../../rendering/subtitle/VideoFrameVarsBuilder';
11
+ import { SegmentAnchorVarsBuilder } from '../../rendering/subtitle/SegmentAnchorVarsBuilder';
12
+ import { ElementWidthMeasurer } from '../../rendering/subtitle/ElementWidthMeasurer';
11
13
  import { SvgFilterMaterializer } from '../../rendering/subtitle/SvgFilterMaterializer';
14
+ import { SvgFilterStateFingerprint } from '../../rendering/subtitle/SvgFilterStateFingerprint';
12
15
  import { SegmentWrapperRenderer } from '../../rendering/subtitle/SegmentWrapperRenderer';
13
- import { AnimationProbe } from '../../rendering/subtitle/AnimationProbe';
16
+ import { CssKeyframesScanner } from '../../css/CssKeyframesScanner';
17
+ import { KeyframeScanAnimationStateFingerprint } from '../../rendering/subtitle/KeyframeScanAnimationStateFingerprint';
18
+ import { SubtreeMountAnimationStateFingerprint } from '../../rendering/subtitle/SubtreeMountAnimationStateFingerprint';
19
+ import { UnknownAnimationStateFingerprint } from '../../rendering/subtitle/UnknownAnimationStateFingerprint';
20
+ import { SubtreeAnimationSupport } from '../../rendering/subtitle/SubtreeAnimationSupport';
14
21
  import { BatchPlanner } from '../../rendering/subtitle/BatchPlanner';
15
22
  import { SpriteSheetCompositor } from '../../rendering/subtitle/SpriteSheetCompositor';
16
23
  import { ActiveRenderSession } from '../../rendering/subtitle/ActiveRenderSession';
17
24
  /**
18
25
  * Assembles an `ActiveRenderSession` and its per-session collaborator
19
- * graph: animation probe, segment paint-region cache, video-frame
26
+ * graph: animation state fingerprint, segment paint-region cache, video-frame
20
27
  * vars builder, segment wrapper renderer, batch planner, and sprite
21
28
  * sheet compositor.
22
29
  */
@@ -24,23 +31,34 @@ export class ActiveRenderSessionFactory {
24
31
  wordSplitter;
25
32
  wordFragmenter;
26
33
  baselineCssComposer;
27
- constructor(wordSplitter, wordFragmenter, baselineCssComposer) {
34
+ animationStrategy;
35
+ constructor(wordSplitter, wordFragmenter, baselineCssComposer, animationStrategy) {
28
36
  this.wordSplitter = wordSplitter;
29
37
  this.wordFragmenter = wordFragmenter;
30
38
  this.baselineCssComposer = baselineCssComposer;
39
+ this.animationStrategy = animationStrategy;
31
40
  }
32
41
  create(doc, styles, width, height, videoFrameSource) {
33
42
  const subtreeBuilder = new SegmentSubtreeHtmlBuilder(this.wordSplitter, this.wordFragmenter);
34
43
  const subtreeDecomposer = new SegmentSubtreeDecomposer();
35
44
  const paintRegionResolver = new SegmentPaintRegionResolver();
36
45
  const paintRegionCache = new SegmentPaintRegionCache();
37
- const filterMaterializer = new SvgFilterMaterializer(new SvgFilterDefsRenderer(new SvgFilterScoper(), new SvgFilterLengthResolver()), height);
46
+ const elementWidthMeasurer = new ElementWidthMeasurer(subtreeBuilder, width, height);
47
+ const filterDefsRenderer = new SvgFilterDefsRenderer(new SvgFilterScoper(), new SvgFilterLengthResolver());
48
+ const filterMaterializer = new SvgFilterMaterializer(filterDefsRenderer, height);
38
49
  const videoFrameVarsBuilder = new VideoFrameVarsBuilder(subtreeBuilder, paintRegionResolver, paintRegionCache, width, height, videoFrameSource);
39
- const wrapperRenderer = new SegmentWrapperRenderer(subtreeBuilder, subtreeDecomposer, filterMaterializer, videoFrameVarsBuilder, new HorizontalPlacementResolver(new HorizontalSideResolver()), width, height);
40
- const animationProbe = new AnimationProbe();
41
- const batchPlanner = new BatchPlanner(doc, styles, animationProbe);
50
+ const wrapperRenderer = new SegmentWrapperRenderer(subtreeBuilder, subtreeDecomposer, filterMaterializer, videoFrameVarsBuilder, new SegmentAnchorVarsBuilder(), elementWidthMeasurer, new HorizontalPlacementResolver(new HorizontalSideResolver()), width, height);
51
+ const batchPlanner = new BatchPlanner(doc, styles, this.buildAnimationFingerprint(wrapperRenderer, width, height), new SvgFilterStateFingerprint(filterDefsRenderer, height));
42
52
  const spriteSheetCompositor = new SpriteSheetCompositor(styles, wrapperRenderer, this.baselineCssComposer, width, height);
43
- return new ActiveRenderSession(batchPlanner, spriteSheetCompositor, animationProbe, paintRegionCache);
53
+ return new ActiveRenderSession(batchPlanner, spriteSheetCompositor, paintRegionCache, elementWidthMeasurer);
54
+ }
55
+ buildAnimationFingerprint(wrapperRenderer, width, height) {
56
+ if (this.animationStrategy === 'none')
57
+ return new UnknownAnimationStateFingerprint();
58
+ if (this.animationStrategy === 'subtree-mount') {
59
+ return new SubtreeMountAnimationStateFingerprint(wrapperRenderer, new SubtreeAnimationSupport(), width, height);
60
+ }
61
+ return new KeyframeScanAnimationStateFingerprint(new CssKeyframesScanner());
44
62
  }
45
63
  }
46
64
  //# sourceMappingURL=ActiveRenderSessionFactory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActiveRenderSessionFactory.js","sourceRoot":"","sources":["../../../../src/modules/rendering/subtitle/ActiveRenderSessionFactory.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,gDAAgD,CAAC;AAG7F,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uDAAuD,CAAC;AAClG,OAAO,EAAE,wBAAwB,EAAE,MAAM,sDAAsD,CAAC;AAChG,OAAO,EAAE,0BAA0B,EAAE,MAAM,wDAAwD,CAAC;AACpG,OAAO,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAC;AAC9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAE,sBAAsB,EAAE,MAAM,oDAAoD,CAAC;AAC5F,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAGtF;;;;;GAKG;AACH,MAAM,OAAO,0BAA0B;IAGlB;IACA;IACA;IAHnB,YACmB,YAA0B,EAC1B,cAA8B,EAC9B,mBAAwC;QAFxC,iBAAY,GAAZ,YAAY,CAAc;QAC1B,mBAAc,GAAd,cAAc,CAAgB;QAC9B,wBAAmB,GAAnB,mBAAmB,CAAqB;IACxD,CAAC;IAEJ,MAAM,CACJ,GAAa,EACb,MAA+C,EAC/C,KAAa,EACb,MAAc,EACd,gBAAyC;QAEzC,MAAM,cAAc,GAAG,IAAI,yBAAyB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC7F,MAAM,iBAAiB,GAAG,IAAI,wBAAwB,EAAE,CAAC;QACzD,MAAM,mBAAmB,GAAG,IAAI,0BAA0B,EAAE,CAAC;QAC7D,MAAM,gBAAgB,GAAG,IAAI,uBAAuB,EAAE,CAAC;QACvD,MAAM,kBAAkB,GAAG,IAAI,qBAAqB,CAClD,IAAI,qBAAqB,CAAC,IAAI,eAAe,EAAE,EAAE,IAAI,uBAAuB,EAAE,CAAC,EAC/E,MAAM,CACP,CAAC;QACF,MAAM,qBAAqB,GAAG,IAAI,qBAAqB,CACrD,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,KAAK,EACL,MAAM,EACN,gBAAgB,CACjB,CAAC;QACF,MAAM,eAAe,GAAG,IAAI,sBAAsB,CAChD,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,IAAI,2BAA2B,CAAC,IAAI,sBAAsB,EAAE,CAAC,EAC7D,KAAK,EACL,MAAM,CACP,CAAC;QACF,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;QAC5C,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;QACnE,MAAM,qBAAqB,GAAG,IAAI,qBAAqB,CACrD,MAAM,EACN,eAAe,EACf,IAAI,CAAC,mBAAmB,EACxB,KAAK,EACL,MAAM,CACP,CAAC;QACF,OAAO,IAAI,mBAAmB,CAC5B,YAAY,EACZ,qBAAqB,EACrB,cAAc,EACd,gBAAgB,CACjB,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"ActiveRenderSessionFactory.js","sourceRoot":"","sources":["../../../../src/modules/rendering/subtitle/ActiveRenderSessionFactory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { Segment } from '../../document/Segment';
2
+ import type { PreparedStyle } from '../../rendering/subtitle/PreparedStyle';
3
+ /** Which implementation answers. `keyframe-scan` is the default; see `history/captions-rendering.md`. */
4
+ export type AnimationStateFingerprintStrategy = 'keyframe-scan' | 'subtree-mount' | 'none';
5
+ /**
6
+ * Describes where a segment's animations stand at one timestamp.
7
+ *
8
+ * Two timestamps described by the same value hold every animation at
9
+ * the same point, so the segment resolves to the same computed styles
10
+ * at both. `null` is not a description: it says the state at that
11
+ * timestamp cannot be compared with the state at any other.
12
+ *
13
+ * `classFingerprint` describes the classes the segment's elements
14
+ * carry at `t`. Two timestamps given the same one match the same
15
+ * rules.
16
+ */
17
+ export interface AnimationStateFingerprint {
18
+ at(style: PreparedStyle, seg: Segment, t: number, indexInSection: number, classFingerprint: string): Promise<string | null>;
19
+ }
20
+ //# sourceMappingURL=AnimationStateFingerprint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimationStateFingerprint.d.ts","sourceRoot":"","sources":["../../../../src/modules/rendering/subtitle/AnimationStateFingerprint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAE/E,yGAAyG;AACzG,MAAM,MAAM,iCAAiC,GAAG,eAAe,GAAG,eAAe,GAAG,MAAM,CAAC;AAE3F;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,yBAAyB;IACxC,EAAE,CACA,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,OAAO,EACZ,CAAC,EAAE,MAAM,EACT,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC3B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=AnimationStateFingerprint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimationStateFingerprint.js","sourceRoot":"","sources":["../../../../src/modules/rendering/subtitle/AnimationStateFingerprint.ts"],"names":[],"mappings":""}
@@ -3,12 +3,16 @@ import type { RenderItem, UniqueTile, AssetGroup } from '../../rendering/subtitl
3
3
  * Builds one asset group: tracks the unique tiles accumulated for an
4
4
  * asset key, deduplicates new arrivals by state key, and finalizes
5
5
  * into an {@link AssetGroup}.
6
+ *
6
7
  */
7
8
  export declare class AssetGroupBuilder {
8
9
  readonly assetKey: string;
9
10
  private readonly tiles;
10
11
  private readonly tileByStateKey;
11
12
  constructor(assetKey: string);
13
+ /** Whether this group already holds the tile for `stateKey`, so admitting it costs no room. */
14
+ holds(stateKey: string): boolean;
15
+ get tileCount(): number;
12
16
  upsertTile(stateKey: string, items: RenderItem[]): UniqueTile;
13
17
  build(): AssetGroup;
14
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AssetGroupBuilder.d.ts","sourceRoot":"","sources":["../../../../src/modules/rendering/subtitle/AssetGroupBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAEhG;;;;GAIG;AACH,qBAAa,iBAAiB;IAIhB,QAAQ,CAAC,QAAQ,EAAE,MAAM;IAHrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiC;gBAE3C,QAAQ,EAAE,MAAM;IAErC,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,UAAU;IAU7D,KAAK,IAAI,UAAU;CAGpB"}
1
+ {"version":3,"file":"AssetGroupBuilder.d.ts","sourceRoot":"","sources":["../../../../src/modules/rendering/subtitle/AssetGroupBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAEhG;;;;;GAKG;AACH,qBAAa,iBAAiB;IAIhB,QAAQ,CAAC,QAAQ,EAAE,MAAM;IAHrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiC;gBAE3C,QAAQ,EAAE,MAAM;IAErC,+FAA+F;IAC/F,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIhC,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,UAAU;IAU7D,KAAK,IAAI,UAAU;CAGpB"}
@@ -2,6 +2,7 @@
2
2
  * Builds one asset group: tracks the unique tiles accumulated for an
3
3
  * asset key, deduplicates new arrivals by state key, and finalizes
4
4
  * into an {@link AssetGroup}.
5
+ *
5
6
  */
6
7
  export class AssetGroupBuilder {
7
8
  assetKey;
@@ -10,6 +11,13 @@ export class AssetGroupBuilder {
10
11
  constructor(assetKey) {
11
12
  this.assetKey = assetKey;
12
13
  }
14
+ /** Whether this group already holds the tile for `stateKey`, so admitting it costs no room. */
15
+ holds(stateKey) {
16
+ return this.tileByStateKey.has(stateKey);
17
+ }
18
+ get tileCount() {
19
+ return this.tiles.length;
20
+ }
13
21
  upsertTile(stateKey, items) {
14
22
  let tile = this.tileByStateKey.get(stateKey);
15
23
  if (!tile) {
@@ -1 +1 @@
1
- {"version":3,"file":"AssetGroupBuilder.js","sourceRoot":"","sources":["../../../../src/modules/rendering/subtitle/AssetGroupBuilder.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IAIP;IAHJ,KAAK,GAAiB,EAAE,CAAC;IACzB,cAAc,GAAG,IAAI,GAAG,EAAsB,CAAC;IAEhE,YAAqB,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;IAAG,CAAC;IAEzC,UAAU,CAAC,QAAgB,EAAE,KAAmB;QAC9C,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAC9D,CAAC;CACF"}
1
+ {"version":3,"file":"AssetGroupBuilder.js","sourceRoot":"","sources":["../../../../src/modules/rendering/subtitle/AssetGroupBuilder.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,OAAO,iBAAiB;IAIP;IAHJ,KAAK,GAAiB,EAAE,CAAC;IACzB,cAAc,GAAG,IAAI,GAAG,EAAsB,CAAC;IAEhE,YAAqB,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;IAAG,CAAC;IAEzC,+FAA+F;IAC/F,KAAK,CAAC,QAAgB;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,UAAU,CAAC,QAAgB,EAAE,KAAmB;QAC9C,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAC9D,CAAC;CACF"}
@@ -1,6 +1,7 @@
1
1
  import type { Document } from '../../document/Document';
2
2
  import type { PreparedStyle } from '../../rendering/subtitle/PreparedStyle';
3
- import type { AnimationProbe } from '../../rendering/subtitle/AnimationProbe';
3
+ import type { AnimationStateFingerprint } from '../../rendering/subtitle/AnimationStateFingerprint';
4
+ import type { SvgFilterStateFingerprint } from '../../rendering/subtitle/SvgFilterStateFingerprint';
4
5
  import type { BatchPlan } from '../../rendering/subtitle/BatchPlan';
5
6
  /**
6
7
  * Plans one batch: for each timestamp, finds the active prepared
@@ -8,17 +9,61 @@ import type { BatchPlan } from '../../rendering/subtitle/BatchPlan';
8
9
  * rendered sprite carries only the asset payload its tiles need, and
9
10
  * deduplicates timestamps that resolve to the same visual state into
10
11
  * a single tile inside their group.
12
+ *
13
+ * A batch ends when a group has no room for the picture the next
14
+ * timestamp needs, so the plan covers a prefix of the timestamps it
15
+ * was offered and the caller reads how far it got from the
16
+ * assignments. Offering more than one sheet could ever hold is the
17
+ * point: how much video a sheet covers is then decided by how much
18
+ * the captions move, not by a count fixed before anything was looked
19
+ * at. A still caption can carry a sheet for as long as it stays
20
+ * still.
11
21
  */
12
22
  export declare class BatchPlanner {
13
23
  private readonly doc;
14
24
  private readonly styles;
15
- private readonly animationProbe;
16
- constructor(doc: Document, styles: Readonly<Record<string, PreparedStyle>>, animationProbe: AnimationProbe);
17
- plan(timestamps: ReadonlyArray<number>): BatchPlan;
18
- private assignTile;
25
+ private readonly animationFingerprint;
26
+ private readonly filterFingerprint;
27
+ constructor(doc: Document, styles: Readonly<Record<string, PreparedStyle>>, animationFingerprint: AnimationStateFingerprint, filterFingerprint: SvgFilterStateFingerprint);
28
+ /**
29
+ * Plans as many of `timestamps`, in order, as `maxTiles` distinct
30
+ * pictures can serve. The returned assignments cover a prefix of the
31
+ * input, never fewer than one entry, and the timestamps past it
32
+ * belong to the next batch.
33
+ *
34
+ * The budget is the batch's, not each group's: groups become one
35
+ * sprite sheet each, and it is their total that has to stay inside
36
+ * whatever raster the caller sized `maxTiles` against.
37
+ */
38
+ plan(timestamps: ReadonlyArray<number>, maxTiles: number): Promise<BatchPlan>;
39
+ /**
40
+ * What this timestamp needs painted — which sprite it belongs in and
41
+ * which picture inside it — or `null` where no Section is active and
42
+ * nothing is painted at all.
43
+ */
44
+ private pictureAt;
45
+ private builderFor;
19
46
  private itemsAt;
20
47
  private computeAssetKey;
48
+ /**
49
+ * What every active item paints at `t`. Two timestamps sharing this
50
+ * value paint the same picture, so they share a tile.
51
+ *
52
+ * JSON-encoded rather than joined: two of the parts carry text an
53
+ * author writes — a filter body and the name of a `@keyframes` rule
54
+ * — and no separator can be assumed absent from either.
55
+ */
21
56
  private computeStateKey;
57
+ /**
58
+ * The item's state in four parts: the state its classes are in,
59
+ * where its animations stand, the filter markup it is painted
60
+ * through, and the timestamp itself where any of them cannot answer
61
+ * for the whole frame — an animation is mid-run, a filter reads a
62
+ * variable this side cannot resolve, or the style paints the video
63
+ * frame itself, which differs at every timestamp by definition and
64
+ * is invisible from here.
65
+ */
66
+ private describeItemState;
22
67
  /**
23
68
  * Captures every time-varying CSS class the segment subtree
24
69
  * exposes (segment, lines, words) so two timestamps that resolve
@@ -1 +1 @@
1
- {"version":3,"file":"BatchPlanner.d.ts","sourceRoot":"","sources":["../../../../src/modules/rendering/subtitle/BatchPlanner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAG3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAEjF,OAAO,KAAK,EAAE,SAAS,EAA0C,MAAM,uCAAuC,CAAC;AAG/G;;;;;;GAMG;AACH,qBAAa,YAAY;IAGrB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAFd,GAAG,EAAE,QAAQ,EACb,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,EAC/C,cAAc,EAAE,cAAc;IAGjD,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS;IAalD,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,OAAO;IAmBf,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,eAAe;IAOvB;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,oBAAoB;CAK7B"}
1
+ {"version":3,"file":"BatchPlanner.d.ts","sourceRoot":"","sources":["../../../../src/modules/rendering/subtitle/BatchPlanner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAG3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC/E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uDAAuD,CAAC;AACvG,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uDAAuD,CAAC;AAEvG,OAAO,KAAK,EAAE,SAAS,EAA0C,MAAM,uCAAuC,CAAC;AAU/G;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,YAAY;IAGrB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAHjB,GAAG,EAAE,QAAQ,EACb,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,EAC/C,oBAAoB,EAAE,yBAAyB,EAC/C,iBAAiB,EAAE,yBAAyB;IAG/D;;;;;;;;;OASG;IACG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IA2BnF;;;;OAIG;YACW,SAAS;IAUvB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,OAAO;IAmBf,OAAO,CAAC,eAAe;IAMvB;;;;;;;OAOG;YACW,eAAe;IAM7B;;;;;;;;OAQG;YACW,iBAAiB;IAkB/B;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,oBAAoB;CAK7B"}
@@ -6,38 +6,86 @@ import { profiler } from '../../profiling/Profiler';
6
6
  * rendered sprite carries only the asset payload its tiles need, and
7
7
  * deduplicates timestamps that resolve to the same visual state into
8
8
  * a single tile inside their group.
9
+ *
10
+ * A batch ends when a group has no room for the picture the next
11
+ * timestamp needs, so the plan covers a prefix of the timestamps it
12
+ * was offered and the caller reads how far it got from the
13
+ * assignments. Offering more than one sheet could ever hold is the
14
+ * point: how much video a sheet covers is then decided by how much
15
+ * the captions move, not by a count fixed before anything was looked
16
+ * at. A still caption can carry a sheet for as long as it stays
17
+ * still.
9
18
  */
10
19
  export class BatchPlanner {
11
20
  doc;
12
21
  styles;
13
- animationProbe;
14
- constructor(doc, styles, animationProbe) {
22
+ animationFingerprint;
23
+ filterFingerprint;
24
+ constructor(doc, styles, animationFingerprint, filterFingerprint) {
15
25
  this.doc = doc;
16
26
  this.styles = styles;
17
- this.animationProbe = animationProbe;
27
+ this.animationFingerprint = animationFingerprint;
28
+ this.filterFingerprint = filterFingerprint;
18
29
  }
19
- plan(timestamps) {
30
+ /**
31
+ * Plans as many of `timestamps`, in order, as `maxTiles` distinct
32
+ * pictures can serve. The returned assignments cover a prefix of the
33
+ * input, never fewer than one entry, and the timestamps past it
34
+ * belong to the next batch.
35
+ *
36
+ * The budget is the batch's, not each group's: groups become one
37
+ * sprite sheet each, and it is their total that has to stay inside
38
+ * whatever raster the caller sized `maxTiles` against.
39
+ */
40
+ async plan(timestamps, maxTiles) {
20
41
  const builders = new Map();
21
- const assignments = profiler.time('BatchPlanner.assignTiles', () => timestamps.map((t) => this.assignTile(t, builders)));
42
+ const assignments = [];
43
+ await profiler.time('BatchPlanner.assignTiles', async () => {
44
+ let tilesTaken = 0;
45
+ for (const t of timestamps) {
46
+ const picture = await this.pictureAt(t);
47
+ if (picture === null) {
48
+ assignments.push(null);
49
+ continue;
50
+ }
51
+ const builder = this.builderFor(picture.assetKey, builders);
52
+ const isNewPicture = !builder.holds(picture.stateKey);
53
+ if (isNewPicture && tilesTaken === maxTiles)
54
+ break;
55
+ if (isNewPicture)
56
+ tilesTaken++;
57
+ const tile = builder.upsertTile(picture.stateKey, picture.items);
58
+ assignments.push({ assetKey: picture.assetKey, tileIndex: tile.tileIndex });
59
+ }
60
+ });
22
61
  const groups = new Map();
23
62
  for (const builder of builders.values()) {
24
63
  groups.set(builder.assetKey, builder.build());
25
64
  }
26
65
  return { groups, assignments };
27
66
  }
28
- assignTile(t, builders) {
67
+ /**
68
+ * What this timestamp needs painted — which sprite it belongs in and
69
+ * which picture inside it — or `null` where no Section is active and
70
+ * nothing is painted at all.
71
+ */
72
+ async pictureAt(t) {
29
73
  const items = profiler.time('BatchPlanner.itemsAt', () => this.itemsAt(t));
30
74
  if (items.length === 0)
31
75
  return null;
32
- const assetKey = this.computeAssetKey(items);
76
+ return {
77
+ assetKey: this.computeAssetKey(items),
78
+ stateKey: await profiler.time('BatchPlanner.computeStateKey', () => this.computeStateKey(items, t)),
79
+ items,
80
+ };
81
+ }
82
+ builderFor(assetKey, builders) {
33
83
  let builder = builders.get(assetKey);
34
84
  if (!builder) {
35
85
  builder = new AssetGroupBuilder(assetKey);
36
86
  builders.set(assetKey, builder);
37
87
  }
38
- const stateKey = profiler.time('BatchPlanner.computeStateKey', () => this.computeStateKey(items, t));
39
- const tile = builder.upsertTile(stateKey, items);
40
- return { assetKey, tileIndex: tile.tileIndex };
88
+ return builder;
41
89
  }
42
90
  itemsAt(t) {
43
91
  const items = [];
@@ -66,11 +114,45 @@ export class BatchPlanner {
66
114
  kinds.add(it.style.kind);
67
115
  return [...kinds].sort().join(',');
68
116
  }
69
- computeStateKey(items, t) {
70
- return items.map(({ seg, style }) => {
71
- const base = `${style.kind}:${seg.id}:${this.fingerprintSegmentState(seg, t)}`;
72
- return this.animationProbe.isItemAnimating(style, seg, t) ? `${base}:${t.toFixed(3)}` : base;
73
- }).join('|');
117
+ /**
118
+ * What every active item paints at `t`. Two timestamps sharing this
119
+ * value paint the same picture, so they share a tile.
120
+ *
121
+ * JSON-encoded rather than joined: two of the parts carry text an
122
+ * author writes — a filter body and the name of a `@keyframes` rule
123
+ * — and no separator can be assumed absent from either.
124
+ */
125
+ async computeStateKey(items, t) {
126
+ const described = [];
127
+ for (const item of items)
128
+ described.push(await this.describeItemState(item, t));
129
+ return JSON.stringify(described);
130
+ }
131
+ /**
132
+ * The item's state in four parts: the state its classes are in,
133
+ * where its animations stand, the filter markup it is painted
134
+ * through, and the timestamp itself where any of them cannot answer
135
+ * for the whole frame — an animation is mid-run, a filter reads a
136
+ * variable this side cannot resolve, or the style paints the video
137
+ * frame itself, which differs at every timestamp by definition and
138
+ * is invisible from here.
139
+ */
140
+ async describeItemState({ seg, style, indexInSection }, t) {
141
+ const filters = this.filterFingerprint.at(style.kind, style.filters, t);
142
+ const classes = this.fingerprintSegmentState(seg, t);
143
+ // A style painting the video frame takes a tile per timestamp
144
+ // whatever its animations do, so it is never described.
145
+ const animations = style.rendering.videoFrame.required
146
+ ? null
147
+ : await this.animationFingerprint.at(style, seg, t, indexInSection, classes);
148
+ const perFrame = filters === null || animations === null;
149
+ return [
150
+ `${style.kind}:${seg.id}`,
151
+ classes,
152
+ animations ?? '',
153
+ perFrame ? t.toFixed(3) : '',
154
+ filters ?? '',
155
+ ];
74
156
  }
75
157
  /**
76
158
  * Captures every time-varying CSS class the segment subtree
@@ -1 +1 @@
1
- {"version":3,"file":"BatchPlanner.js","sourceRoot":"","sources":["../../../../src/modules/rendering/subtitle/BatchPlanner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BatchPlanner.js","sourceRoot":"","sources":["../../../../src/modules/rendering/subtitle/BatchPlanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import type { Segment } from '../../document/Segment';
2
+ import type { PreparedStyle } from '../../rendering/subtitle/PreparedStyle';
3
+ import type { SegmentSubtreeHtmlBuilder, SegmentSubtreeStyleInput } from '../../rendering/subtitle/SegmentSubtreeHtmlBuilder';
4
+ import { ElementWidths } from '../../rendering/subtitle/ElementWidths';
5
+ /**
6
+ * How wide a caption's elements lay out, measured by mounting the
7
+ * subtree under the consumer's own stylesheet and reading the boxes
8
+ * back. Answers once per caption per style and reuses that for every
9
+ * frame the caption is on screen; `clear` drops what it kept.
10
+ *
11
+ * Segments, lines and words answer, and nothing else does. They are the
12
+ * three a stylesheet lays text out in, and every extra kind costs
13
+ * another custom property on every rendered element for a question no
14
+ * stylesheet has asked yet. Adding a kind is adding its variable here.
15
+ *
16
+ * A style whose CSS reads none of the properties is never measured: the
17
+ * work is a mount and a layout read, and nothing would consume it.
18
+ *
19
+ * Measuring the subtree as it is really built is what keeps the answer
20
+ * honest. Whatever classes the caption carries at that moment are on
21
+ * it, so a template that restyles a whole caption on a render state is
22
+ * measured in the typography that state produces, with no second
23
+ * description of that state to keep in step.
24
+ */
25
+ export declare class ElementWidthMeasurer {
26
+ private readonly subtreeBuilder;
27
+ private readonly viewportWidth;
28
+ private readonly viewportHeight;
29
+ private readonly widthsByKey;
30
+ constructor(subtreeBuilder: SegmentSubtreeHtmlBuilder, viewportWidth: number, viewportHeight: number);
31
+ widthsFor(style: PreparedStyle, styleInput: SegmentSubtreeStyleInput, segment: Segment, t: number, indexInSection: number): ElementWidths;
32
+ clear(): void;
33
+ private styleReadsAnyWidth;
34
+ private measure;
35
+ /**
36
+ * The subtree as it will really be built, with every element named so
37
+ * its box can be found again afterwards.
38
+ *
39
+ * The widths are deliberately absent from it. A stylesheet sizing text
40
+ * from its own width would otherwise have to be measured at the size
41
+ * it is being asked to produce; leaving the properties unset lets the
42
+ * rule fall back, and since the answer is a multiple of the font size,
43
+ * whichever size the fallback lands on gives the same one.
44
+ */
45
+ private buildMeasurableSubtree;
46
+ private everyElementId;
47
+ /**
48
+ * An element that generates no box reports zero. That is the true
49
+ * answer rather than a missing one — a stylesheet asking the width of
50
+ * something it took out of flow is asking about a box that is not
51
+ * there.
52
+ */
53
+ private readWidths;
54
+ private widthEmOf;
55
+ }
56
+ //# sourceMappingURL=ElementWidthMeasurer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ElementWidthMeasurer.d.ts","sourceRoot":"","sources":["../../../../src/modules/rendering/subtitle/ElementWidthMeasurer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAGzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC/E,OAAO,KAAK,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,uDAAuD,CAAC;AACjI,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAS1E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,oBAAoB;IAI7B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc;IALjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoC;gBAG7C,cAAc,EAAE,yBAAyB,EACzC,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM;IAGzC,SAAS,CACP,KAAK,EAAE,aAAa,EACpB,UAAU,EAAE,wBAAwB,EACpC,OAAO,EAAE,OAAO,EAChB,CAAC,EAAE,MAAM,EACT,cAAc,EAAE,MAAM,GACrB,aAAa;IAWhB,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,OAAO;IAuBf;;;;;;;;;OASG;IACH,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,cAAc;IAStB;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,SAAS;CAKlB"}