@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.
- package/README.md +35 -8
- package/dist/modules/document/CssVariable.d.ts +6 -0
- package/dist/modules/document/CssVariable.d.ts.map +1 -1
- package/dist/modules/document/CssVariable.js +6 -0
- package/dist/modules/document/CssVariable.js.map +1 -1
- package/dist/modules/document/Document.d.ts +3 -0
- package/dist/modules/document/Document.d.ts.map +1 -1
- package/dist/modules/document/Document.js +12 -1
- package/dist/modules/document/Document.js.map +1 -1
- package/dist/modules/document/DocumentEditor.d.ts +16 -4
- package/dist/modules/document/DocumentEditor.d.ts.map +1 -1
- package/dist/modules/document/DocumentEditor.js +14 -10
- package/dist/modules/document/DocumentEditor.js.map +1 -1
- package/dist/modules/document/Line.d.ts +6 -0
- package/dist/modules/document/Line.d.ts.map +1 -1
- package/dist/modules/document/Line.js +10 -0
- package/dist/modules/document/Line.js.map +1 -1
- package/dist/modules/document/Word.d.ts +8 -0
- package/dist/modules/document/Word.d.ts.map +1 -1
- package/dist/modules/document/Word.js +11 -1
- package/dist/modules/document/Word.js.map +1 -1
- package/dist/modules/pipeline/RenderPipelineBuilder.d.ts +1 -1
- package/dist/modules/pipeline/RenderPipelineBuilder.d.ts.map +1 -1
- package/dist/modules/pipeline/RenderPipelineBuilder.js +15 -5
- package/dist/modules/pipeline/RenderPipelineBuilder.js.map +1 -1
- package/dist/modules/rendering/BrowserSubtitleFrameRenderer.d.ts +18 -8
- package/dist/modules/rendering/BrowserSubtitleFrameRenderer.d.ts.map +1 -1
- package/dist/modules/rendering/BrowserSubtitleFrameRenderer.js +27 -21
- package/dist/modules/rendering/BrowserSubtitleFrameRenderer.js.map +1 -1
- package/dist/modules/rendering/SubtitleFrameRenderer.d.ts +41 -33
- package/dist/modules/rendering/SubtitleFrameRenderer.d.ts.map +1 -1
- package/dist/modules/rendering/index.d.ts +4 -0
- package/dist/modules/rendering/index.d.ts.map +1 -1
- package/dist/modules/rendering/index.js +2 -0
- package/dist/modules/rendering/index.js.map +1 -1
- package/dist/modules/rendering/subtitle/ActiveRenderSession.d.ts +13 -6
- package/dist/modules/rendering/subtitle/ActiveRenderSession.d.ts.map +1 -1
- package/dist/modules/rendering/subtitle/ActiveRenderSession.js +16 -9
- package/dist/modules/rendering/subtitle/ActiveRenderSession.js.map +1 -1
- package/dist/modules/rendering/subtitle/ActiveRenderSessionFactory.d.ts +5 -2
- package/dist/modules/rendering/subtitle/ActiveRenderSessionFactory.d.ts.map +1 -1
- package/dist/modules/rendering/subtitle/ActiveRenderSessionFactory.js +26 -8
- package/dist/modules/rendering/subtitle/ActiveRenderSessionFactory.js.map +1 -1
- package/dist/modules/rendering/subtitle/AnimationStateFingerprint.d.ts +20 -0
- package/dist/modules/rendering/subtitle/AnimationStateFingerprint.d.ts.map +1 -0
- package/dist/modules/rendering/subtitle/AnimationStateFingerprint.js +2 -0
- package/dist/modules/rendering/subtitle/AnimationStateFingerprint.js.map +1 -0
- package/dist/modules/rendering/subtitle/AssetGroupBuilder.d.ts +4 -0
- package/dist/modules/rendering/subtitle/AssetGroupBuilder.d.ts.map +1 -1
- package/dist/modules/rendering/subtitle/AssetGroupBuilder.js +8 -0
- package/dist/modules/rendering/subtitle/AssetGroupBuilder.js.map +1 -1
- package/dist/modules/rendering/subtitle/BatchPlanner.d.ts +50 -5
- package/dist/modules/rendering/subtitle/BatchPlanner.d.ts.map +1 -1
- package/dist/modules/rendering/subtitle/BatchPlanner.js +97 -15
- package/dist/modules/rendering/subtitle/BatchPlanner.js.map +1 -1
- package/dist/modules/rendering/subtitle/ElementWidthMeasurer.d.ts +56 -0
- package/dist/modules/rendering/subtitle/ElementWidthMeasurer.d.ts.map +1 -0
- package/dist/modules/rendering/subtitle/ElementWidthMeasurer.js +119 -0
- package/dist/modules/rendering/subtitle/ElementWidthMeasurer.js.map +1 -0
- package/dist/modules/rendering/subtitle/ElementWidths.d.ts +23 -0
- package/dist/modules/rendering/subtitle/ElementWidths.d.ts.map +1 -0
- package/dist/modules/rendering/subtitle/ElementWidths.js +29 -0
- package/dist/modules/rendering/subtitle/ElementWidths.js.map +1 -0
- package/dist/modules/rendering/subtitle/ImageDecodeSpriteSheetRasterProbe.d.ts +18 -0
- package/dist/modules/rendering/subtitle/ImageDecodeSpriteSheetRasterProbe.d.ts.map +1 -0
- package/dist/modules/rendering/subtitle/ImageDecodeSpriteSheetRasterProbe.js +42 -0
- package/dist/modules/rendering/subtitle/ImageDecodeSpriteSheetRasterProbe.js.map +1 -0
- package/dist/modules/rendering/subtitle/KeyframeScanAnimationStateFingerprint.d.ts +35 -0
- package/dist/modules/rendering/subtitle/KeyframeScanAnimationStateFingerprint.d.ts.map +1 -0
- package/dist/modules/rendering/subtitle/KeyframeScanAnimationStateFingerprint.js +64 -0
- package/dist/modules/rendering/subtitle/KeyframeScanAnimationStateFingerprint.js.map +1 -0
- package/dist/modules/rendering/subtitle/PreparedStyle.d.ts +2 -0
- package/dist/modules/rendering/subtitle/PreparedStyle.d.ts.map +1 -1
- package/dist/modules/rendering/subtitle/PreparedStyleFactory.d.ts.map +1 -1
- package/dist/modules/rendering/subtitle/PreparedStyleFactory.js +12 -1
- package/dist/modules/rendering/subtitle/PreparedStyleFactory.js.map +1 -1
- package/dist/modules/rendering/subtitle/SegmentAnchorVarsBuilder.d.ts +28 -0
- package/dist/modules/rendering/subtitle/SegmentAnchorVarsBuilder.d.ts.map +1 -0
- package/dist/modules/rendering/subtitle/SegmentAnchorVarsBuilder.js +23 -0
- package/dist/modules/rendering/subtitle/SegmentAnchorVarsBuilder.js.map +1 -0
- package/dist/modules/rendering/subtitle/SegmentSubtreeHtmlBuilder.d.ts +3 -0
- package/dist/modules/rendering/subtitle/SegmentSubtreeHtmlBuilder.d.ts.map +1 -1
- package/dist/modules/rendering/subtitle/SegmentSubtreeHtmlBuilder.js +12 -3
- package/dist/modules/rendering/subtitle/SegmentSubtreeHtmlBuilder.js.map +1 -1
- package/dist/modules/rendering/subtitle/SegmentWrapperRenderer.d.ts +7 -1
- package/dist/modules/rendering/subtitle/SegmentWrapperRenderer.d.ts.map +1 -1
- package/dist/modules/rendering/subtitle/SegmentWrapperRenderer.js +23 -5
- package/dist/modules/rendering/subtitle/SegmentWrapperRenderer.js.map +1 -1
- package/dist/modules/rendering/subtitle/SpriteSheetProbeObserver.d.ts +29 -0
- package/dist/modules/rendering/subtitle/SpriteSheetProbeObserver.d.ts.map +1 -0
- package/dist/modules/rendering/subtitle/SpriteSheetProbeObserver.js +2 -0
- package/dist/modules/rendering/subtitle/SpriteSheetProbeObserver.js.map +1 -0
- package/dist/modules/rendering/subtitle/SpriteSheetRasterProbe.d.ts +19 -0
- package/dist/modules/rendering/subtitle/SpriteSheetRasterProbe.d.ts.map +1 -0
- package/dist/modules/rendering/subtitle/SpriteSheetRasterProbe.js +2 -0
- package/dist/modules/rendering/subtitle/SpriteSheetRasterProbe.js.map +1 -0
- package/dist/modules/rendering/subtitle/SpriteSheetSizeProbe.d.ts +31 -0
- package/dist/modules/rendering/subtitle/SpriteSheetSizeProbe.d.ts.map +1 -0
- package/dist/modules/rendering/subtitle/SpriteSheetSizeProbe.js +89 -0
- package/dist/modules/rendering/subtitle/SpriteSheetSizeProbe.js.map +1 -0
- package/dist/modules/rendering/subtitle/SubtreeAnimationReading.d.ts +49 -0
- package/dist/modules/rendering/subtitle/SubtreeAnimationReading.d.ts.map +1 -0
- package/dist/modules/rendering/subtitle/SubtreeAnimationReading.js +87 -0
- package/dist/modules/rendering/subtitle/SubtreeAnimationReading.js.map +1 -0
- package/dist/modules/rendering/subtitle/SubtreeAnimationSupport.d.ts +17 -0
- package/dist/modules/rendering/subtitle/SubtreeAnimationSupport.d.ts.map +1 -0
- package/dist/modules/rendering/subtitle/SubtreeAnimationSupport.js +53 -0
- package/dist/modules/rendering/subtitle/SubtreeAnimationSupport.js.map +1 -0
- package/dist/modules/rendering/subtitle/SubtreeMountAnimationStateFingerprint.d.ts +62 -0
- package/dist/modules/rendering/subtitle/SubtreeMountAnimationStateFingerprint.d.ts.map +1 -0
- package/dist/modules/rendering/subtitle/SubtreeMountAnimationStateFingerprint.js +153 -0
- package/dist/modules/rendering/subtitle/SubtreeMountAnimationStateFingerprint.js.map +1 -0
- package/dist/modules/rendering/subtitle/SvgFilterStateFingerprint.d.ts +47 -0
- package/dist/modules/rendering/subtitle/SvgFilterStateFingerprint.d.ts.map +1 -0
- package/dist/modules/rendering/subtitle/SvgFilterStateFingerprint.js +69 -0
- package/dist/modules/rendering/subtitle/SvgFilterStateFingerprint.js.map +1 -0
- package/dist/modules/rendering/subtitle/UnknownAnimationStateFingerprint.d.ts +9 -0
- package/dist/modules/rendering/subtitle/UnknownAnimationStateFingerprint.d.ts.map +1 -0
- package/dist/modules/rendering/subtitle/UnknownAnimationStateFingerprint.js +10 -0
- package/dist/modules/rendering/subtitle/UnknownAnimationStateFingerprint.js.map +1 -0
- package/dist/modules/rendering/subtitle/VideoFrameVarsBuilder.d.ts.map +1 -1
- package/dist/modules/rendering/subtitle/VideoFrameVarsBuilder.js +2 -0
- package/dist/modules/rendering/subtitle/VideoFrameVarsBuilder.js.map +1 -1
- package/dist/modules/rendering/types/ElementRenderOverrides.d.ts +2 -0
- package/dist/modules/rendering/types/ElementRenderOverrides.d.ts.map +1 -1
- package/dist/modules/rendering/types/ElementRenderOverrides.js +4 -0
- package/dist/modules/rendering/types/ElementRenderOverrides.js.map +1 -1
- package/dist/modules/splitting/BalancedLineSplitter.d.ts +9 -0
- package/dist/modules/splitting/BalancedLineSplitter.d.ts.map +1 -1
- package/dist/modules/splitting/BalancedLineSplitter.js +15 -3
- package/dist/modules/splitting/BalancedLineSplitter.js.map +1 -1
- package/dist/modules/splitting/BalancedPixelWidthLineSplitter.d.ts +1 -4
- package/dist/modules/splitting/BalancedPixelWidthLineSplitter.d.ts.map +1 -1
- package/dist/modules/splitting/BalancedPixelWidthLineSplitter.js +5 -7
- package/dist/modules/splitting/BalancedPixelWidthLineSplitter.js.map +1 -1
- package/dist/modules/splitting/DomProbeCanvasTextMeasurer.d.ts +16 -7
- package/dist/modules/splitting/DomProbeCanvasTextMeasurer.d.ts.map +1 -1
- package/dist/modules/splitting/DomProbeCanvasTextMeasurer.js +44 -33
- package/dist/modules/splitting/DomProbeCanvasTextMeasurer.js.map +1 -1
- package/dist/modules/splitting/TextMeasurer.d.ts +9 -4
- package/dist/modules/splitting/TextMeasurer.d.ts.map +1 -1
- package/dist/modules/svg-filter/SvgFilter.d.ts +9 -0
- package/dist/modules/svg-filter/SvgFilter.d.ts.map +1 -1
- package/dist/modules/svg-filter/SvgFilter.js +17 -0
- package/dist/modules/svg-filter/SvgFilter.js.map +1 -1
- package/dist/modules/svg-filter/SvgFilterDefinitions.d.ts +7 -0
- package/dist/modules/svg-filter/SvgFilterDefinitions.d.ts.map +1 -1
- package/dist/modules/svg-filter/SvgFilterDefinitions.js +17 -0
- package/dist/modules/svg-filter/SvgFilterDefinitions.js.map +1 -1
- package/dist/modules/tagging/RegexTagger.js +1 -2
- package/dist/modules/tagging/RegexTagger.js.map +1 -1
- package/dist/modules/tagging/SpanTagger.js +1 -2
- package/dist/modules/tagging/SpanTagger.js.map +1 -1
- package/dist/modules/tagging/StructureTagger.js +1 -2
- package/dist/modules/tagging/StructureTagger.js.map +1 -1
- package/dist/modules/tagging/WordlistTagger.js +1 -2
- package/dist/modules/tagging/WordlistTagger.js.map +1 -1
- package/dist/modules/transcription/AudioSegmentLayout.d.ts +23 -0
- package/dist/modules/transcription/AudioSegmentLayout.d.ts.map +1 -0
- package/dist/modules/transcription/AudioSegmentLayout.js +40 -0
- package/dist/modules/transcription/AudioSegmentLayout.js.map +1 -0
- package/dist/modules/transcription/FallbackAudioDecoder.d.ts +25 -0
- package/dist/modules/transcription/FallbackAudioDecoder.d.ts.map +1 -0
- package/dist/modules/transcription/FallbackAudioDecoder.js +46 -0
- package/dist/modules/transcription/FallbackAudioDecoder.js.map +1 -0
- package/dist/modules/transcription/MediaBunnyAudioOnlyRemuxer.d.ts +71 -0
- package/dist/modules/transcription/MediaBunnyAudioOnlyRemuxer.d.ts.map +1 -0
- package/dist/modules/transcription/MediaBunnyAudioOnlyRemuxer.js +145 -0
- package/dist/modules/transcription/MediaBunnyAudioOnlyRemuxer.js.map +1 -0
- package/dist/modules/transcription/WebAudioAudioDecoder.d.ts +46 -0
- package/dist/modules/transcription/WebAudioAudioDecoder.d.ts.map +1 -0
- package/dist/modules/transcription/WebAudioAudioDecoder.js +123 -0
- package/dist/modules/transcription/WebAudioAudioDecoder.js.map +1 -0
- package/dist/modules/transcription/index.d.ts +4 -0
- package/dist/modules/transcription/index.d.ts.map +1 -1
- package/dist/modules/transcription/index.js +3 -0
- package/dist/modules/transcription/index.js.map +1 -1
- package/dist/modules/video/RenderJob.d.ts +23 -0
- package/dist/modules/video/RenderJob.d.ts.map +1 -1
- package/dist/modules/video/index.d.ts +5 -3
- package/dist/modules/video/index.d.ts.map +1 -1
- package/dist/modules/video/index.js +2 -0
- package/dist/modules/video/index.js.map +1 -1
- package/dist/modules/video/mediabunny/MediaBunnyTranscodeCoordinator.d.ts +33 -1
- package/dist/modules/video/mediabunny/MediaBunnyTranscodeCoordinator.d.ts.map +1 -1
- package/dist/modules/video/mediabunny/MediaBunnyTranscodeCoordinator.js +97 -20
- package/dist/modules/video/mediabunny/MediaBunnyTranscodeCoordinator.js.map +1 -1
- package/dist/modules/video/mediabunny/MediaBunnyVideoRenderer.d.ts.map +1 -1
- package/dist/modules/video/mediabunny/MediaBunnyVideoRenderer.js +1 -0
- package/dist/modules/video/mediabunny/MediaBunnyVideoRenderer.js.map +1 -1
- package/dist/modules/video/mediabunny/caption/BatchedSubtitleLayerSource.d.ts +20 -9
- package/dist/modules/video/mediabunny/caption/BatchedSubtitleLayerSource.d.ts.map +1 -1
- package/dist/modules/video/mediabunny/caption/BatchedSubtitleLayerSource.js +56 -14
- package/dist/modules/video/mediabunny/caption/BatchedSubtitleLayerSource.js.map +1 -1
- package/dist/modules/video/mediabunny/caption/ComposedSubtitleLayerSource.d.ts +29 -10
- package/dist/modules/video/mediabunny/caption/ComposedSubtitleLayerSource.d.ts.map +1 -1
- package/dist/modules/video/mediabunny/caption/ComposedSubtitleLayerSource.js +48 -17
- package/dist/modules/video/mediabunny/caption/ComposedSubtitleLayerSource.js.map +1 -1
- package/dist/modules/video/mediabunny/caption/SubtitleLayerSource.d.ts +28 -11
- package/dist/modules/video/mediabunny/caption/SubtitleLayerSource.d.ts.map +1 -1
- package/dist/modules/video/mediabunny/caption/VideoBoundSubtitleLayerSource.d.ts +33 -12
- package/dist/modules/video/mediabunny/caption/VideoBoundSubtitleLayerSource.d.ts.map +1 -1
- package/dist/modules/video/mediabunny/caption/VideoBoundSubtitleLayerSource.js +53 -18
- package/dist/modules/video/mediabunny/caption/VideoBoundSubtitleLayerSource.js.map +1 -1
- package/dist/modules/video/mediabunny/encoder/MediaBunnyCanvasVideoTrackEncoder.d.ts.map +1 -1
- package/dist/modules/video/mediabunny/encoder/MediaBunnyCanvasVideoTrackEncoder.js +7 -3
- package/dist/modules/video/mediabunny/encoder/MediaBunnyCanvasVideoTrackEncoder.js.map +1 -1
- package/dist/modules/video/mediabunny/frame/BufferedVideoFrameSource.d.ts +45 -0
- package/dist/modules/video/mediabunny/frame/BufferedVideoFrameSource.d.ts.map +1 -0
- package/dist/modules/video/mediabunny/frame/BufferedVideoFrameSource.js +93 -0
- package/dist/modules/video/mediabunny/frame/BufferedVideoFrameSource.js.map +1 -0
- package/dist/modules/video/mediabunny/frame/DefaultVideoFrameDecoderFactory.d.ts.map +1 -1
- package/dist/modules/video/mediabunny/frame/DefaultVideoFrameDecoderFactory.js +3 -1
- package/dist/modules/video/mediabunny/frame/DefaultVideoFrameDecoderFactory.js.map +1 -1
- package/dist/modules/video/mediabunny/frame/RetainedVideoFrame.d.ts +26 -0
- package/dist/modules/video/mediabunny/frame/RetainedVideoFrame.d.ts.map +1 -0
- package/dist/modules/video/mediabunny/frame/RetainedVideoFrame.js +55 -0
- package/dist/modules/video/mediabunny/frame/RetainedVideoFrame.js.map +1 -0
- package/dist/modules/video/mediabunny/frame/VideoFrameDecoderFactory.d.ts +6 -1
- package/dist/modules/video/mediabunny/frame/VideoFrameDecoderFactory.d.ts.map +1 -1
- package/dist/modules/video/mediabunny/frame/VideoFrameDecoderSelectionFailedError.d.ts +14 -0
- package/dist/modules/video/mediabunny/frame/VideoFrameDecoderSelectionFailedError.d.ts.map +1 -0
- package/dist/modules/video/mediabunny/frame/VideoFrameDecoderSelectionFailedError.js +14 -0
- package/dist/modules/video/mediabunny/frame/VideoFrameDecoderSelectionFailedError.js.map +1 -0
- package/dist/modules/video/mediabunny/frame/WebCodecsOnlyVideoFrameDecoderFactory.d.ts +16 -0
- package/dist/modules/video/mediabunny/frame/WebCodecsOnlyVideoFrameDecoderFactory.d.ts.map +1 -0
- package/dist/modules/video/mediabunny/frame/WebCodecsOnlyVideoFrameDecoderFactory.js +23 -0
- package/dist/modules/video/mediabunny/frame/WebCodecsOnlyVideoFrameDecoderFactory.js.map +1 -0
- package/dist/modules/video/mediabunny/painter/CaptionsOverlayFramePainter.d.ts +9 -3
- package/dist/modules/video/mediabunny/painter/CaptionsOverlayFramePainter.d.ts.map +1 -1
- package/dist/modules/video/mediabunny/painter/CaptionsOverlayFramePainter.js +24 -7
- package/dist/modules/video/mediabunny/painter/CaptionsOverlayFramePainter.js.map +1 -1
- package/dist/modules/video/mediabunny/painter/FramePainter.d.ts +35 -14
- package/dist/modules/video/mediabunny/painter/FramePainter.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/modules/rendering/subtitle/AbstractAnim.d.ts +0 -13
- package/dist/modules/rendering/subtitle/AbstractAnim.d.ts.map +0 -1
- package/dist/modules/rendering/subtitle/AbstractAnim.js +0 -2
- package/dist/modules/rendering/subtitle/AbstractAnim.js.map +0 -1
- package/dist/modules/rendering/subtitle/AnimationProbe.d.ts +0 -39
- package/dist/modules/rendering/subtitle/AnimationProbe.d.ts.map +0 -1
- package/dist/modules/rendering/subtitle/AnimationProbe.js +0 -203
- package/dist/modules/rendering/subtitle/AnimationProbe.js.map +0 -1
- package/dist/modules/rendering/subtitle/SpriteSheetSizeProber.d.ts +0 -17
- package/dist/modules/rendering/subtitle/SpriteSheetSizeProber.d.ts.map +0 -1
- package/dist/modules/rendering/subtitle/SpriteSheetSizeProber.js +0 -58
- package/dist/modules/rendering/subtitle/SpriteSheetSizeProber.js.map +0 -1
- package/dist/modules/video/mediabunny/frame/CurrentFrameVideoSource.d.ts +0 -27
- package/dist/modules/video/mediabunny/frame/CurrentFrameVideoSource.d.ts.map +0 -1
- package/dist/modules/video/mediabunny/frame/CurrentFrameVideoSource.js +0 -84
- package/dist/modules/video/mediabunny/frame/CurrentFrameVideoSource.js.map +0 -1
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
import { CssVariable } from '../../document/CssVariable';
|
|
2
|
-
import { DataAttribute } from '../../document/DataAttribute';
|
|
3
|
-
import { Decoration } from '../../document/Decoration';
|
|
4
|
-
const FINGERPRINT_BASE_S = 10000;
|
|
5
|
-
/**
|
|
6
|
-
* Decides whether a render item should redraw every frame: builds
|
|
7
|
-
* throw-away DOM chains matching what the renderer emits, reads back
|
|
8
|
-
* resolved `animation-duration` / `animation-delay` from
|
|
9
|
-
* `getComputedStyle`, and decodes each timing back to the CSS
|
|
10
|
-
* variable that anchored its window. Caches per chain so the same one
|
|
11
|
-
* is probed at most once. `clear` empties the cache.
|
|
12
|
-
*
|
|
13
|
-
* A chain carries the element ids the renderer stamps as well as the
|
|
14
|
-
* classes, because a stylesheet can address one element rather than a
|
|
15
|
-
* class of them. Built from classes alone, the chain resolves a
|
|
16
|
-
* different animation than the node it stands for — none at all where
|
|
17
|
-
* only the element carries one, and the wrong window where the
|
|
18
|
-
* element's beats the template's. Either way the tile is reused across
|
|
19
|
-
* a frame that moved, and the animation exports as a still image.
|
|
20
|
-
*
|
|
21
|
-
* Only ids the stylesheet actually addresses go on, so a caption
|
|
22
|
-
* nobody has styled probes one chain per class combination as before.
|
|
23
|
-
*/
|
|
24
|
-
export class AnimationProbe {
|
|
25
|
-
timingByKey = new Map();
|
|
26
|
-
isItemAnimating(style, seg, t) {
|
|
27
|
-
// Letter-level CSS typically combines time vars via calc(), which
|
|
28
|
-
// destroys the fingerprint-based probe; treat the segment as
|
|
29
|
-
// always animating in that mode and redraw every frame.
|
|
30
|
-
if (style.rendering.splitWordsIntoLetters)
|
|
31
|
-
return true;
|
|
32
|
-
// Styles that bake the underlying video frame into their visuals
|
|
33
|
-
// change every tick by definition — no two timestamps share state.
|
|
34
|
-
if (style.rendering.videoFrame.required)
|
|
35
|
-
return true;
|
|
36
|
-
// Filter definitions whose materialized output can vary with
|
|
37
|
-
// `currentTime` likewise force per-frame redraw; conservatively
|
|
38
|
-
// treat any non-empty filter set as time-varying.
|
|
39
|
-
if (!style.filters.definitions.isEmpty())
|
|
40
|
-
return true;
|
|
41
|
-
const segment = this.probed(style, 'div', seg.getCssClasses(t), seg.id);
|
|
42
|
-
const segmentWindows = { segment: seg.time, line: null, word: null };
|
|
43
|
-
if (this.animates(style, [segment], t, segmentWindows))
|
|
44
|
-
return true;
|
|
45
|
-
return [...seg.lines].some((line) => {
|
|
46
|
-
const lineElement = this.probed(style, 'div', line.getCssClasses(t), line.id);
|
|
47
|
-
const lineWindows = { ...segmentWindows, line: line.time };
|
|
48
|
-
if (this.animates(style, [segment, lineElement], t, lineWindows))
|
|
49
|
-
return true;
|
|
50
|
-
return [...line.words].some((word) => {
|
|
51
|
-
const wordElement = this.probed(style, 'span', word.getCssClasses(t), word.id);
|
|
52
|
-
const wordChain = [segment, lineElement, wordElement];
|
|
53
|
-
if (this.animates(style, wordChain, t, { ...lineWindows, word: word.time }))
|
|
54
|
-
return true;
|
|
55
|
-
const decoration = word.decoration;
|
|
56
|
-
if (!decoration)
|
|
57
|
-
return false;
|
|
58
|
-
const decorationElement = this.probed(style, 'span', [Decoration.CSS_CLASS], decoration.id);
|
|
59
|
-
return this.animates(style, [...wordChain, decorationElement], t, { ...lineWindows, word: decoration.customTime ?? word.time });
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
clear() {
|
|
64
|
-
this.timingByKey.clear();
|
|
65
|
-
}
|
|
66
|
-
/** The element as the probe will build it, addressed only where the stylesheet says so. */
|
|
67
|
-
probed(style, tag, classes, elementId) {
|
|
68
|
-
return { tag, classes, elementId: style.addressableElementIds.has(elementId) ? elementId : null };
|
|
69
|
-
}
|
|
70
|
-
animates(style, chain, t, windows) {
|
|
71
|
-
return this.evalAnims(this.timingOf(style, chain), t, windows);
|
|
72
|
-
}
|
|
73
|
-
timingOf(style, chain) {
|
|
74
|
-
const key = `${style.kind}|${chain.map((element) => this.describe(element)).join('>')}`;
|
|
75
|
-
let timing = this.timingByKey.get(key);
|
|
76
|
-
if (!timing) {
|
|
77
|
-
timing = this.probeChain(style, chain);
|
|
78
|
-
this.timingByKey.set(key, timing);
|
|
79
|
-
}
|
|
80
|
-
return timing;
|
|
81
|
-
}
|
|
82
|
-
describe(element) {
|
|
83
|
-
return `${element.classes.join(' ')}#${element.elementId ?? ''}`;
|
|
84
|
-
}
|
|
85
|
-
/** Mounts the chain, reads what the leaf resolved to, and takes it back out. */
|
|
86
|
-
probeChain(style, chain) {
|
|
87
|
-
const nodes = chain.map((element) => this.createNode(element));
|
|
88
|
-
for (let index = 1; index < nodes.length; index++)
|
|
89
|
-
nodes[index - 1].appendChild(nodes[index]);
|
|
90
|
-
const root = nodes[0];
|
|
91
|
-
const leaf = nodes[nodes.length - 1];
|
|
92
|
-
this.injectProbeMagic(leaf);
|
|
93
|
-
style.probeContainer.appendChild(root);
|
|
94
|
-
const timing = this.readAnimTimings(leaf);
|
|
95
|
-
style.probeContainer.removeChild(root);
|
|
96
|
-
return timing;
|
|
97
|
-
}
|
|
98
|
-
createNode(element) {
|
|
99
|
-
const node = document.createElement(element.tag);
|
|
100
|
-
node.className = element.classes.join(' ');
|
|
101
|
-
if (element.elementId !== null)
|
|
102
|
-
node.setAttribute(DataAttribute.ELEMENT_ID, element.elementId);
|
|
103
|
-
return node;
|
|
104
|
-
}
|
|
105
|
-
// Each CssVariable gets a fingerprint-shaped duration value so the
|
|
106
|
-
// computed `animation-delay` on a probed element identifies which
|
|
107
|
-
// variable a rule consumed.
|
|
108
|
-
injectProbeMagic(el) {
|
|
109
|
-
Object.values(CssVariable).forEach((cssVar, index) => {
|
|
110
|
-
el.style.setProperty(cssVar, `${(index + 1) * FINGERPRINT_BASE_S}s`);
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
readAnimTimings(el) {
|
|
114
|
-
const computed = window.getComputedStyle(el);
|
|
115
|
-
const durations = this.parseDurationsS(computed.animationDuration);
|
|
116
|
-
const delays = this.parseDurationsS(computed.animationDelay);
|
|
117
|
-
const iterations = computed.animationIterationCount.split(',').map((s) => s.trim());
|
|
118
|
-
if (durations.every((d) => d === 0))
|
|
119
|
-
return [];
|
|
120
|
-
const anims = [];
|
|
121
|
-
const variables = Object.values(CssVariable);
|
|
122
|
-
for (let i = 0; i < durations.length; i++) {
|
|
123
|
-
const d = durations[i] ?? 0;
|
|
124
|
-
if (d === 0)
|
|
125
|
-
continue;
|
|
126
|
-
const dl = delays[i] ?? 0;
|
|
127
|
-
const fingerprintIndex = (dl / FINGERPRINT_BASE_S) - 1;
|
|
128
|
-
const cssVar = variables[fingerprintIndex];
|
|
129
|
-
if (!cssVar)
|
|
130
|
-
continue;
|
|
131
|
-
const isInfinite = (iterations[i] ?? '1') === 'infinite';
|
|
132
|
-
anims.push({ cssVar, durationS: isInfinite ? Infinity : d + 0.05 });
|
|
133
|
-
}
|
|
134
|
-
return anims;
|
|
135
|
-
}
|
|
136
|
-
parseDurationsS(value) {
|
|
137
|
-
if (!value)
|
|
138
|
-
return [0];
|
|
139
|
-
return value.split(',').map((s) => {
|
|
140
|
-
s = s.trim();
|
|
141
|
-
if (s.endsWith('ms'))
|
|
142
|
-
return parseFloat(s) / 1000;
|
|
143
|
-
if (s.endsWith('s'))
|
|
144
|
-
return parseFloat(s);
|
|
145
|
-
return 0;
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
evalAnims(anims, t, windows) {
|
|
149
|
-
const { segment } = windows;
|
|
150
|
-
const line = windows.line ?? segment;
|
|
151
|
-
const word = windows.word ?? segment;
|
|
152
|
-
return anims.some((a) => {
|
|
153
|
-
let startT;
|
|
154
|
-
switch (a.cssVar) {
|
|
155
|
-
case CssVariable.SEGMENT_STARTS:
|
|
156
|
-
startT = segment.start;
|
|
157
|
-
break;
|
|
158
|
-
case CssVariable.SEGMENT_ENDS:
|
|
159
|
-
startT = segment.end;
|
|
160
|
-
break;
|
|
161
|
-
case CssVariable.LINE_NOT_NARRATED_YET_STARTS:
|
|
162
|
-
startT = segment.start;
|
|
163
|
-
break;
|
|
164
|
-
case CssVariable.LINE_NOT_NARRATED_YET_ENDS:
|
|
165
|
-
startT = line.start;
|
|
166
|
-
break;
|
|
167
|
-
case CssVariable.LINE_BEING_NARRATED_STARTS:
|
|
168
|
-
startT = line.start;
|
|
169
|
-
break;
|
|
170
|
-
case CssVariable.LINE_BEING_NARRATED_ENDS:
|
|
171
|
-
startT = line.end;
|
|
172
|
-
break;
|
|
173
|
-
case CssVariable.LINE_ALREADY_NARRATED_STARTS:
|
|
174
|
-
startT = line.end;
|
|
175
|
-
break;
|
|
176
|
-
case CssVariable.LINE_ALREADY_NARRATED_ENDS:
|
|
177
|
-
startT = segment.end;
|
|
178
|
-
break;
|
|
179
|
-
case CssVariable.WORD_NOT_NARRATED_YET_STARTS:
|
|
180
|
-
startT = segment.start;
|
|
181
|
-
break;
|
|
182
|
-
case CssVariable.WORD_NOT_NARRATED_YET_ENDS:
|
|
183
|
-
startT = word.start;
|
|
184
|
-
break;
|
|
185
|
-
case CssVariable.WORD_BEING_NARRATED_STARTS:
|
|
186
|
-
startT = word.start;
|
|
187
|
-
break;
|
|
188
|
-
case CssVariable.WORD_BEING_NARRATED_ENDS:
|
|
189
|
-
startT = word.end;
|
|
190
|
-
break;
|
|
191
|
-
case CssVariable.WORD_ALREADY_NARRATED_STARTS:
|
|
192
|
-
startT = word.end;
|
|
193
|
-
break;
|
|
194
|
-
case CssVariable.WORD_ALREADY_NARRATED_ENDS:
|
|
195
|
-
startT = segment.end;
|
|
196
|
-
break;
|
|
197
|
-
default: return false;
|
|
198
|
-
}
|
|
199
|
-
return t >= startT && t < startT + a.durationS;
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
//# sourceMappingURL=AnimationProbe.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AnimationProbe.js","sourceRoot":"","sources":["../../../../src/modules/rendering/subtitle/AnimationProbe.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Empirically probes the maximum number of subtitle tiles that fit
|
|
3
|
-
* into a single sprite sheet at the given output dimensions without
|
|
4
|
-
* blowing past the host's 2D-canvas raster cap or the configured
|
|
5
|
-
* pixel budget. No public browser API surfaces the raster cap
|
|
6
|
-
* directly, and the reported WebGL limits bear no stable relation to
|
|
7
|
-
* what `img.decode` / `drawImage` accept. Some hosts decode oversize
|
|
8
|
-
* SVGs but blank the far edges of the raster; the probe reads back a
|
|
9
|
-
* corner pixel to detect that.
|
|
10
|
-
*/
|
|
11
|
-
export declare class SpriteSheetSizeProber {
|
|
12
|
-
private readonly maxBufferPixels;
|
|
13
|
-
constructor(maxBufferPixels?: number);
|
|
14
|
-
probe(width: number, height: number): Promise<number>;
|
|
15
|
-
private testTileSize;
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=SpriteSheetSizeProber.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SpriteSheetSizeProber.d.ts","sourceRoot":"","sources":["../../../../src/modules/rendering/subtitle/SpriteSheetSizeProber.ts"],"names":[],"mappings":"AAMA;;;;;;;;;GASG;AACH,qBAAa,qBAAqB;IAEpB,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAAf,eAAe,GAAE,MAAkC;IAE1E,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAiB7C,YAAY;CAgB3B"}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
const NUMBER_OF_TILES_TO_TEST = [1, 2, 4, 6, 8, 10, 12, 15, 18, 21, 25, 30];
|
|
2
|
-
// 10 frames at 1080×1920 ≈ 80 MB of pixel buffer.
|
|
3
|
-
// At 4K the same budget admits only ~2 tiles per batch.
|
|
4
|
-
const DEFAULT_MAX_BUFFER_PIXELS = 10 * 1080 * 1920;
|
|
5
|
-
/**
|
|
6
|
-
* Empirically probes the maximum number of subtitle tiles that fit
|
|
7
|
-
* into a single sprite sheet at the given output dimensions without
|
|
8
|
-
* blowing past the host's 2D-canvas raster cap or the configured
|
|
9
|
-
* pixel budget. No public browser API surfaces the raster cap
|
|
10
|
-
* directly, and the reported WebGL limits bear no stable relation to
|
|
11
|
-
* what `img.decode` / `drawImage` accept. Some hosts decode oversize
|
|
12
|
-
* SVGs but blank the far edges of the raster; the probe reads back a
|
|
13
|
-
* corner pixel to detect that.
|
|
14
|
-
*/
|
|
15
|
-
export class SpriteSheetSizeProber {
|
|
16
|
-
maxBufferPixels;
|
|
17
|
-
constructor(maxBufferPixels = DEFAULT_MAX_BUFFER_PIXELS) {
|
|
18
|
-
this.maxBufferPixels = maxBufferPixels;
|
|
19
|
-
}
|
|
20
|
-
async probe(width, height) {
|
|
21
|
-
try {
|
|
22
|
-
let lastPassing = 1;
|
|
23
|
-
for (const numberOfTiles of NUMBER_OF_TILES_TO_TEST) {
|
|
24
|
-
const isPortrait = width < height;
|
|
25
|
-
const scaledWidth = isPortrait ? width * numberOfTiles : width;
|
|
26
|
-
const scaledHeight = isPortrait ? height : height * numberOfTiles;
|
|
27
|
-
if (scaledWidth * scaledHeight > this.maxBufferPixels)
|
|
28
|
-
return lastPassing;
|
|
29
|
-
if (!(await this.testTileSize(scaledWidth, scaledHeight)))
|
|
30
|
-
return lastPassing;
|
|
31
|
-
lastPassing = numberOfTiles;
|
|
32
|
-
}
|
|
33
|
-
return lastPassing;
|
|
34
|
-
}
|
|
35
|
-
catch {
|
|
36
|
-
return 1;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
async testTileSize(width, height) {
|
|
40
|
-
const svg = `<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}"><rect width="100%" height="100%" fill="green"/><rect x="${width - 2}" y="${height - 2}" width="2" height="2" fill="red"/></svg>`;
|
|
41
|
-
const img = new Image();
|
|
42
|
-
img.src = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`;
|
|
43
|
-
try {
|
|
44
|
-
await img.decode();
|
|
45
|
-
const canvas = new OffscreenCanvas(width, height);
|
|
46
|
-
const ctx = canvas.getContext('2d');
|
|
47
|
-
if (!ctx)
|
|
48
|
-
return false;
|
|
49
|
-
ctx.drawImage(img, 0, 0);
|
|
50
|
-
const px = ctx.getImageData(width - 1, height - 1, 1, 1).data;
|
|
51
|
-
return px[0] > 200 && px[1] < 80 && px[2] < 80 && px[3] > 200;
|
|
52
|
-
}
|
|
53
|
-
catch {
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
//# sourceMappingURL=SpriteSheetSizeProber.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SpriteSheetSizeProber.js","sourceRoot":"","sources":["../../../../src/modules/rendering/subtitle/SpriteSheetSizeProber.ts"],"names":[],"mappings":"AAAA,MAAM,uBAAuB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAE5E,kDAAkD;AAClD,wDAAwD;AACxD,MAAM,yBAAyB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAEnD;;;;;;;;;GASG;AACH,MAAM,OAAO,qBAAqB;IAEH;IAA7B,YAA6B,kBAA0B,yBAAyB;QAAnD,oBAAe,GAAf,eAAe,CAAoC;IAAG,CAAC;IAEpF,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,MAAc;QACvC,IAAI,CAAC;YACH,IAAI,WAAW,GAAG,CAAC,CAAC;YACpB,KAAK,MAAM,aAAa,IAAI,uBAAuB,EAAE,CAAC;gBACpD,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,CAAC;gBAClC,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC/D,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,aAAa,CAAC;gBAClE,IAAI,WAAW,GAAG,YAAY,GAAG,IAAI,CAAC,eAAe;oBAAE,OAAO,WAAW,CAAC;gBAC1E,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;oBAAE,OAAO,WAAW,CAAC;gBAC9E,WAAW,GAAG,aAAa,CAAC;YAC9B,CAAC;YACD,OAAO,WAAW,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,MAAc;QACtD,MAAM,GAAG,GAAG,kDAAkD,KAAK,aAAa,MAAM,6DAA6D,KAAK,GAAG,CAAC,QAAQ,MAAM,GAAG,CAAC,2CAA2C,CAAC;QAC1N,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,GAAG,CAAC,GAAG,GAAG,oCAAoC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;QACxE,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAClD,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC,GAAG;gBAAE,OAAO,KAAK,CAAC;YACvB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACzB,MAAM,EAAE,GAAG,GAAG,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAC9D,OAAO,EAAE,CAAC,CAAC,CAAE,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,CAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAE,GAAG,GAAG,CAAC;QACpE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import type { VideoFrameSource, VideoFrameRegion } from '../../../rendering/types/VideoFrameSource';
|
|
2
|
-
import type { DecodedVideoFrame } from '../../../video/mediabunny/frame/VideoFrameDecoder';
|
|
3
|
-
/**
|
|
4
|
-
* Single-slot `VideoFrameSource`. {@link setCurrent} stores one
|
|
5
|
-
* decoded frame at a timestamp; {@link getFrameAt} serves only that
|
|
6
|
-
* frame and only at that same timestamp. Querying any other
|
|
7
|
-
* timestamp throws.
|
|
8
|
-
*/
|
|
9
|
-
export declare class CurrentFrameVideoSource implements VideoFrameSource {
|
|
10
|
-
private static readonly TIMESTAMP_TOLERANCE_S;
|
|
11
|
-
private readonly canvas;
|
|
12
|
-
private readonly ctx;
|
|
13
|
-
private currentTimestamp;
|
|
14
|
-
constructor(width: number, height: number);
|
|
15
|
-
/**
|
|
16
|
-
* Stores `frame` as the only frame `getFrameAt` will serve until
|
|
17
|
-
* the next `setCurrent`, keyed on `timestamp`.
|
|
18
|
-
*/
|
|
19
|
-
setCurrent(timestamp: number, frame: DecodedVideoFrame): void;
|
|
20
|
-
getFrameAt(timeSeconds: number, jpegQuality: number, region?: VideoFrameRegion): Promise<string>;
|
|
21
|
-
private encode;
|
|
22
|
-
private cropTo;
|
|
23
|
-
private encodeJpeg;
|
|
24
|
-
private createCanvas;
|
|
25
|
-
private clipToCanvas;
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=CurrentFrameVideoSource.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CurrentFrameVideoSource.d.ts","sourceRoot":"","sources":["../../../../../src/modules/video/mediabunny/frame/CurrentFrameVideoSource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AACpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mDAAmD,CAAC;AAG3F;;;;;GAKG;AACH,qBAAa,uBAAwB,YAAW,gBAAgB;IAI9D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAQ;IAErD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA2B;IAC/C,OAAO,CAAC,gBAAgB,CAAuB;gBAEnC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IASzC;;;OAGG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAOvD,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAatG,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,MAAM;IA4Bd,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,YAAY;CAOrB"}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { profiler } from '../../../profiling/Profiler';
|
|
2
|
-
/**
|
|
3
|
-
* Single-slot `VideoFrameSource`. {@link setCurrent} stores one
|
|
4
|
-
* decoded frame at a timestamp; {@link getFrameAt} serves only that
|
|
5
|
-
* frame and only at that same timestamp. Querying any other
|
|
6
|
-
* timestamp throws.
|
|
7
|
-
*/
|
|
8
|
-
export class CurrentFrameVideoSource {
|
|
9
|
-
// Any mismatch beyond IEEE-754 noise is a coordination bug between
|
|
10
|
-
// the producer and the subtitle renderer.
|
|
11
|
-
static TIMESTAMP_TOLERANCE_S = 1e-6;
|
|
12
|
-
canvas;
|
|
13
|
-
ctx;
|
|
14
|
-
currentTimestamp = null;
|
|
15
|
-
constructor(width, height) {
|
|
16
|
-
this.canvas = this.createCanvas(width, height);
|
|
17
|
-
const ctx = this.canvas.getContext('2d');
|
|
18
|
-
if (!ctx) {
|
|
19
|
-
throw new Error('Canvas 2D context is not available in this environment.');
|
|
20
|
-
}
|
|
21
|
-
this.ctx = ctx;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Stores `frame` as the only frame `getFrameAt` will serve until
|
|
25
|
-
* the next `setCurrent`, keyed on `timestamp`.
|
|
26
|
-
*/
|
|
27
|
-
setCurrent(timestamp, frame) {
|
|
28
|
-
this.currentTimestamp = timestamp;
|
|
29
|
-
profiler.time('CurrentFrameVideoSource.draw', () => frame.draw(this.ctx, 0, 0, this.canvas.width, this.canvas.height));
|
|
30
|
-
}
|
|
31
|
-
async getFrameAt(timeSeconds, jpegQuality, region) {
|
|
32
|
-
if (this.currentTimestamp === null) {
|
|
33
|
-
throw new Error('CurrentFrameVideoSource.getFrameAt called before any setCurrent.');
|
|
34
|
-
}
|
|
35
|
-
if (Math.abs(this.currentTimestamp - timeSeconds) > CurrentFrameVideoSource.TIMESTAMP_TOLERANCE_S) {
|
|
36
|
-
throw new Error(`CurrentFrameVideoSource: requested timestamp ${timeSeconds}, ` +
|
|
37
|
-
`but the current slot holds ${this.currentTimestamp}.`);
|
|
38
|
-
}
|
|
39
|
-
return profiler.time('CurrentFrameVideoSource.encode', () => this.encode(region, jpegQuality));
|
|
40
|
-
}
|
|
41
|
-
encode(region, jpegQuality) {
|
|
42
|
-
const clipped = region ? this.clipToCanvas(region) : null;
|
|
43
|
-
if (!clipped || clipped.width === 0 || clipped.height === 0) {
|
|
44
|
-
return this.encodeJpeg(this.canvas, jpegQuality);
|
|
45
|
-
}
|
|
46
|
-
return this.encodeJpeg(this.cropTo(clipped), jpegQuality);
|
|
47
|
-
}
|
|
48
|
-
cropTo(clipped) {
|
|
49
|
-
const cropCanvas = this.createCanvas(clipped.width, clipped.height);
|
|
50
|
-
const cropCtx = profiler.time('CurrentFrameVideoSource.cropCanvasContext', () => cropCanvas.getContext('2d'));
|
|
51
|
-
if (!cropCtx) {
|
|
52
|
-
throw new Error('Canvas 2D context is not available for cropping.');
|
|
53
|
-
}
|
|
54
|
-
profiler.time('CurrentFrameVideoSource.cropDraw', () => cropCtx.drawImage(this.canvas, clipped.x, clipped.y, clipped.width, clipped.height, 0, 0, clipped.width, clipped.height));
|
|
55
|
-
return cropCanvas;
|
|
56
|
-
}
|
|
57
|
-
// Chosen for predictability over raw speed. `toDataURL` encodes inline;
|
|
58
|
-
// `OffscreenCanvas.convertToBlob` defers to the browser's async image
|
|
59
|
-
// scheduler, which was measured taking ~1s per call instead of the usual
|
|
60
|
-
// few ms, under a load that could not be pinned down or reproduced.
|
|
61
|
-
// Output is byte-identical between the two on Chrome and Firefox, and the
|
|
62
|
-
// async overhead is per-call rather than per-pixel, so the two only differ
|
|
63
|
-
// meaningfully at small crop sizes. The tradeoff accepted here is that
|
|
64
|
-
// encoding inline blocks the main thread for the whole encode, and that a
|
|
65
|
-
// DOM canvas rules out ever running this step in a Worker.
|
|
66
|
-
// Benchmarked in experiments/jpeg-encode-apis/.
|
|
67
|
-
encodeJpeg(canvas, jpegQuality) {
|
|
68
|
-
return profiler.time('CurrentFrameVideoSource.encodeJpeg', () => canvas.toDataURL('image/jpeg', jpegQuality));
|
|
69
|
-
}
|
|
70
|
-
createCanvas(width, height) {
|
|
71
|
-
const canvas = document.createElement('canvas');
|
|
72
|
-
canvas.width = width;
|
|
73
|
-
canvas.height = height;
|
|
74
|
-
return canvas;
|
|
75
|
-
}
|
|
76
|
-
clipToCanvas(region) {
|
|
77
|
-
const x = Math.max(0, Math.floor(region.x));
|
|
78
|
-
const y = Math.max(0, Math.floor(region.y));
|
|
79
|
-
const right = Math.min(this.canvas.width, Math.ceil(region.x + region.width));
|
|
80
|
-
const bottom = Math.min(this.canvas.height, Math.ceil(region.y + region.height));
|
|
81
|
-
return { x, y, width: Math.max(0, right - x), height: Math.max(0, bottom - y) };
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
//# sourceMappingURL=CurrentFrameVideoSource.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CurrentFrameVideoSource.js","sourceRoot":"","sources":["../../../../../src/modules/video/mediabunny/frame/CurrentFrameVideoSource.ts"],"names":[],"mappings":"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"}
|