@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.
Files changed (61) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/adapters/media-element/MediaElementBackend.d.ts +14 -2
  3. package/dist/adapters/media-element/MediaElementBackend.d.ts.map +1 -1
  4. package/dist/adapters/media-element/MediaElementBackend.js.map +1 -1
  5. package/dist/adapters/media-element/helpers.d.ts +11 -8
  6. package/dist/adapters/media-element/helpers.d.ts.map +1 -1
  7. package/dist/adapters/media-element/helpers.js +12 -9
  8. package/dist/adapters/media-element/helpers.js.map +1 -1
  9. package/dist/adapters/quality/display-range.d.ts +33 -0
  10. package/dist/adapters/quality/display-range.d.ts.map +1 -0
  11. package/dist/adapters/quality/display-range.js +46 -0
  12. package/dist/adapters/quality/display-range.js.map +1 -0
  13. package/dist/adapters/quality/hdr-policy.d.ts +80 -0
  14. package/dist/adapters/quality/hdr-policy.d.ts.map +1 -0
  15. package/dist/adapters/quality/hdr-policy.js +75 -0
  16. package/dist/adapters/quality/hdr-policy.js.map +1 -0
  17. package/dist/adapters/quality/size-policy.d.ts +57 -0
  18. package/dist/adapters/quality/size-policy.d.ts.map +1 -0
  19. package/dist/adapters/quality/size-policy.js +114 -0
  20. package/dist/adapters/quality/size-policy.js.map +1 -0
  21. package/dist/adapters/retry-policy/IRetryPolicy.d.ts +5 -2
  22. package/dist/adapters/retry-policy/IRetryPolicy.d.ts.map +1 -1
  23. package/dist/core/index.d.ts +1 -0
  24. package/dist/core/index.d.ts.map +1 -1
  25. package/dist/core/kit-version.js +1 -1
  26. package/dist/core/mixins/container-class-emit.d.ts.map +1 -1
  27. package/dist/core/mixins/container-class-emit.js +9 -0
  28. package/dist/core/mixins/container-class-emit.js.map +1 -1
  29. package/dist/core/mixins/device.d.ts +2 -0
  30. package/dist/core/mixins/device.d.ts.map +1 -1
  31. package/dist/core/mixins/device.js +4 -0
  32. package/dist/core/mixins/device.js.map +1 -1
  33. package/dist/core/mixins/lifecycle.d.ts.map +1 -1
  34. package/dist/core/mixins/lifecycle.js +3 -0
  35. package/dist/core/mixins/lifecycle.js.map +1 -1
  36. package/dist/core/mixins/loading.d.ts +16 -0
  37. package/dist/core/mixins/loading.d.ts.map +1 -1
  38. package/dist/core/mixins/loading.js +26 -0
  39. package/dist/core/mixins/loading.js.map +1 -1
  40. package/dist/core/mixins/queue.d.ts +14 -0
  41. package/dist/core/mixins/queue.d.ts.map +1 -1
  42. package/dist/core/mixins/queue.js +30 -3
  43. package/dist/core/mixins/queue.js.map +1 -1
  44. package/dist/core/state.d.ts +8 -0
  45. package/dist/core/state.d.ts.map +1 -1
  46. package/dist/core/state.js +1 -0
  47. package/dist/core/state.js.map +1 -1
  48. package/dist/index.d.ts +5 -0
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +3 -0
  51. package/dist/index.js.map +1 -1
  52. package/dist/testing/stub-player.d.ts.map +1 -1
  53. package/dist/testing/stub-player.js +1 -0
  54. package/dist/testing/stub-player.js.map +1 -1
  55. package/dist/types/config.d.ts +26 -0
  56. package/dist/types/config.d.ts.map +1 -1
  57. package/dist/types/device.d.ts +7 -0
  58. package/dist/types/device.d.ts.map +1 -1
  59. package/dist/types/player.d.ts +7 -1
  60. package/dist/types/player.d.ts.map +1 -1
  61. 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
- /** Provider function shape stored on every backend for auth-header resolution. */
26
- export type AuthHeaderProvider = () => string | undefined | Promise<string | undefined>;
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,kFAAkF;AAClF,MAAM,MAAM,kBAAkB,GAAG,MAC/B,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,8BAAsB,mBAAmB,CACxC,GAAG,SAAS,gBAAgB,EAC5B,QAAQ,SAAS,0BAA0B,CAC1C,SAAQ,YAAY,CAAC,QAAQ,CAAC;IAC/B,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IACxC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC;IACvB,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC;IAE/B,SAAS,CAAC,WAAW,EAAE,gBAAgB,EAAE,CAAM;IAC/C,SAAS,CAAC,WAAW,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7C,SAAS,CAAC,aAAa,EAAE,kBAAkB,CAAa;IACxD,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAS;IAEpC,SAAS,CAAC,mBAAmB,EAAE,kBAAkB,GAAG,SAAS,CAAC;gBAElD,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;IASpE;;;;OAIG;IACH,qBAAqB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAMzD;;;;;;;;;;;;;;;OAeG;IACH,SAAS,CAAC,gBAAgB,CACzB,aAAa,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,EAC5C,QAAQ,EAAE,MAAM,YAAY,GAC1B,IAAI;IAUP;;;;OAIG;IACH,SAAS,CAAC,gBAAgB,CAAC,EAAE,GAAE,gBAA+B,GAAG,IAAI;IASrE;;;;;;;;;OASG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrB,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI;IAYZ,WAAW,IAAI,MAAM;IACrB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAalC,QAAQ,IAAI,MAAM;IAKlB,cAAc,IAAI,UAAU;IAI5B,QAAQ,IAAI,UAAU;IAItB,YAAY,IAAI,MAAM;IACtB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAUhC;;;;;;;;;OASG;IACH,MAAM,IAAI,MAAM;IAChB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAS3B;;;OAGG;IACH,IAAI,IAAI,IAAI;IAIZ,MAAM,IAAI,IAAI;IAMd;;;;OAIG;IACH,WAAW,IAAI,IAAI;IAKnB,YAAY,IAAI,IAAI;IAKpB,WAAW,IAAI,kBAAkB;IAMjC,aAAa,IAAI,WAAW;IAItB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD,SAAS,IAAI,MAAM;IAInB,SAAS,IAAI,SAAS,GAAG,SAAS;IAI5B,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,YAAY,IAAI,GAAG;CAGnB"}
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":"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"}
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, authParam: string | undefined, hlsConfig: HlsLoaderConfig): HlsHandle | undefined;
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 stamps `Authorization: <headerValue>`
59
- * onto every manifest / segment request when a value is present.
59
+ * Build an hls.js `xhrSetup` callback that asks `provider` what to send with
60
+ * each manifest / segment request.
60
61
  *
61
- * Centralises the closure so every backend's `HlsLoaderConfig.xhrSetup` shares
62
- * one implementation instead of re-writing the same conditional
63
- * `setRequestHeader` call at each call site.
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(headerValue: string | undefined): (xhr: XMLHttpRequest) => void;
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":"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"}
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, authParam, hlsConfig) {
45
+ export function attachHlsOrFallback(HlsModule, el, url, headerValue, hlsConfig) {
46
46
  const Hls = HlsModule;
47
47
  if (!Hls.isSupported()) {
48
- el.src = appendAuthTokenParam(url, authParam);
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 stamps `Authorization: <headerValue>`
59
- * onto every manifest / segment request when a value is present.
58
+ * Build an hls.js `xhrSetup` callback that asks `provider` what to send with
59
+ * each manifest / segment request.
60
60
  *
61
- * Centralises the closure so every backend's `HlsLoaderConfig.xhrSetup` shares
62
- * one implementation instead of re-writing the same conditional
63
- * `setRequestHeader` call at each call site.
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(headerValue) {
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":"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"}
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"}