@nomercy-entertainment/nomercy-player-core 2.0.2 → 2.0.4
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/CHANGELOG.md +10 -0
- package/dist/adapters/media-element/MediaElementBackend.d.ts +14 -2
- package/dist/adapters/media-element/MediaElementBackend.d.ts.map +1 -1
- package/dist/adapters/media-element/MediaElementBackend.js.map +1 -1
- package/dist/adapters/media-element/helpers.d.ts +11 -8
- package/dist/adapters/media-element/helpers.d.ts.map +1 -1
- package/dist/adapters/media-element/helpers.js +12 -9
- package/dist/adapters/media-element/helpers.js.map +1 -1
- package/dist/adapters/quality/display-range.d.ts +33 -0
- package/dist/adapters/quality/display-range.d.ts.map +1 -0
- package/dist/adapters/quality/display-range.js +46 -0
- package/dist/adapters/quality/display-range.js.map +1 -0
- package/dist/adapters/quality/hdr-policy.d.ts +80 -0
- package/dist/adapters/quality/hdr-policy.d.ts.map +1 -0
- package/dist/adapters/quality/hdr-policy.js +75 -0
- package/dist/adapters/quality/hdr-policy.js.map +1 -0
- package/dist/adapters/quality/size-policy.d.ts +57 -0
- package/dist/adapters/quality/size-policy.d.ts.map +1 -0
- package/dist/adapters/quality/size-policy.js +114 -0
- package/dist/adapters/quality/size-policy.js.map +1 -0
- package/dist/adapters/retry-policy/IRetryPolicy.d.ts +5 -2
- package/dist/adapters/retry-policy/IRetryPolicy.d.ts.map +1 -1
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/kit-version.js +1 -1
- package/dist/core/mixins/container-class-emit.d.ts.map +1 -1
- package/dist/core/mixins/container-class-emit.js +9 -0
- package/dist/core/mixins/container-class-emit.js.map +1 -1
- package/dist/core/mixins/device.d.ts +2 -0
- package/dist/core/mixins/device.d.ts.map +1 -1
- package/dist/core/mixins/device.js +4 -0
- package/dist/core/mixins/device.js.map +1 -1
- package/dist/core/mixins/lifecycle.d.ts.map +1 -1
- package/dist/core/mixins/lifecycle.js +3 -0
- package/dist/core/mixins/lifecycle.js.map +1 -1
- package/dist/core/mixins/loading.d.ts +16 -0
- package/dist/core/mixins/loading.d.ts.map +1 -1
- package/dist/core/mixins/loading.js +26 -0
- package/dist/core/mixins/loading.js.map +1 -1
- package/dist/core/mixins/queue.d.ts +14 -0
- package/dist/core/mixins/queue.d.ts.map +1 -1
- package/dist/core/mixins/queue.js +30 -3
- package/dist/core/mixins/queue.js.map +1 -1
- package/dist/core/state.d.ts +8 -0
- package/dist/core/state.d.ts.map +1 -1
- package/dist/core/state.js +1 -0
- package/dist/core/state.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/testing/stub-player.d.ts.map +1 -1
- package/dist/testing/stub-player.js +1 -0
- package/dist/testing/stub-player.js.map +1 -1
- package/dist/types/config.d.ts +26 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/device.d.ts +7 -0
- package/dist/types/device.d.ts.map +1 -1
- package/dist/types/player.d.ts +7 -1
- package/dist/types/player.d.ts.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [2.0.3] — 2026-07-31
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- `item(target)` called between `setup()` and `ready()` addressed a queue the configured `playlist` had not seeded yet, so the cursor never moved and the choice was silently lost — a deep link naming a start item opened on the first item instead. The choice is now parked and applied the moment the pipeline seeds the queue.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Screen-aware quality decisions: `detectDisplayHdr()`, `HdrOnSdrFallback` and the `hdrOnSdr` config field, plus `sizeAbrCeiling()` for capping the ladder to the space the picture is drawn in.
|
|
14
|
+
|
|
5
15
|
## [2.0.1] — 2026-07-18
|
|
6
16
|
|
|
7
17
|
First published stable of the v2 line (2.0.0 was withdrawn before release, so 2.0.1 is the first stable on npm). The core now publishes under the `latest` dist-tag, so a plain `npm install @nomercy-entertainment/nomercy-player-core` resolves `2.0.1` instead of the stale `2.0.0-rc.2` that predated `publishConfig.tag`. This promotes the `2.0.0-rc.33` surface to stable with no runtime or signature changes; consumers already installing `@rc` are running the same code.
|
|
@@ -22,8 +22,20 @@ export interface MinimalBackendEventPayload {
|
|
|
22
22
|
encrypted: unknown;
|
|
23
23
|
error: unknown;
|
|
24
24
|
}
|
|
25
|
-
/**
|
|
26
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Asked for the `Authorization` header to send with one request.
|
|
27
|
+
*
|
|
28
|
+
* Takes the request URL, because whether a credential belongs on a request is
|
|
29
|
+
* the consumer's decision and it cannot be made without knowing where the
|
|
30
|
+
* request is going. This was asked with no argument, so it could only answer
|
|
31
|
+
* "here is the token" — and the player plays whatever it is handed. An
|
|
32
|
+
* internet radio stream, a podcast, a trailer on someone's CDN: all ordinary,
|
|
33
|
+
* none of them the consumer's server, all of them receiving the token.
|
|
34
|
+
*
|
|
35
|
+
* Synchronous, because hls.js resolves headers per segment inside a
|
|
36
|
+
* synchronous callback. Read from a store or a ref; do not fetch here.
|
|
37
|
+
*/
|
|
38
|
+
export type AuthHeaderProvider = (url: string) => string | undefined;
|
|
27
39
|
/**
|
|
28
40
|
* Abstract substrate for every `HTMLMediaElement`-backed backend.
|
|
29
41
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaElementBackend.d.ts","sourceRoot":"","sources":["../../../src/adapters/media-element/MediaElementBackend.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGxE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAUpD;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;CACf;AAED
|
|
1
|
+
{"version":3,"file":"MediaElementBackend.d.ts","sourceRoot":"","sources":["../../../src/adapters/media-element/MediaElementBackend.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaElementBackend.js","sourceRoot":"","sources":["../../../src/adapters/media-element/MediaElementBackend.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,uCAAuC;AACvC,EAAE;AACF,4EAA4E;AAC5E,EAAE;AACF,uCAAuC;AACvC,gFAAgF;AAKhF,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EACN,kBAAkB,EAClB,wBAAwB,EACxB,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,GAClB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"MediaElementBackend.js","sourceRoot":"","sources":["../../../src/adapters/media-element/MediaElementBackend.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ErrorScope } from '../../errors/code.js';
|
|
2
2
|
import type { BackendState } from './backend-state.js';
|
|
3
|
+
import type { AuthHeaderProvider } from './MediaElementBackend.js';
|
|
3
4
|
export type BackendId = Extract<ErrorScope, {
|
|
4
5
|
kind: 'backend';
|
|
5
6
|
}>['id'];
|
|
@@ -39,7 +40,7 @@ export interface HlsLoaderConfig {
|
|
|
39
40
|
enableCEA708Captions?: boolean;
|
|
40
41
|
startPosition?: number;
|
|
41
42
|
startFragPrefetch?: boolean;
|
|
42
|
-
xhrSetup?: (xhr: XMLHttpRequest) => void;
|
|
43
|
+
xhrSetup?: (xhr: XMLHttpRequest, url: string) => void;
|
|
43
44
|
[key: string]: unknown;
|
|
44
45
|
}
|
|
45
46
|
/**
|
|
@@ -53,16 +54,18 @@ export interface HlsLoaderConfig {
|
|
|
53
54
|
* IMPORTANT: each backend passes its own `hlsConfig` — do NOT add defaults or
|
|
54
55
|
* merge config here. The config is backend-owned.
|
|
55
56
|
*/
|
|
56
|
-
export declare function attachHlsOrFallback(HlsModule: unknown, el: HTMLMediaElement, url: string,
|
|
57
|
+
export declare function attachHlsOrFallback(HlsModule: unknown, el: HTMLMediaElement, url: string, headerValue: string | undefined, hlsConfig: HlsLoaderConfig): HlsHandle | undefined;
|
|
57
58
|
/**
|
|
58
|
-
* Build an hls.js `xhrSetup` callback that
|
|
59
|
-
*
|
|
59
|
+
* Build an hls.js `xhrSetup` callback that asks `provider` what to send with
|
|
60
|
+
* each manifest / segment request.
|
|
60
61
|
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
62
|
+
* hls.js passes the request URL to this callback and it was being dropped: the
|
|
63
|
+
* header was resolved once for the source and then stamped onto every request
|
|
64
|
+
* the loader made afterwards. A manifest names where its segments live and
|
|
65
|
+
* nothing says that is where the manifest lives, so "the source was ours" never
|
|
66
|
+
* did answer the question this asks.
|
|
64
67
|
*/
|
|
65
|
-
export declare function createAuthorizationXhrSetup(
|
|
68
|
+
export declare function createAuthorizationXhrSetup(provider: AuthHeaderProvider | undefined): (xhr: XMLHttpRequest, url: string) => void;
|
|
66
69
|
/**
|
|
67
70
|
* Detach media from `hls`, then destroy it, swallowing any errors defensively.
|
|
68
71
|
* Clears the reference the caller passes by value — callers must set their own
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/adapters/media-element/helpers.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/adapters/media-element/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,10 +42,10 @@ export function supportsNativeHls(el) {
|
|
|
42
42
|
* IMPORTANT: each backend passes its own `hlsConfig` — do NOT add defaults or
|
|
43
43
|
* merge config here. The config is backend-owned.
|
|
44
44
|
*/
|
|
45
|
-
export function attachHlsOrFallback(HlsModule, el, url,
|
|
45
|
+
export function attachHlsOrFallback(HlsModule, el, url, headerValue, hlsConfig) {
|
|
46
46
|
const Hls = HlsModule;
|
|
47
47
|
if (!Hls.isSupported()) {
|
|
48
|
-
el.src = appendAuthTokenParam(url,
|
|
48
|
+
el.src = appendAuthTokenParam(url, headerValue);
|
|
49
49
|
el.load?.();
|
|
50
50
|
return undefined;
|
|
51
51
|
}
|
|
@@ -55,15 +55,18 @@ export function attachHlsOrFallback(HlsModule, el, url, authParam, hlsConfig) {
|
|
|
55
55
|
return hls;
|
|
56
56
|
}
|
|
57
57
|
/**
|
|
58
|
-
* Build an hls.js `xhrSetup` callback that
|
|
59
|
-
*
|
|
58
|
+
* Build an hls.js `xhrSetup` callback that asks `provider` what to send with
|
|
59
|
+
* each manifest / segment request.
|
|
60
60
|
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
61
|
+
* hls.js passes the request URL to this callback and it was being dropped: the
|
|
62
|
+
* header was resolved once for the source and then stamped onto every request
|
|
63
|
+
* the loader made afterwards. A manifest names where its segments live and
|
|
64
|
+
* nothing says that is where the manifest lives, so "the source was ours" never
|
|
65
|
+
* did answer the question this asks.
|
|
64
66
|
*/
|
|
65
|
-
export function createAuthorizationXhrSetup(
|
|
66
|
-
return (xhr) => {
|
|
67
|
+
export function createAuthorizationXhrSetup(provider) {
|
|
68
|
+
return (xhr, url) => {
|
|
69
|
+
const headerValue = provider?.(url);
|
|
67
70
|
if (headerValue) {
|
|
68
71
|
xhr.setRequestHeader('Authorization', headerValue);
|
|
69
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/adapters/media-element/helpers.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,uCAAuC;AACvC,EAAE;AACF,4EAA4E;AAC5E,EAAE;AACF,uCAAuC;AACvC,gFAAgF;
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/adapters/media-element/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether this screen can actually show HDR.
|
|
3
|
+
*
|
|
4
|
+
* `types/tracks.ts` already named the query — `matchMedia('(dynamic-range: high)')`
|
|
5
|
+
* — as how this would be answered, and nothing ever asked it. So `hdrDecision` had
|
|
6
|
+
* no input and an HDR ladder played on an SDR panel unchallenged.
|
|
7
|
+
*
|
|
8
|
+
* `video-dynamic-range` is asked first because it is the one that describes the
|
|
9
|
+
* VIDEO plane. `dynamic-range` answers for the page, and a browser can composite
|
|
10
|
+
* HDR video on a screen whose page rendering it reports as standard.
|
|
11
|
+
*/
|
|
12
|
+
export interface DisplayRangeProbe {
|
|
13
|
+
/** Answers a CSS media query. Injected so the decision is testable. */
|
|
14
|
+
matches: (query: string) => boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* A probe backed by the real browser, or null when there is no browser.
|
|
18
|
+
*
|
|
19
|
+
* Null rather than a probe that always says no: "there is no screen to ask" and
|
|
20
|
+
* "the screen said no" are different answers, and only the first one should leave
|
|
21
|
+
* a caller free to skip the whole question.
|
|
22
|
+
*/
|
|
23
|
+
export declare function browserDisplayRangeProbe(): DisplayRangeProbe | null;
|
|
24
|
+
/**
|
|
25
|
+
* True only when the screen says so.
|
|
26
|
+
*
|
|
27
|
+
* Defaults to SDR when nothing can be asked, because that is the assumption whose
|
|
28
|
+
* failure is visible and recoverable: an SDR decision on an HDR panel shows a
|
|
29
|
+
* correct-looking picture at a lower rung, and an HDR decision on an SDR panel shows
|
|
30
|
+
* the washed-out one a viewer reported.
|
|
31
|
+
*/
|
|
32
|
+
export declare function detectDisplayHdr(probe?: DisplayRangeProbe | null): boolean;
|
|
33
|
+
//# sourceMappingURL=display-range.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"display-range.d.ts","sourceRoot":"","sources":["../../../src/adapters/quality/display-range.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;GAUG;AACH,MAAM,WAAW,iBAAiB;IACjC,uEAAuE;IACvE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;CACpC;AAKD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,IAAI,iBAAiB,GAAG,IAAI,CAgBnE;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,GAAE,iBAAiB,GAAG,IAAiC,GAAG,OAAO,CAKtG"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// -----------------------------------------------------------------------------
|
|
2
|
+
// Copyright (c) NoMercy Entertainment
|
|
3
|
+
//
|
|
4
|
+
// Licensed under the Apache License, Version 2.0. See LICENSE for details.
|
|
5
|
+
//
|
|
6
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
7
|
+
// -----------------------------------------------------------------------------
|
|
8
|
+
const VIDEO_RANGE_QUERY = '(video-dynamic-range: high)';
|
|
9
|
+
const PAGE_RANGE_QUERY = '(dynamic-range: high)';
|
|
10
|
+
/**
|
|
11
|
+
* A probe backed by the real browser, or null when there is no browser.
|
|
12
|
+
*
|
|
13
|
+
* Null rather than a probe that always says no: "there is no screen to ask" and
|
|
14
|
+
* "the screen said no" are different answers, and only the first one should leave
|
|
15
|
+
* a caller free to skip the whole question.
|
|
16
|
+
*/
|
|
17
|
+
export function browserDisplayRangeProbe() {
|
|
18
|
+
if (typeof globalThis.matchMedia !== 'function')
|
|
19
|
+
return null;
|
|
20
|
+
return {
|
|
21
|
+
matches: (query) => {
|
|
22
|
+
try {
|
|
23
|
+
return globalThis.matchMedia(query).matches;
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// A browser that does not understand the query throws rather than
|
|
27
|
+
// returning false, and an unknown query is not a claim about the screen.
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* True only when the screen says so.
|
|
35
|
+
*
|
|
36
|
+
* Defaults to SDR when nothing can be asked, because that is the assumption whose
|
|
37
|
+
* failure is visible and recoverable: an SDR decision on an HDR panel shows a
|
|
38
|
+
* correct-looking picture at a lower rung, and an HDR decision on an SDR panel shows
|
|
39
|
+
* the washed-out one a viewer reported.
|
|
40
|
+
*/
|
|
41
|
+
export function detectDisplayHdr(probe = browserDisplayRangeProbe()) {
|
|
42
|
+
if (probe === null)
|
|
43
|
+
return false;
|
|
44
|
+
return probe.matches(VIDEO_RANGE_QUERY) || probe.matches(PAGE_RANGE_QUERY);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=display-range.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"display-range.js","sourceRoot":"","sources":["../../../src/adapters/quality/display-range.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,uCAAuC;AACvC,EAAE;AACF,4EAA4E;AAC5E,EAAE;AACF,uCAAuC;AACvC,gFAAgF;AAkBhF,MAAM,iBAAiB,GAAG,6BAA6B,CAAC;AACxD,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB;IACvC,IAAI,OAAO,UAAU,CAAC,UAAU,KAAK,UAAU;QAC9C,OAAO,IAAI,CAAC;IAEb,OAAO;QACN,OAAO,EAAE,CAAC,KAAa,EAAW,EAAE;YACnC,IAAI,CAAC;gBACJ,OAAO,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;YAC7C,CAAC;YACD,MAAM,CAAC;gBACN,kEAAkE;gBAClE,yEAAyE;gBACzE,OAAO,KAAK,CAAC;YACd,CAAC;QACF,CAAC;KACD,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAkC,wBAAwB,EAAE;IAC5F,IAAI,KAAK,KAAK,IAAI;QACjB,OAAO,KAAK,CAAC;IAEd,OAAO,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAC5E,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { QualityLevel } from '../../types/tracks.js';
|
|
2
|
+
/**
|
|
3
|
+
* What to do when HDR content meets an SDR screen.
|
|
4
|
+
*
|
|
5
|
+
* The web had `dynamicRange` on QualityLevel and nothing that read it, so an HDR
|
|
6
|
+
* ladder played on an SDR display with nothing consulted and nothing converted —
|
|
7
|
+
* a washed-out picture, and a viewer with good bandwidth gets the WORST one,
|
|
8
|
+
* because adaptation climbs into the HDR rungs on its own.
|
|
9
|
+
*
|
|
10
|
+
* This is the oracle for the native port rather than the other way round: the
|
|
11
|
+
* native trio must match the web, so new behaviour lands here first and the Kotlin
|
|
12
|
+
* and Swift sides conform. Written to mirror `HdrPolicy.kt` decision for decision
|
|
13
|
+
* so the two cannot drift.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* What a consumer wants when the backend cannot convert and there is no SDR rung.
|
|
17
|
+
*
|
|
18
|
+
* A choice rather than a rule, because both answers are defensible and the library
|
|
19
|
+
* is not the one who has to explain either to a viewer: `play` shows a washed-out
|
|
20
|
+
* picture, `refuse` shows none. Tone-mapping is preferred over both wherever the
|
|
21
|
+
* backend can do it, so this only decides the case where it cannot.
|
|
22
|
+
*/
|
|
23
|
+
export type HdrOnSdrFallback = 'play' | 'refuse';
|
|
24
|
+
export type HdrDecision = {
|
|
25
|
+
kind: 'as-is';
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Ask the backend to convert HDR to SDR as it decodes.
|
|
29
|
+
*
|
|
30
|
+
* Preferred wherever the backend can do it, on every platform that can: it needs
|
|
31
|
+
* no second rendition on the server and no bandwidth decision, and the picture is
|
|
32
|
+
* right rather than merely watchable. It costs work per frame, deliberately.
|
|
33
|
+
*/
|
|
34
|
+
| {
|
|
35
|
+
kind: 'tone-map';
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Pin adaptation to the best SDR rung the ladder has.
|
|
39
|
+
*
|
|
40
|
+
* Ahead of tone-mapping when a rung exists, because a natively-SDR stream is
|
|
41
|
+
* correct without spending anything per frame.
|
|
42
|
+
*/
|
|
43
|
+
| {
|
|
44
|
+
kind: 'cap-to';
|
|
45
|
+
level: QualityLevel;
|
|
46
|
+
}
|
|
47
|
+
/** No SDR rung, no converter, and the consumer chose to show it anyway. */
|
|
48
|
+
| {
|
|
49
|
+
kind: 'play-unconverted';
|
|
50
|
+
}
|
|
51
|
+
/** No SDR rung, no converter, and the consumer chose not to. */
|
|
52
|
+
| {
|
|
53
|
+
kind: 'refuse';
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* The best SDR rung, or null when there is nothing to cap to.
|
|
57
|
+
*
|
|
58
|
+
* Null on an HDR display, and null on a ladder with no HDR in it — a cap that
|
|
59
|
+
* changes nothing still narrows what adaptation may pick if anything about the
|
|
60
|
+
* comparison is subtly wrong, and the safest constraint is the one not applied.
|
|
61
|
+
*
|
|
62
|
+
* Ordered height first then bitrate, the same ordering a quality menu uses.
|
|
63
|
+
* Falling back to the lowest rung would be a worse picture than the display can
|
|
64
|
+
* show, which is the opposite mistake.
|
|
65
|
+
*/
|
|
66
|
+
export declare function hdrAbrCeiling(levels: ReadonlyArray<QualityLevel>, displayHdr: boolean): QualityLevel | null;
|
|
67
|
+
/** Every rung is HDR and the display is not: there is nothing to cap to. */
|
|
68
|
+
export declare function isHdrUnplayable(levels: ReadonlyArray<QualityLevel>, displayHdr: boolean): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* The decision, cheapest correct answer first.
|
|
71
|
+
*
|
|
72
|
+
* Pure and taking booleans rather than a Screen or a backend, so every branch is
|
|
73
|
+
* provable without a device. The device answers two questions and this answers the
|
|
74
|
+
* rest.
|
|
75
|
+
*
|
|
76
|
+
* `backendCanToneMap` is not a platform constant: the same browser answers
|
|
77
|
+
* differently by codec, by decoder, and by whether hardware decoding is in use.
|
|
78
|
+
*/
|
|
79
|
+
export declare function hdrDecision(levels: ReadonlyArray<QualityLevel>, displayHdr: boolean, backendCanToneMap: boolean, fallback?: HdrOnSdrFallback): HdrDecision;
|
|
80
|
+
//# sourceMappingURL=hdr-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hdr-policy.d.ts","sourceRoot":"","sources":["../../../src/adapters/quality/hdr-policy.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;;;;;;;;;;GAYG;AAEH;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEjD,MAAM,MAAM,WAAW,GAElB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE;AACrB;;;;;;GAMG;GACA;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE;AACvB;;;;;GAKG;GACA;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE;AAC1C,2EAA2E;GACxE;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE;AAC/B,gEAAgE;GAC7D;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAMvB;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAuB3G;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAEjG;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAC1B,MAAM,EAAE,aAAa,CAAC,YAAY,CAAC,EACnC,UAAU,EAAE,OAAO,EACnB,iBAAiB,EAAE,OAAO,EAC1B,QAAQ,GAAE,gBAAyB,GACjC,WAAW,CAsBb"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// -----------------------------------------------------------------------------
|
|
2
|
+
// Copyright (c) NoMercy Entertainment
|
|
3
|
+
//
|
|
4
|
+
// Licensed under the Apache License, Version 2.0. See LICENSE for details.
|
|
5
|
+
//
|
|
6
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
7
|
+
// -----------------------------------------------------------------------------
|
|
8
|
+
function isHdr(level) {
|
|
9
|
+
return level.dynamicRange === 'hdr';
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The best SDR rung, or null when there is nothing to cap to.
|
|
13
|
+
*
|
|
14
|
+
* Null on an HDR display, and null on a ladder with no HDR in it — a cap that
|
|
15
|
+
* changes nothing still narrows what adaptation may pick if anything about the
|
|
16
|
+
* comparison is subtly wrong, and the safest constraint is the one not applied.
|
|
17
|
+
*
|
|
18
|
+
* Ordered height first then bitrate, the same ordering a quality menu uses.
|
|
19
|
+
* Falling back to the lowest rung would be a worse picture than the display can
|
|
20
|
+
* show, which is the opposite mistake.
|
|
21
|
+
*/
|
|
22
|
+
export function hdrAbrCeiling(levels, displayHdr) {
|
|
23
|
+
if (displayHdr)
|
|
24
|
+
return null;
|
|
25
|
+
if (!levels.some(isHdr))
|
|
26
|
+
return null;
|
|
27
|
+
const sdr = levels.filter(level => !isHdr(level));
|
|
28
|
+
if (sdr.length === 0)
|
|
29
|
+
return null;
|
|
30
|
+
// `height` is optional on the web's QualityLevel — an audio-only rendition has
|
|
31
|
+
// none, and so does a ladder a backend has only half described. Nought sorts it
|
|
32
|
+
// below every real rung rather than above them, which is what an unknown height
|
|
33
|
+
// deserves when the question is "the best picture this screen can show".
|
|
34
|
+
return sdr.reduce((best, level) => {
|
|
35
|
+
const height = level.height ?? 0;
|
|
36
|
+
const bestHeight = best.height ?? 0;
|
|
37
|
+
if (height !== bestHeight)
|
|
38
|
+
return height > bestHeight ? level : best;
|
|
39
|
+
return (level.bitrate ?? 0) > (best.bitrate ?? 0) ? level : best;
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/** Every rung is HDR and the display is not: there is nothing to cap to. */
|
|
43
|
+
export function isHdrUnplayable(levels, displayHdr) {
|
|
44
|
+
return !displayHdr && levels.length > 0 && levels.every(isHdr);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The decision, cheapest correct answer first.
|
|
48
|
+
*
|
|
49
|
+
* Pure and taking booleans rather than a Screen or a backend, so every branch is
|
|
50
|
+
* provable without a device. The device answers two questions and this answers the
|
|
51
|
+
* rest.
|
|
52
|
+
*
|
|
53
|
+
* `backendCanToneMap` is not a platform constant: the same browser answers
|
|
54
|
+
* differently by codec, by decoder, and by whether hardware decoding is in use.
|
|
55
|
+
*/
|
|
56
|
+
export function hdrDecision(levels, displayHdr, backendCanToneMap, fallback = 'play') {
|
|
57
|
+
if (displayHdr)
|
|
58
|
+
return { kind: 'as-is' };
|
|
59
|
+
const ceiling = hdrAbrCeiling(levels, displayHdr);
|
|
60
|
+
if (ceiling !== null) {
|
|
61
|
+
return {
|
|
62
|
+
kind: 'cap-to',
|
|
63
|
+
level: ceiling,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
// An ordinary SDR item on an SDR screen. An empty ladder lands here too, which
|
|
67
|
+
// is right — a backend that has not enumerated its rungs yet, or a progressive
|
|
68
|
+
// file with no ladder, must not be refused.
|
|
69
|
+
if (!isHdrUnplayable(levels, displayHdr))
|
|
70
|
+
return { kind: 'as-is' };
|
|
71
|
+
if (backendCanToneMap)
|
|
72
|
+
return { kind: 'tone-map' };
|
|
73
|
+
return fallback === 'play' ? { kind: 'play-unconverted' } : { kind: 'refuse' };
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=hdr-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hdr-policy.js","sourceRoot":"","sources":["../../../src/adapters/quality/hdr-policy.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,uCAAuC;AACvC,EAAE;AACF,4EAA4E;AAC5E,EAAE;AACF,uCAAuC;AACvC,gFAAgF;AAmDhF,SAAS,KAAK,CAAC,KAAmB;IACjC,OAAO,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC;AACrC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAAC,MAAmC,EAAE,UAAmB;IACrF,IAAI,UAAU;QACb,OAAO,IAAI,CAAC;IACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QACtB,OAAO,IAAI,CAAC;IAEb,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAClD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QACnB,OAAO,IAAI,CAAC;IAEb,+EAA+E;IAC/E,gFAAgF;IAChF,gFAAgF;IAChF,yEAAyE;IACzE,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACjC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;QACjC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QAEpC,IAAI,MAAM,KAAK,UAAU;YACxB,OAAO,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAE3C,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAClE,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,eAAe,CAAC,MAAmC,EAAE,UAAmB;IACvF,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CAC1B,MAAmC,EACnC,UAAmB,EACnB,iBAA0B,EAC1B,WAA6B,MAAM;IAEnC,IAAI,UAAU;QACb,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAE1B,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO;YACN,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,OAAO;SACd,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,+EAA+E;IAC/E,4CAA4C;IAC5C,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC;QACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAE1B,IAAI,iBAAiB;QACpB,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAE7B,OAAO,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAChF,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { QualityLevel } from '../../types/tracks.js';
|
|
2
|
+
/**
|
|
3
|
+
* What to do when a 4K rung meets a 740px-wide player.
|
|
4
|
+
*
|
|
5
|
+
* Adaptation climbed the ladder on bandwidth alone, so a pane a fifth of the
|
|
6
|
+
* screen wide pulled a 3840-wide rendition and threw most of it away in the
|
|
7
|
+
* scaler — paid for three times over, in bytes, in decode and in battery.
|
|
8
|
+
*
|
|
9
|
+
* `hls.js` ships `capLevelToPlayerSize` for this and it stays off deliberately:
|
|
10
|
+
* `autoLevelCapping` is already written from `hdr-policy`'s ceiling, and two
|
|
11
|
+
* writers to one property is a bug waiting for a resize. The rule lives here so
|
|
12
|
+
* the Kotlin and Swift ports mirror one decision rather than one decision and
|
|
13
|
+
* one library's private heuristic.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* The smallest rung that still covers the pane, or null when nothing should cap.
|
|
17
|
+
*
|
|
18
|
+
* Smallest rather than largest: a rung above the pane is bytes the scaler
|
|
19
|
+
* discards, and a rung below it upscales into a soft picture, which is the
|
|
20
|
+
* mistake a viewer actually notices.
|
|
21
|
+
*
|
|
22
|
+
* Null on an unmeasured pane, on an empty ladder, and when the covering rung is
|
|
23
|
+
* already the tallest thing on offer — a cap that changes nothing still narrows
|
|
24
|
+
* what adaptation may pick if anything about the comparison is subtly wrong, and
|
|
25
|
+
* the safest constraint is the one not applied. The same reason `hdrAbrCeiling`
|
|
26
|
+
* returns null on a ladder with no HDR in it.
|
|
27
|
+
*/
|
|
28
|
+
export declare function sizeAbrCeiling(levels: ReadonlyArray<QualityLevel>, paneWidthPx: number, paneHeightPx: number): QualityLevel | null;
|
|
29
|
+
/**
|
|
30
|
+
* The pane in device pixels, which is the unit a rendition is measured in.
|
|
31
|
+
*
|
|
32
|
+
* CSS pixels understate a phone or a HiDPI laptop by two or three times, so a
|
|
33
|
+
* ceiling computed from them caps a retina viewer to a picture visibly softer
|
|
34
|
+
* than the panel can draw. Mirrors `hls.js`'s own `contentScaleFactor`.
|
|
35
|
+
*
|
|
36
|
+
* The port deliberately does NOT do this: a Compose or UIKit surface is already
|
|
37
|
+
* handed its size in real pixels, so a second multiplication there would cap a
|
|
38
|
+
* rung too high.
|
|
39
|
+
*/
|
|
40
|
+
export declare function panePixels(element: {
|
|
41
|
+
getBoundingClientRect(): {
|
|
42
|
+
width: number;
|
|
43
|
+
height: number;
|
|
44
|
+
};
|
|
45
|
+
} | null | undefined): {
|
|
46
|
+
widthPx: number;
|
|
47
|
+
heightPx: number;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* The more restrictive of the two ceilings.
|
|
51
|
+
*
|
|
52
|
+
* Two independent reasons to cap answer different questions, so neither may
|
|
53
|
+
* overwrite the other: the lower rung satisfies both, the higher one breaks
|
|
54
|
+
* whichever constraint it clears.
|
|
55
|
+
*/
|
|
56
|
+
export declare function abrCeiling(hdr: QualityLevel | null, size: QualityLevel | null): QualityLevel | null;
|
|
57
|
+
//# sourceMappingURL=size-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"size-policy.d.ts","sourceRoot":"","sources":["../../../src/adapters/quality/size-policy.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;;;;;;;;;;GAYG;AAEH;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC7B,MAAM,EAAE,aAAa,CAAC,YAAY,CAAC,EACnC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GAClB,YAAY,GAAG,IAAI,CAyCrB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CACzB,OAAO,EAAE;IAAE,qBAAqB,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GACxF;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAgBvC;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,GAAG,YAAY,GAAG,IAAI,CAanG"}
|