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.
Files changed (197) hide show
  1. package/dist/depth-preview-probe-DG7McQEN.js +314 -0
  2. package/dist/depth-preview-probe-DG7McQEN.js.map +1 -0
  3. package/dist/depth-preview-track-BvgwNEE9.js +612 -0
  4. package/dist/depth-preview-track-BvgwNEE9.js.map +1 -0
  5. package/dist/detections/chunked-detection-frame-source.d.ts.map +1 -1
  6. package/dist/editing.d.ts +1 -1
  7. package/dist/editing.d.ts.map +1 -1
  8. package/dist/index.d.ts +4 -2
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +9845 -4759
  11. package/dist/index.js.map +1 -1
  12. package/dist/mask-preparation.worker.js +788 -25
  13. package/dist/mask-preparation.worker.js.map +1 -1
  14. package/dist/media/decoder-deadline.d.ts +18 -0
  15. package/dist/media/decoder-deadline.d.ts.map +1 -0
  16. package/dist/media/depth-preview-probe.d.ts +65 -0
  17. package/dist/media/depth-preview-probe.d.ts.map +1 -0
  18. package/dist/media/depth-preview-track.d.ts +96 -0
  19. package/dist/media/depth-preview-track.d.ts.map +1 -0
  20. package/dist/media/media-normalization.d.ts.map +1 -1
  21. package/dist/media/media-source.d.ts +7 -0
  22. package/dist/media/media-source.d.ts.map +1 -1
  23. package/dist/media/mediabunny-frame-clock.d.ts +7 -0
  24. package/dist/media/mediabunny-frame-clock.d.ts.map +1 -0
  25. package/dist/media/mediabunny-media-source.d.ts +3 -0
  26. package/dist/media/mediabunny-media-source.d.ts.map +1 -1
  27. package/dist/media/track-frame-index.d.ts +14 -0
  28. package/dist/media/track-frame-index.d.ts.map +1 -0
  29. package/dist/media/video-engine-media-source.d.ts.map +1 -1
  30. package/dist/media/video-engine-media-source.js +1 -1
  31. package/dist/render-preparation/depth/clip-preview.d.ts +41 -0
  32. package/dist/render-preparation/depth/clip-preview.d.ts.map +1 -0
  33. package/dist/render-preparation/depth/clip-timing.d.ts +18 -0
  34. package/dist/render-preparation/depth/clip-timing.d.ts.map +1 -0
  35. package/dist/render-preparation/depth/clip.d.ts +14 -0
  36. package/dist/render-preparation/depth/clip.d.ts.map +1 -0
  37. package/dist/render-preparation/depth/exact-at-rest.d.ts +44 -0
  38. package/dist/render-preparation/depth/exact-at-rest.d.ts.map +1 -0
  39. package/dist/render-preparation/depth/exact-playback.d.ts +40 -0
  40. package/dist/render-preparation/depth/exact-playback.d.ts.map +1 -0
  41. package/dist/render-preparation/depth/files.d.ts +55 -0
  42. package/dist/render-preparation/depth/files.d.ts.map +1 -0
  43. package/dist/render-preparation/depth/frame-decode.d.ts +20 -0
  44. package/dist/render-preparation/depth/frame-decode.d.ts.map +1 -0
  45. package/dist/render-preparation/depth/frame-preparer.d.ts +51 -0
  46. package/dist/render-preparation/depth/frame-preparer.d.ts.map +1 -0
  47. package/dist/render-preparation/depth/frame-window.d.ts +146 -0
  48. package/dist/render-preparation/depth/frame-window.d.ts.map +1 -0
  49. package/dist/render-preparation/depth/options.d.ts +37 -0
  50. package/dist/render-preparation/depth/options.d.ts.map +1 -0
  51. package/dist/render-preparation/depth/png16.d.ts +40 -0
  52. package/dist/render-preparation/depth/png16.d.ts.map +1 -0
  53. package/dist/render-preparation/depth/preview-luma-copier.d.ts +12 -0
  54. package/dist/render-preparation/depth/preview-luma-copier.d.ts.map +1 -0
  55. package/dist/render-preparation/depth/preview-luma.d.ts +48 -0
  56. package/dist/render-preparation/depth/preview-luma.d.ts.map +1 -0
  57. package/dist/render-preparation/depth/source.d.ts +123 -0
  58. package/dist/render-preparation/depth/source.d.ts.map +1 -0
  59. package/dist/render-preparation/depth/worker-protocol.d.ts +76 -0
  60. package/dist/render-preparation/depth/worker-protocol.d.ts.map +1 -0
  61. package/dist/render-preparation/mask-frame-artifact.d.ts +10 -0
  62. package/dist/render-preparation/mask-frame-artifact.d.ts.map +1 -1
  63. package/dist/render-preparation/mask-frame-compositor.d.ts +2 -1
  64. package/dist/render-preparation/mask-frame-compositor.d.ts.map +1 -1
  65. package/dist/render-preparation/mask-frame-preparer.d.ts.map +1 -1
  66. package/dist/render-preparation/mask-outline-paths.d.ts +3 -0
  67. package/dist/render-preparation/mask-outline-paths.d.ts.map +1 -0
  68. package/dist/render-preparation/mask-preparation-worker-protocol.d.ts +2 -1
  69. package/dist/render-preparation/mask-preparation-worker-protocol.d.ts.map +1 -1
  70. package/dist/render-preparation/playhead-motion.d.ts +67 -0
  71. package/dist/render-preparation/playhead-motion.d.ts.map +1 -0
  72. package/dist/render-preparation/prepared-render-window.d.ts +12 -0
  73. package/dist/render-preparation/prepared-render-window.d.ts.map +1 -1
  74. package/dist/renderers/depth-textures.d.ts +79 -0
  75. package/dist/renderers/depth-textures.d.ts.map +1 -0
  76. package/dist/renderers/detection-render-order.d.ts +4 -0
  77. package/dist/renderers/detection-render-order.d.ts.map +1 -0
  78. package/dist/renderers/id-mask-stroke-coverage.d.ts +3 -0
  79. package/dist/renderers/id-mask-stroke-coverage.d.ts.map +1 -0
  80. package/dist/renderers/media-renderer-core.d.ts.map +1 -1
  81. package/dist/renderers/media-renderer-scene.d.ts +16 -2
  82. package/dist/renderers/media-renderer-scene.d.ts.map +1 -1
  83. package/dist/renderers/pixi-batch-texture-bindings.d.ts +9 -0
  84. package/dist/renderers/pixi-batch-texture-bindings.d.ts.map +1 -0
  85. package/dist/renderers/pixi-box-layer.d.ts +1 -0
  86. package/dist/renderers/pixi-box-layer.d.ts.map +1 -1
  87. package/dist/renderers/pixi-depth-layer.d.ts +76 -0
  88. package/dist/renderers/pixi-depth-layer.d.ts.map +1 -0
  89. package/dist/renderers/pixi-depth-shader.d.ts +76 -0
  90. package/dist/renderers/pixi-depth-shader.d.ts.map +1 -0
  91. package/dist/renderers/pixi-focus-layer.d.ts +1 -0
  92. package/dist/renderers/pixi-focus-layer.d.ts.map +1 -1
  93. package/dist/renderers/pixi-frame-present.d.ts +1 -0
  94. package/dist/renderers/pixi-frame-present.d.ts.map +1 -1
  95. package/dist/renderers/pixi-id-mask-shader.d.ts +1 -0
  96. package/dist/renderers/pixi-id-mask-shader.d.ts.map +1 -1
  97. package/dist/renderers/pixi-interaction-layer.d.ts +1 -1
  98. package/dist/renderers/pixi-interaction-layer.d.ts.map +1 -1
  99. package/dist/renderers/pixi-interaction-presentation-layer.d.ts +1 -0
  100. package/dist/renderers/pixi-interaction-presentation-layer.d.ts.map +1 -1
  101. package/dist/renderers/pixi-mask-brush-preview.d.ts.map +1 -1
  102. package/dist/renderers/pixi-mask-halo.d.ts +1 -0
  103. package/dist/renderers/pixi-mask-halo.d.ts.map +1 -1
  104. package/dist/renderers/pixi-mask-layer.d.ts +8 -2
  105. package/dist/renderers/pixi-mask-layer.d.ts.map +1 -1
  106. package/dist/renderers/pixi-mask-screen-stroke.d.ts +17 -0
  107. package/dist/renderers/pixi-mask-screen-stroke.d.ts.map +1 -0
  108. package/dist/renderers/pixi-media-scene.d.ts.map +1 -1
  109. package/dist/renderers/pixi-region-coverage-mask.d.ts +1 -0
  110. package/dist/renderers/pixi-region-coverage-mask.d.ts.map +1 -1
  111. package/dist/renderers/pixi-region-layer.d.ts +1 -0
  112. package/dist/renderers/pixi-region-layer.d.ts.map +1 -1
  113. package/dist/renderers/pixi-scene-layer-slot.d.ts +1 -0
  114. package/dist/renderers/pixi-scene-layer-slot.d.ts.map +1 -1
  115. package/dist/renderers/pixi-vector-layer.d.ts +1 -0
  116. package/dist/renderers/pixi-vector-layer.d.ts.map +1 -1
  117. package/dist/renderers/prepared-annotation-window.d.ts +1 -0
  118. package/dist/renderers/prepared-annotation-window.d.ts.map +1 -1
  119. package/dist/renderers/render-preparation-report.d.ts +23 -0
  120. package/dist/renderers/render-preparation-report.d.ts.map +1 -0
  121. package/dist/sessions/media-session-defaults.d.ts.map +1 -1
  122. package/dist/sessions/media-session-state.d.ts.map +1 -1
  123. package/dist/sessions/media-session.d.ts.map +1 -1
  124. package/dist/tracking.worker.js +64 -0
  125. package/dist/tracking.worker.js.map +1 -1
  126. package/dist/types/media-depth.d.ts +55 -0
  127. package/dist/types/media-depth.d.ts.map +1 -0
  128. package/dist/types/media-renderer.d.ts +33 -0
  129. package/dist/types/media-renderer.d.ts.map +1 -1
  130. package/dist/types/media-session.d.ts +21 -0
  131. package/dist/types/media-session.d.ts.map +1 -1
  132. package/dist/types/render-preparation.d.ts +105 -3
  133. package/dist/types/render-preparation.d.ts.map +1 -1
  134. package/dist/{video-engine-media-source-DR-x1UfK.js → video-engine-media-source-DOFsuGS4.js} +35 -29
  135. package/dist/video-engine-media-source-DOFsuGS4.js.map +1 -0
  136. package/dist/web-video-engine/analysis.js +6 -43
  137. package/dist/web-video-engine/cache-budget.d.ts +4 -7
  138. package/dist/web-video-engine/constants.d.ts +3 -4
  139. package/dist/web-video-engine/create-scrub-cursor.d.ts +1 -0
  140. package/dist/web-video-engine/decode-resolution-fynpRIAG.js +109 -0
  141. package/dist/web-video-engine/decode-scheduler.d.ts +1 -0
  142. package/dist/web-video-engine/engine-core.d.ts +4 -2
  143. package/dist/web-video-engine/engine.js +8 -6
  144. package/dist/web-video-engine/engine.worker.js +164 -66
  145. package/dist/web-video-engine/frame-cache.d.ts +9 -0
  146. package/dist/web-video-engine/frame-index.d.ts +1 -0
  147. package/dist/web-video-engine/frame-index.js +97 -0
  148. package/dist/web-video-engine/{frame-timeline-DreEwsRY.js → frame-timeline-CYgzzmpA.js} +1 -109
  149. package/dist/web-video-engine/frame-timeline-reader.d.ts +21 -0
  150. package/dist/web-video-engine/video-engine.d.ts +9 -4
  151. package/node_modules/supervision-js-core/THIRD_PARTY_NOTICES.md +132 -0
  152. package/node_modules/supervision-js-core/dist/detections/buffered-detection-timeline.d.ts.map +1 -1
  153. package/node_modules/supervision-js-core/dist/index.d.ts +8 -3
  154. package/node_modules/supervision-js-core/dist/index.d.ts.map +1 -1
  155. package/node_modules/supervision-js-core/dist/index.js +1172 -70
  156. package/node_modules/supervision-js-core/dist/index.js.map +1 -1
  157. package/node_modules/supervision-js-core/dist/interactions/annotation-editing-engine.d.ts +2 -2
  158. package/node_modules/supervision-js-core/dist/interactions/annotation-editing-engine.d.ts.map +1 -1
  159. package/node_modules/supervision-js-core/dist/interactions/annotation-handles.d.ts +2 -2
  160. package/node_modules/supervision-js-core/dist/interactions/annotation-handles.d.ts.map +1 -1
  161. package/node_modules/supervision-js-core/dist/interactions/detection-picker.d.ts.map +1 -1
  162. package/node_modules/supervision-js-core/dist/interactions/viewport-controller.d.ts.map +1 -1
  163. package/node_modules/supervision-js-core/dist/styles/annotation-renderer-presentation.d.ts.map +1 -1
  164. package/node_modules/supervision-js-core/dist/styles/annotation-renderer-registry.d.ts.map +1 -1
  165. package/node_modules/supervision-js-core/dist/types/annotation-renderer.d.ts +50 -3
  166. package/node_modules/supervision-js-core/dist/types/annotation-renderer.d.ts.map +1 -1
  167. package/node_modules/supervision-js-core/dist/types/depth-map.d.ts +203 -0
  168. package/node_modules/supervision-js-core/dist/types/depth-map.d.ts.map +1 -0
  169. package/node_modules/supervision-js-core/dist/types/detections.d.ts +2 -1
  170. package/node_modules/supervision-js-core/dist/types/detections.d.ts.map +1 -1
  171. package/node_modules/supervision-js-core/dist/types/editing.d.ts +9 -0
  172. package/node_modules/supervision-js-core/dist/types/editing.d.ts.map +1 -1
  173. package/node_modules/supervision-js-core/dist/types/interaction.d.ts +4 -0
  174. package/node_modules/supervision-js-core/dist/types/interaction.d.ts.map +1 -1
  175. package/node_modules/supervision-js-core/dist/types/mask-style.d.ts +3 -0
  176. package/node_modules/supervision-js-core/dist/types/mask-style.d.ts.map +1 -1
  177. package/node_modules/supervision-js-core/dist/types/media-rendering.d.ts +3 -0
  178. package/node_modules/supervision-js-core/dist/types/media-rendering.d.ts.map +1 -1
  179. package/node_modules/supervision-js-core/dist/types/viewport.d.ts +3 -0
  180. package/node_modules/supervision-js-core/dist/types/viewport.d.ts.map +1 -1
  181. package/node_modules/supervision-js-core/dist/utils/depth-color-mapping.d.ts +91 -0
  182. package/node_modules/supervision-js-core/dist/utils/depth-color-mapping.d.ts.map +1 -0
  183. package/node_modules/supervision-js-core/dist/utils/depth-colormap-tables.d.ts +30 -0
  184. package/node_modules/supervision-js-core/dist/utils/depth-colormap-tables.d.ts.map +1 -0
  185. package/node_modules/supervision-js-core/dist/utils/depth-colormaps.d.ts +16 -0
  186. package/node_modules/supervision-js-core/dist/utils/depth-colormaps.d.ts.map +1 -0
  187. package/node_modules/supervision-js-core/dist/utils/depth-manifest.d.ts +23 -0
  188. package/node_modules/supervision-js-core/dist/utils/depth-manifest.d.ts.map +1 -0
  189. package/node_modules/supervision-js-core/dist/utils/depth-readout.d.ts +14 -0
  190. package/node_modules/supervision-js-core/dist/utils/depth-readout.d.ts.map +1 -0
  191. package/node_modules/supervision-js-core/dist/utils/detection-frames.d.ts +21 -0
  192. package/node_modules/supervision-js-core/dist/utils/detection-frames.d.ts.map +1 -1
  193. package/node_modules/supervision-js-core/dist/utils/id-mask-frame.d.ts +3 -7
  194. package/node_modules/supervision-js-core/dist/utils/id-mask-frame.d.ts.map +1 -1
  195. package/node_modules/supervision-js-core/package.json +2 -1
  196. package/package.json +6 -1
  197. 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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"}