|
1 | 1 | import { parseStrictFiniteTimingNumber } from "./playbackRate"; |
| 2 | +import { createRuntimeStartTimeResolver } from "./startResolver"; |
2 | 3 | import { skipsHiddenImages } from "./timedClipHide"; |
3 | 4 |
|
4 | 5 | type PreloadableMedia = Pick< |
@@ -40,18 +41,19 @@ export function deferMediaUntilDue(): void { |
40 | 41 | win.__hfMediaDeferral?.disconnect(); |
41 | 42 | win.__hfMediaDeferral = undefined; |
42 | 43 | if (!skipsHiddenImages()) return; |
43 | | - const defer = (el: Element) => { |
| 44 | + const defer = (el: Element, startInFilm: (el: Element) => number) => { |
44 | 45 | const start = parseStrictFiniteTimingNumber(el.getAttribute("data-start")); |
45 | | - if (start != null && start > 0 && lengthIsAuthored(el)) |
| 46 | + if (start != null && lengthIsAuthored(el) && startInFilm(el) > 0) |
46 | 47 | (el as HTMLMediaElement).preload = "none"; |
47 | 48 | }; |
48 | 49 | win.__hfMediaDeferral = new MutationObserver((records) => { |
| 50 | + const startInFilm = createRuntimeStartTimeResolver({}).resolveMediaStartForElement; |
49 | 51 | for (const record of records) |
50 | 52 | for (const node of record.addedNodes) { |
51 | 53 | if (node.nodeType !== 1) continue; |
52 | 54 | const el = node as Element; |
53 | | - if (el.matches("video, audio")) defer(el); |
54 | | - for (const media of el.querySelectorAll("video, audio")) defer(media); |
| 55 | + if (el.matches("video, audio")) defer(el, startInFilm); |
| 56 | + for (const media of el.querySelectorAll("video, audio")) defer(media, startInFilm); |
55 | 57 | } |
56 | 58 | }); |
57 | 59 | win.__hfMediaDeferral.observe(document.documentElement, { childList: true, subtree: true }); |
|
0 commit comments