supervision 0.2.5 → 0.2.7
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/dist/depth-preview-probe-DG7McQEN.js +314 -0
- package/dist/depth-preview-probe-DG7McQEN.js.map +1 -0
- package/dist/depth-preview-track-BvgwNEE9.js +612 -0
- package/dist/depth-preview-track-BvgwNEE9.js.map +1 -0
- package/dist/detections/chunked-detection-frame-source.d.ts.map +1 -1
- package/dist/editing.d.ts +1 -1
- package/dist/editing.d.ts.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9845 -4759
- package/dist/index.js.map +1 -1
- package/dist/mask-preparation.worker.js +788 -25
- package/dist/mask-preparation.worker.js.map +1 -1
- package/dist/media/decoder-deadline.d.ts +18 -0
- package/dist/media/decoder-deadline.d.ts.map +1 -0
- package/dist/media/depth-preview-probe.d.ts +65 -0
- package/dist/media/depth-preview-probe.d.ts.map +1 -0
- package/dist/media/depth-preview-track.d.ts +96 -0
- package/dist/media/depth-preview-track.d.ts.map +1 -0
- package/dist/media/media-normalization.d.ts.map +1 -1
- package/dist/media/media-source.d.ts +7 -0
- package/dist/media/media-source.d.ts.map +1 -1
- package/dist/media/mediabunny-frame-clock.d.ts +7 -0
- package/dist/media/mediabunny-frame-clock.d.ts.map +1 -0
- package/dist/media/mediabunny-media-source.d.ts +3 -0
- package/dist/media/mediabunny-media-source.d.ts.map +1 -1
- package/dist/media/track-frame-index.d.ts +14 -0
- package/dist/media/track-frame-index.d.ts.map +1 -0
- package/dist/media/video-engine-media-source.d.ts.map +1 -1
- package/dist/media/video-engine-media-source.js +1 -1
- package/dist/render-preparation/depth/clip-preview.d.ts +41 -0
- package/dist/render-preparation/depth/clip-preview.d.ts.map +1 -0
- package/dist/render-preparation/depth/clip-timing.d.ts +18 -0
- package/dist/render-preparation/depth/clip-timing.d.ts.map +1 -0
- package/dist/render-preparation/depth/clip.d.ts +14 -0
- package/dist/render-preparation/depth/clip.d.ts.map +1 -0
- package/dist/render-preparation/depth/exact-at-rest.d.ts +44 -0
- package/dist/render-preparation/depth/exact-at-rest.d.ts.map +1 -0
- package/dist/render-preparation/depth/exact-playback.d.ts +40 -0
- package/dist/render-preparation/depth/exact-playback.d.ts.map +1 -0
- package/dist/render-preparation/depth/files.d.ts +55 -0
- package/dist/render-preparation/depth/files.d.ts.map +1 -0
- package/dist/render-preparation/depth/frame-decode.d.ts +20 -0
- package/dist/render-preparation/depth/frame-decode.d.ts.map +1 -0
- package/dist/render-preparation/depth/frame-preparer.d.ts +51 -0
- package/dist/render-preparation/depth/frame-preparer.d.ts.map +1 -0
- package/dist/render-preparation/depth/frame-window.d.ts +146 -0
- package/dist/render-preparation/depth/frame-window.d.ts.map +1 -0
- package/dist/render-preparation/depth/options.d.ts +37 -0
- package/dist/render-preparation/depth/options.d.ts.map +1 -0
- package/dist/render-preparation/depth/png16.d.ts +40 -0
- package/dist/render-preparation/depth/png16.d.ts.map +1 -0
- package/dist/render-preparation/depth/preview-luma-copier.d.ts +12 -0
- package/dist/render-preparation/depth/preview-luma-copier.d.ts.map +1 -0
- package/dist/render-preparation/depth/preview-luma.d.ts +48 -0
- package/dist/render-preparation/depth/preview-luma.d.ts.map +1 -0
- package/dist/render-preparation/depth/source.d.ts +123 -0
- package/dist/render-preparation/depth/source.d.ts.map +1 -0
- package/dist/render-preparation/depth/worker-protocol.d.ts +76 -0
- package/dist/render-preparation/depth/worker-protocol.d.ts.map +1 -0
- package/dist/render-preparation/mask-frame-artifact.d.ts +10 -0
- package/dist/render-preparation/mask-frame-artifact.d.ts.map +1 -1
- package/dist/render-preparation/mask-frame-compositor.d.ts +2 -1
- package/dist/render-preparation/mask-frame-compositor.d.ts.map +1 -1
- package/dist/render-preparation/mask-frame-preparer.d.ts.map +1 -1
- package/dist/render-preparation/mask-outline-paths.d.ts +3 -0
- package/dist/render-preparation/mask-outline-paths.d.ts.map +1 -0
- package/dist/render-preparation/mask-preparation-worker-protocol.d.ts +2 -1
- package/dist/render-preparation/mask-preparation-worker-protocol.d.ts.map +1 -1
- package/dist/render-preparation/playhead-motion.d.ts +67 -0
- package/dist/render-preparation/playhead-motion.d.ts.map +1 -0
- package/dist/render-preparation/prepared-render-window.d.ts +12 -0
- package/dist/render-preparation/prepared-render-window.d.ts.map +1 -1
- package/dist/renderers/depth-textures.d.ts +79 -0
- package/dist/renderers/depth-textures.d.ts.map +1 -0
- package/dist/renderers/detection-render-order.d.ts +4 -0
- package/dist/renderers/detection-render-order.d.ts.map +1 -0
- package/dist/renderers/id-mask-stroke-coverage.d.ts +3 -0
- package/dist/renderers/id-mask-stroke-coverage.d.ts.map +1 -0
- package/dist/renderers/media-renderer-core.d.ts.map +1 -1
- package/dist/renderers/media-renderer-scene.d.ts +16 -2
- package/dist/renderers/media-renderer-scene.d.ts.map +1 -1
- package/dist/renderers/pixi-batch-texture-bindings.d.ts +9 -0
- package/dist/renderers/pixi-batch-texture-bindings.d.ts.map +1 -0
- package/dist/renderers/pixi-box-layer.d.ts +1 -0
- package/dist/renderers/pixi-box-layer.d.ts.map +1 -1
- package/dist/renderers/pixi-depth-layer.d.ts +76 -0
- package/dist/renderers/pixi-depth-layer.d.ts.map +1 -0
- package/dist/renderers/pixi-depth-shader.d.ts +76 -0
- package/dist/renderers/pixi-depth-shader.d.ts.map +1 -0
- package/dist/renderers/pixi-focus-layer.d.ts +1 -0
- package/dist/renderers/pixi-focus-layer.d.ts.map +1 -1
- package/dist/renderers/pixi-frame-present.d.ts +1 -0
- package/dist/renderers/pixi-frame-present.d.ts.map +1 -1
- package/dist/renderers/pixi-id-mask-shader.d.ts +1 -0
- package/dist/renderers/pixi-id-mask-shader.d.ts.map +1 -1
- package/dist/renderers/pixi-interaction-layer.d.ts +1 -1
- package/dist/renderers/pixi-interaction-layer.d.ts.map +1 -1
- package/dist/renderers/pixi-interaction-presentation-layer.d.ts +1 -0
- package/dist/renderers/pixi-interaction-presentation-layer.d.ts.map +1 -1
- package/dist/renderers/pixi-mask-brush-preview.d.ts.map +1 -1
- package/dist/renderers/pixi-mask-halo.d.ts +1 -0
- package/dist/renderers/pixi-mask-halo.d.ts.map +1 -1
- package/dist/renderers/pixi-mask-layer.d.ts +8 -2
- package/dist/renderers/pixi-mask-layer.d.ts.map +1 -1
- package/dist/renderers/pixi-mask-screen-stroke.d.ts +17 -0
- package/dist/renderers/pixi-mask-screen-stroke.d.ts.map +1 -0
- package/dist/renderers/pixi-media-scene.d.ts.map +1 -1
- package/dist/renderers/pixi-region-coverage-mask.d.ts +1 -0
- package/dist/renderers/pixi-region-coverage-mask.d.ts.map +1 -1
- package/dist/renderers/pixi-region-layer.d.ts +1 -0
- package/dist/renderers/pixi-region-layer.d.ts.map +1 -1
- package/dist/renderers/pixi-scene-layer-slot.d.ts +1 -0
- package/dist/renderers/pixi-scene-layer-slot.d.ts.map +1 -1
- package/dist/renderers/pixi-vector-layer.d.ts +1 -0
- package/dist/renderers/pixi-vector-layer.d.ts.map +1 -1
- package/dist/renderers/prepared-annotation-window.d.ts +1 -0
- package/dist/renderers/prepared-annotation-window.d.ts.map +1 -1
- package/dist/renderers/render-preparation-report.d.ts +23 -0
- package/dist/renderers/render-preparation-report.d.ts.map +1 -0
- package/dist/sessions/media-session-defaults.d.ts.map +1 -1
- package/dist/sessions/media-session-state.d.ts.map +1 -1
- package/dist/sessions/media-session.d.ts.map +1 -1
- package/dist/tracking.worker.js +64 -0
- package/dist/tracking.worker.js.map +1 -1
- package/dist/types/media-depth.d.ts +55 -0
- package/dist/types/media-depth.d.ts.map +1 -0
- package/dist/types/media-renderer.d.ts +33 -0
- package/dist/types/media-renderer.d.ts.map +1 -1
- package/dist/types/media-session.d.ts +21 -0
- package/dist/types/media-session.d.ts.map +1 -1
- package/dist/types/render-preparation.d.ts +105 -3
- package/dist/types/render-preparation.d.ts.map +1 -1
- package/dist/{video-engine-media-source-DR-x1UfK.js → video-engine-media-source-DOFsuGS4.js} +35 -29
- package/dist/video-engine-media-source-DOFsuGS4.js.map +1 -0
- package/dist/web-video-engine/analysis.js +6 -43
- package/dist/web-video-engine/cache-budget.d.ts +4 -7
- package/dist/web-video-engine/constants.d.ts +3 -4
- package/dist/web-video-engine/create-scrub-cursor.d.ts +1 -0
- package/dist/web-video-engine/decode-resolution-fynpRIAG.js +109 -0
- package/dist/web-video-engine/decode-scheduler.d.ts +1 -0
- package/dist/web-video-engine/engine-core.d.ts +4 -2
- package/dist/web-video-engine/engine.js +8 -6
- package/dist/web-video-engine/engine.worker.js +164 -66
- package/dist/web-video-engine/frame-cache.d.ts +9 -0
- package/dist/web-video-engine/frame-index.d.ts +1 -0
- package/dist/web-video-engine/frame-index.js +97 -0
- package/dist/web-video-engine/{frame-timeline-DreEwsRY.js → frame-timeline-CYgzzmpA.js} +1 -109
- package/dist/web-video-engine/frame-timeline-reader.d.ts +21 -0
- package/dist/web-video-engine/video-engine.d.ts +9 -4
- package/node_modules/supervision-js-core/THIRD_PARTY_NOTICES.md +132 -0
- package/node_modules/supervision-js-core/dist/detections/buffered-detection-timeline.d.ts.map +1 -1
- package/node_modules/supervision-js-core/dist/index.d.ts +8 -3
- package/node_modules/supervision-js-core/dist/index.d.ts.map +1 -1
- package/node_modules/supervision-js-core/dist/index.js +1172 -70
- package/node_modules/supervision-js-core/dist/index.js.map +1 -1
- package/node_modules/supervision-js-core/dist/interactions/annotation-editing-engine.d.ts +2 -2
- package/node_modules/supervision-js-core/dist/interactions/annotation-editing-engine.d.ts.map +1 -1
- package/node_modules/supervision-js-core/dist/interactions/annotation-handles.d.ts +2 -2
- package/node_modules/supervision-js-core/dist/interactions/annotation-handles.d.ts.map +1 -1
- package/node_modules/supervision-js-core/dist/interactions/detection-picker.d.ts.map +1 -1
- package/node_modules/supervision-js-core/dist/interactions/viewport-controller.d.ts.map +1 -1
- package/node_modules/supervision-js-core/dist/styles/annotation-renderer-presentation.d.ts.map +1 -1
- package/node_modules/supervision-js-core/dist/styles/annotation-renderer-registry.d.ts.map +1 -1
- package/node_modules/supervision-js-core/dist/types/annotation-renderer.d.ts +50 -3
- package/node_modules/supervision-js-core/dist/types/annotation-renderer.d.ts.map +1 -1
- package/node_modules/supervision-js-core/dist/types/depth-map.d.ts +203 -0
- package/node_modules/supervision-js-core/dist/types/depth-map.d.ts.map +1 -0
- package/node_modules/supervision-js-core/dist/types/detections.d.ts +2 -1
- package/node_modules/supervision-js-core/dist/types/detections.d.ts.map +1 -1
- package/node_modules/supervision-js-core/dist/types/editing.d.ts +9 -0
- package/node_modules/supervision-js-core/dist/types/editing.d.ts.map +1 -1
- package/node_modules/supervision-js-core/dist/types/interaction.d.ts +4 -0
- package/node_modules/supervision-js-core/dist/types/interaction.d.ts.map +1 -1
- package/node_modules/supervision-js-core/dist/types/mask-style.d.ts +3 -0
- package/node_modules/supervision-js-core/dist/types/mask-style.d.ts.map +1 -1
- package/node_modules/supervision-js-core/dist/types/media-rendering.d.ts +3 -0
- package/node_modules/supervision-js-core/dist/types/media-rendering.d.ts.map +1 -1
- package/node_modules/supervision-js-core/dist/types/viewport.d.ts +3 -0
- package/node_modules/supervision-js-core/dist/types/viewport.d.ts.map +1 -1
- package/node_modules/supervision-js-core/dist/utils/depth-color-mapping.d.ts +91 -0
- package/node_modules/supervision-js-core/dist/utils/depth-color-mapping.d.ts.map +1 -0
- package/node_modules/supervision-js-core/dist/utils/depth-colormap-tables.d.ts +30 -0
- package/node_modules/supervision-js-core/dist/utils/depth-colormap-tables.d.ts.map +1 -0
- package/node_modules/supervision-js-core/dist/utils/depth-colormaps.d.ts +16 -0
- package/node_modules/supervision-js-core/dist/utils/depth-colormaps.d.ts.map +1 -0
- package/node_modules/supervision-js-core/dist/utils/depth-manifest.d.ts +23 -0
- package/node_modules/supervision-js-core/dist/utils/depth-manifest.d.ts.map +1 -0
- package/node_modules/supervision-js-core/dist/utils/depth-readout.d.ts +14 -0
- package/node_modules/supervision-js-core/dist/utils/depth-readout.d.ts.map +1 -0
- package/node_modules/supervision-js-core/dist/utils/detection-frames.d.ts +21 -0
- package/node_modules/supervision-js-core/dist/utils/detection-frames.d.ts.map +1 -1
- package/node_modules/supervision-js-core/dist/utils/id-mask-frame.d.ts +3 -7
- package/node_modules/supervision-js-core/dist/utils/id-mask-frame.d.ts.map +1 -1
- package/node_modules/supervision-js-core/package.json +2 -1
- package/package.json +6 -1
- package/dist/video-engine-media-source-DR-x1UfK.js.map +0 -1
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import { o as openDepthPreviewTrack, w as withinDecoderDeadline, D as DECODER_SUPPORT_MILLISECONDS } from './depth-preview-track-BvgwNEE9.js';
|
|
2
|
+
import 'supervision-js-core';
|
|
3
|
+
import './video-engine-media-source-DOFsuGS4.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Every 8-bit code from 0 to 255 as a flat 16x16 block of one 256x256 frame
|
|
7
|
+
* (code c at block row c >> 4, column c & 15), with neutral chroma, two
|
|
8
|
+
* frames. It is encoded the way a depth producer writes a full-range
|
|
9
|
+
* preview, only at a quantiser low enough that a flat block decodes exactly:
|
|
10
|
+
*
|
|
11
|
+
* ```sh
|
|
12
|
+
* ffmpeg -f rawvideo -pix_fmt yuv420p -s 256x256 -r 24 -i ramp.yuv \
|
|
13
|
+
* -c:v libx264 -preset medium -tune psnr -qp 2 -g 24 -keyint_min 24 \
|
|
14
|
+
* -sc_threshold 0 \
|
|
15
|
+
* -bsf:v "h264_metadata=video_full_range_flag=1,filter_units=remove_types=6" \
|
|
16
|
+
* -movflags +faststart -map_metadata -1 -fflags +bitexact \
|
|
17
|
+
* -flags:v +bitexact probe.mp4
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* ffmpeg's own decoder returns every block exactly.
|
|
21
|
+
*/
|
|
22
|
+
const PROBE_MP4_BASE64 = [
|
|
23
|
+
"AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAL8bW9vdgAAAGxtdmhkAAAAAAAA",
|
|
24
|
+
"AAAAAAAAAAAD6AAAAFQAAQAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAA",
|
|
25
|
+
"AAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAkt0cmFrAAAAXHRr",
|
|
26
|
+
"aGQAAAADAAAAAAAAAAAAAAABAAAAAAAAAFQAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA",
|
|
27
|
+
"AAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAQAAAAEAAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAA",
|
|
28
|
+
"AAEAAABUAAAAAAABAAAAAAHDbWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAAwAAAABABVxAAA",
|
|
29
|
+
"AAAALWhkbHIAAAAAAAAAAHZpZGUAAAAAAAAAAAAAAABWaWRlb0hhbmRsZXIAAAABbm1pbmYA",
|
|
30
|
+
"AAAUdm1oZAAAAAEAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAA",
|
|
31
|
+
"AQAAAS5zdGJsAAAArnN0c2QAAAAAAAAAAQAAAJ5hdmMxAAAAAAAAAAEAAAAAAAAAAAAAAAAA",
|
|
32
|
+
"AAAAAQABAABIAAAASAAAAAAAAAABDExhdmMgbGlieDI2NAAAAAAAAAAAAAAAAAAAAAAAAAAA",
|
|
33
|
+
"GP//AAAANGF2Y0MBZAAN/+EAGGdkAA2s2UEAhpsgAAADACAAAAYB4oUywAEABWjr4GPL/fj4",
|
|
34
|
+
"AAAAABRidHJ0AAAAAAAAjQAAAAAAAAAAGHN0dHMAAAAAAAAAAQAAAAIAAAIAAAAAFHN0c3MA",
|
|
35
|
+
"AAAAAAAAAQAAAAEAAAAcc3RzYwAAAAAAAAABAAAAAQAAAAIAAAABAAAAHHN0c3oAAAAAAAAA",
|
|
36
|
+
"AAAAAAIAAAFoAAAAEAAAABRzdGNvAAAAAAAAAAEAAAMsAAAAPXVkdGEAAAA1bWV0YQAAAAAA",
|
|
37
|
+
"AAAhaGRscgAAAAAAAAAAbWRpcmFwcGwAAAAAAAAAAAAAAAAIaWxzdAAAAAhmcmVlAAABgG1k",
|
|
38
|
+
"YXQAAAFkZYiEAKv+99S3zLLwRH61UXVMoOUfJ2IoyzZhkK0M2aCbq+RlNHkN8HbZEszwr1Bo",
|
|
39
|
+
"EQabpJoiELEi/DUJIZR8VFdLAwnzJPmenpFznALFwOAa3CUmo3Wm8orkdX/5S83y+L4wR2WP",
|
|
40
|
+
"m8Tp9N/jcn8kKaHtW3x1rNMH7Gc3GMC5w8IZSZdG3nNwTS3OL2b/5ox9w1Tu5w7l9U7hwTtJ",
|
|
41
|
+
"zDO6fxrHDTqNAhwB7hjlAcy9s3lR97zTanfcTfaAMDPsy6uEnZx26jYjLoCg8G0iSNFqnWKu",
|
|
42
|
+
"pU4Quc/3qPD0hIbjaDTq1zXRYr2ZbIW+POv3MoI4ae2lsuhEcYK1wiS1GSCuMwtYU77ib+4u",
|
|
43
|
+
"Oy3qZpnBieWR67ec8BkQQAD3DHKA5l7ZvKj73meUXYDcJDcbQadWua6LFezLZC3x51+5ljHD",
|
|
44
|
+
"T20tl0IjjBWuESWoyQVxmFsSnfcTf3Fx2W9TNM4MTyyPXbznu4EAAAAMQZohbGv+1qVQAAXE",
|
|
45
|
+
].join("");
|
|
46
|
+
/**
|
|
47
|
+
* The same 256 blocks written as a TV-range preview is: flagged limited
|
|
48
|
+
* range with BT.709 colour, from the same `ramp.yuv`:
|
|
49
|
+
*
|
|
50
|
+
* ```sh
|
|
51
|
+
* TV="-color_range tv -colorspace bt709 -color_primaries bt709 -color_trc bt709"
|
|
52
|
+
* ffmpeg -f rawvideo -pix_fmt yuv420p $TV -s 256x256 -r 24 -i ramp.yuv \
|
|
53
|
+
* -c:v libx264 -preset medium -tune psnr -qp 2 -g 24 -keyint_min 24 \
|
|
54
|
+
* -sc_threshold 0 $TV \
|
|
55
|
+
* -bsf:v "h264_metadata=video_full_range_flag=0,filter_units=remove_types=6" \
|
|
56
|
+
* -movflags +faststart -map_metadata -1 -fflags +bitexact \
|
|
57
|
+
* -flags:v +bitexact probe-tv.mp4
|
|
58
|
+
* ```
|
|
59
|
+
*
|
|
60
|
+
* ffmpeg's own decoder returns every block exactly, footroom and headroom
|
|
61
|
+
* included.
|
|
62
|
+
*/
|
|
63
|
+
const TV_PROBE_MP4_BASE64 = [
|
|
64
|
+
"AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAMSbW9vdgAAAGxtdmhkAAAAAAAA",
|
|
65
|
+
"AAAAAAAAAAAD6AAAAFQAAQAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAA",
|
|
66
|
+
"AAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAmF0cmFrAAAAXHRr",
|
|
67
|
+
"aGQAAAADAAAAAAAAAAAAAAABAAAAAAAAAFQAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA",
|
|
68
|
+
"AAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAQAAAAEAAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAA",
|
|
69
|
+
"AAEAAABUAAAAAAABAAAAAAHZbWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAAwAAAABABVxAAA",
|
|
70
|
+
"AAAALWhkbHIAAAAAAAAAAHZpZGUAAAAAAAAAAAAAAABWaWRlb0hhbmRsZXIAAAABhG1pbmYA",
|
|
71
|
+
"AAAUdm1oZAAAAAEAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAA",
|
|
72
|
+
"AQAAAURzdGJsAAAAxHN0c2QAAAAAAAAAAQAAALRhdmMxAAAAAAAAAAEAAAAAAAAAAAAAAAAA",
|
|
73
|
+
"AAAAAQABAABIAAAASAAAAAAAAAABDExhdmMgbGlieDI2NAAAAAAAAAAAAAAAAAAAAAAAAAAA",
|
|
74
|
+
"GP//AAAAN2F2Y0MBZAAN/+EAG2dkAA2s2UEAhpqAgICgAAADACAAAAYB4oUywAEABWjr4GPL",
|
|
75
|
+
"/fj4AAAAABNjb2xybmNseAABAAEAAQAAAAAUYnRydAAAAAAAAI0AAAAAAAAAABhzdHRzAAAA",
|
|
76
|
+
"AAAAAAEAAAACAAACAAAAABRzdHNzAAAAAAAAAAEAAAABAAAAHHN0c2MAAAAAAAAAAQAAAAEA",
|
|
77
|
+
"AAACAAAAAQAAABxzdHN6AAAAAAAAAAAAAAACAAABaAAAABAAAAAUc3RjbwAAAAAAAAABAAAD",
|
|
78
|
+
"QgAAAD11ZHRhAAAANW1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAA",
|
|
79
|
+
"AAAACGlsc3QAAAAIZnJlZQAAAYBtZGF0AAABZGWIhACr/vfUt8yy8ER+tVF1TKDlHydiKMs2",
|
|
80
|
+
"YZCtDNmgm6vkZTR5DfB22RLM8K9QaBEGm6SaIhCxIvw1CSGUfFRXSwMJ8yT5np6Rc5wCxcDg",
|
|
81
|
+
"GtwlJqN1pvKK5HV/+UvN8vi+MEdlj5vE6fTf43J/JCmh7Vt8dazTB+xnNxjAucPCGUmXRt5z",
|
|
82
|
+
"cE0tzi9m/+aMfcNU7ucO5fVO4cE7Scwzun8axw06jQIcAe4Y5QHMvbN5Ufe802p33E32gDAz",
|
|
83
|
+
"7MurhJ2cduo2Iy6AoPBtIkjRap1irqVOELnP96jw9ISG42g06tc10WK9mWyFvjzr9zKCOGnt",
|
|
84
|
+
"pbLoRHGCtcIktRkgrjMLWFO+4m/uLjst6maZwYnlkeu3nPAZEEAA9wxygOZe2byo+95nlF2A",
|
|
85
|
+
"3CQ3G0GnVrmuixXsy2Qt8edfuZYxw09tLZdCI4wVrhElqMkFcZhbEp33E39xcdlvUzTODE8s",
|
|
86
|
+
"j12857uBAAAADEGaIWxr/talUAAFxA==",
|
|
87
|
+
].join("");
|
|
88
|
+
const PROBE_SPECS = {
|
|
89
|
+
full: {
|
|
90
|
+
base64: PROBE_MP4_BASE64,
|
|
91
|
+
firstCode: 0,
|
|
92
|
+
lastCode: 255,
|
|
93
|
+
preferences: ["prefer-software", "prefer-hardware"],
|
|
94
|
+
},
|
|
95
|
+
tv: {
|
|
96
|
+
base64: TV_PROBE_MP4_BASE64,
|
|
97
|
+
firstCode: 16,
|
|
98
|
+
lastCode: 235,
|
|
99
|
+
preferences: ["prefer-hardware", "prefer-software"],
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
const PROBE_CODEC = "avc1.64000d";
|
|
103
|
+
const PROBE_SIZE = 256;
|
|
104
|
+
const PROBE_BLOCK_SIZE = 16;
|
|
105
|
+
const PROBE_BLOCKS_PER_ROW = 16;
|
|
106
|
+
/** Pixels this far inside a block are read, clear of any edge filtering. */
|
|
107
|
+
const PROBE_BLOCK_INSET = 4;
|
|
108
|
+
/**
|
|
109
|
+
* How long one decoder may take to return the probe's first frame. The clip
|
|
110
|
+
* is in memory, so this is decoder time alone; a decoder that works takes a
|
|
111
|
+
* few milliseconds.
|
|
112
|
+
*/
|
|
113
|
+
const PROBE_DECODE_MILLISECONDS = 5000;
|
|
114
|
+
const pageDecodings = new Map();
|
|
115
|
+
/**
|
|
116
|
+
* Decodes a clip of known codes, written at the preview's levels, through
|
|
117
|
+
* each decoder the page offers in the same path a depth preview takes, and
|
|
118
|
+
* keeps the first that returns them as written, directly or through a
|
|
119
|
+
* table that undoes a conversion it makes. Without one, it picks the
|
|
120
|
+
* closest. Run once per page and level: the answer is a property of the
|
|
121
|
+
* browser, not of any one preview. Probes run one after another, so the
|
|
122
|
+
* page never holds two of their decoders.
|
|
123
|
+
*/
|
|
124
|
+
function chooseDepthPreviewDecoding(levels = "full", open = openDepthPreviewTrack, isSupported = isProbeConfigSupported) {
|
|
125
|
+
let decoding = pageDecodings.get(levels);
|
|
126
|
+
if (!decoding) {
|
|
127
|
+
decoding = runProbes(levels, open, isSupported).catch((error) => {
|
|
128
|
+
pageDecodings.delete(levels);
|
|
129
|
+
throw error;
|
|
130
|
+
});
|
|
131
|
+
pageDecodings.set(levels, decoding);
|
|
132
|
+
}
|
|
133
|
+
return decoding;
|
|
134
|
+
}
|
|
135
|
+
function depthPreviewProbeBytes(levels = "full") {
|
|
136
|
+
const text = atob(PROBE_SPECS[levels].base64);
|
|
137
|
+
const bytes = new Uint8Array(text.length);
|
|
138
|
+
for (let index = 0; index < text.length; index += 1) {
|
|
139
|
+
bytes[index] = text.charCodeAt(index);
|
|
140
|
+
}
|
|
141
|
+
return bytes;
|
|
142
|
+
}
|
|
143
|
+
async function isProbeConfigSupported(preference) {
|
|
144
|
+
if (typeof VideoDecoder === "undefined")
|
|
145
|
+
return false;
|
|
146
|
+
const support = await withinDecoderDeadline(VideoDecoder.isConfigSupported({
|
|
147
|
+
codec: PROBE_CODEC,
|
|
148
|
+
codedHeight: PROBE_SIZE,
|
|
149
|
+
codedWidth: PROBE_SIZE,
|
|
150
|
+
hardwareAcceleration: preference,
|
|
151
|
+
}), DECODER_SUPPORT_MILLISECONDS, "VideoDecoder.isConfigSupported").catch(() => ({ supported: false }));
|
|
152
|
+
return support.supported === true;
|
|
153
|
+
}
|
|
154
|
+
async function runProbes(levels, open, isSupported) {
|
|
155
|
+
const verdicts = [];
|
|
156
|
+
for (const hardwareAcceleration of PROBE_SPECS[levels].preferences) {
|
|
157
|
+
const verdict = await probeDepthPreviewDecoder(hardwareAcceleration, levels, open, isSupported);
|
|
158
|
+
verdicts.push(verdict);
|
|
159
|
+
if (verdict.probe && assessProbe(verdict.probe, levels).residual === 0) {
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return resolveDepthPreviewDecoding(verdicts, levels);
|
|
164
|
+
}
|
|
165
|
+
async function probeDepthPreviewDecoder(hardwareAcceleration, levels = "full", open = openDepthPreviewTrack, isSupported = isProbeConfigSupported) {
|
|
166
|
+
if (!(await isSupported(hardwareAcceleration))) {
|
|
167
|
+
return { hardwareAcceleration, probe: null, supported: false };
|
|
168
|
+
}
|
|
169
|
+
try {
|
|
170
|
+
return {
|
|
171
|
+
hardwareAcceleration,
|
|
172
|
+
probe: await runProbe(open, hardwareAcceleration, levels),
|
|
173
|
+
supported: true,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
return {
|
|
178
|
+
error: String(error),
|
|
179
|
+
hardwareAcceleration,
|
|
180
|
+
probe: null,
|
|
181
|
+
supported: true,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Picks the decoder whose codes come back closest to the written ones, and
|
|
187
|
+
* a correction table when one makes them closer still; the first of equals
|
|
188
|
+
* wins, so the order probes ran in is the order of preference.
|
|
189
|
+
*/
|
|
190
|
+
function resolveDepthPreviewDecoding(verdicts, levels = "full") {
|
|
191
|
+
let best = null;
|
|
192
|
+
for (const verdict of verdicts) {
|
|
193
|
+
if (!verdict.probe)
|
|
194
|
+
continue;
|
|
195
|
+
const { correction, residual } = assessProbe(verdict.probe, levels);
|
|
196
|
+
if (!best || residual < best.residual) {
|
|
197
|
+
best = { correction, residual, verdict };
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
if (!best) {
|
|
201
|
+
return {
|
|
202
|
+
correction: null,
|
|
203
|
+
hardwareAcceleration: "no-preference",
|
|
204
|
+
probe: null,
|
|
205
|
+
residualError: Number.NaN,
|
|
206
|
+
verdicts,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
return {
|
|
210
|
+
correction: best.correction,
|
|
211
|
+
hardwareAcceleration: best.verdict.hardwareAcceleration,
|
|
212
|
+
probe: best.verdict.probe,
|
|
213
|
+
residualError: best.residual,
|
|
214
|
+
verdicts,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
function assessProbe(probe, levels) {
|
|
218
|
+
if (probe.exact)
|
|
219
|
+
return { correction: null, residual: 0 };
|
|
220
|
+
const { firstCode, lastCode } = PROBE_SPECS[levels];
|
|
221
|
+
const table = createCodeCorrection(probe.decoded, firstCode, lastCode);
|
|
222
|
+
const residual = correctedError(probe.decoded, table, firstCode, lastCode);
|
|
223
|
+
return residual < probe.maxError
|
|
224
|
+
? { correction: table, residual }
|
|
225
|
+
: { correction: null, residual: probe.maxError };
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* For each code a decoder can return, the written code from `firstCode` to
|
|
229
|
+
* `lastCode` it most likely came from: the one whose read-back value is
|
|
230
|
+
* nearest, the nearest written code on a tie.
|
|
231
|
+
*/
|
|
232
|
+
function createCodeCorrection(decoded, firstCode = 0, lastCode = 255) {
|
|
233
|
+
const table = new Uint8Array(256);
|
|
234
|
+
for (let value = 0; value < 256; value += 1) {
|
|
235
|
+
let best = value;
|
|
236
|
+
let bestDistance = Number.POSITIVE_INFINITY;
|
|
237
|
+
for (let code = firstCode; code <= lastCode; code += 1) {
|
|
238
|
+
const distance = Math.abs(decoded[code] - value);
|
|
239
|
+
if (distance < bestDistance ||
|
|
240
|
+
(distance === bestDistance &&
|
|
241
|
+
Math.abs(code - value) < Math.abs(best - value))) {
|
|
242
|
+
best = code;
|
|
243
|
+
bestDistance = distance;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
table[value] = best;
|
|
247
|
+
}
|
|
248
|
+
return table;
|
|
249
|
+
}
|
|
250
|
+
function correctedError(decoded, table, firstCode, lastCode) {
|
|
251
|
+
let error = 0;
|
|
252
|
+
for (let code = firstCode; code <= lastCode; code += 1) {
|
|
253
|
+
error = Math.max(error, Math.abs(table[decoded[code]] - code));
|
|
254
|
+
}
|
|
255
|
+
return error;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Only the decode gets a deadline: opening may wait on the network to load
|
|
259
|
+
* the demuxer, which is no decoder fault.
|
|
260
|
+
*/
|
|
261
|
+
async function runProbe(open, hardwareAcceleration, levels) {
|
|
262
|
+
const track = await open(depthPreviewProbeBytes(levels), {
|
|
263
|
+
hardwareAcceleration,
|
|
264
|
+
});
|
|
265
|
+
try {
|
|
266
|
+
const frame = await withinDecoderDeadline(track.decode(0).next(), PROBE_DECODE_MILLISECONDS, `The ${hardwareAcceleration} decoder`);
|
|
267
|
+
if (!frame) {
|
|
268
|
+
throw new Error(`The ${hardwareAcceleration} decoder returned no frame of the probe, even flushed.`);
|
|
269
|
+
}
|
|
270
|
+
return {
|
|
271
|
+
...readProbeFrame(frame.luma, frame.width, levels),
|
|
272
|
+
lumaPath: track.lumaPath(),
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
finally {
|
|
276
|
+
// Closing the decoder ends a decode still waiting past its deadline.
|
|
277
|
+
track.dispose();
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
function readProbeFrame(luma, width, levels = "full") {
|
|
281
|
+
const { firstCode, lastCode } = PROBE_SPECS[levels];
|
|
282
|
+
const decoded = new Uint8Array(256);
|
|
283
|
+
let mismatchedCodes = 0;
|
|
284
|
+
let maxError = 0;
|
|
285
|
+
for (let code = 0; code < 256; code += 1) {
|
|
286
|
+
const top = Math.floor(code / PROBE_BLOCKS_PER_ROW) * PROBE_BLOCK_SIZE;
|
|
287
|
+
const left = (code % PROBE_BLOCKS_PER_ROW) * PROBE_BLOCK_SIZE;
|
|
288
|
+
let sum = 0;
|
|
289
|
+
let count = 0;
|
|
290
|
+
for (let y = top + PROBE_BLOCK_INSET; y < top + PROBE_BLOCK_SIZE - PROBE_BLOCK_INSET; y += 1) {
|
|
291
|
+
for (let x = left + PROBE_BLOCK_INSET; x < left + PROBE_BLOCK_SIZE - PROBE_BLOCK_INSET; x += 1) {
|
|
292
|
+
sum += luma[y * width + x];
|
|
293
|
+
count += 1;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
const value = Math.round(sum / count);
|
|
297
|
+
decoded[code] = value;
|
|
298
|
+
if (code < firstCode || code > lastCode)
|
|
299
|
+
continue;
|
|
300
|
+
if (value !== code)
|
|
301
|
+
mismatchedCodes += 1;
|
|
302
|
+
maxError = Math.max(maxError, Math.abs(value - code));
|
|
303
|
+
}
|
|
304
|
+
return {
|
|
305
|
+
decoded,
|
|
306
|
+
exact: mismatchedCodes === 0,
|
|
307
|
+
judgedCodes: lastCode - firstCode + 1,
|
|
308
|
+
maxError,
|
|
309
|
+
mismatchedCodes,
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
export { PROBE_DECODE_MILLISECONDS, chooseDepthPreviewDecoding, createCodeCorrection, depthPreviewProbeBytes };
|
|
314
|
+
//# sourceMappingURL=depth-preview-probe-DG7McQEN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depth-preview-probe-DG7McQEN.js","sources":["../src/media/depth-preview-probe.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|