docs(casting): quality filter by media bitrate + device cap

Per review: filter quality tiers by both ceilings; correct the shared
BITRATES file reference to BitrateSelector.tsx.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Uruk
2026-05-21 23:43:44 +02:00
parent 95d63e3c8a
commit 5eac91190e

View File

@@ -142,11 +142,12 @@ thinner and gives sub-project C (the file split) a clean unit to extract.
- `availableQualities` — the bitrate-cap options, a **separate axis** from version; - `availableQualities` — the bitrate-cap options, a **separate axis** from version;
this is the real `maxStreamingBitrate` transcode cap, no longer disguised as media this is the real `maxStreamingBitrate` transcode cap, no longer disguised as media
sources. It reuses the app-wide `BITRATES` constant sources. It reuses the app-wide `BITRATES` constant
(`components/BitRateSheet.tsx`) — no cast-specific list — and `BITRATES` is (`components/BitrateSelector.tsx`) — no cast-specific list — and `BITRATES` is
expanded to the fuller Jellyfin Android TV bitrate ladder so every surface (cast, expanded to the fuller Jellyfin Android TV bitrate ladder so every surface (cast,
native player, downloads) gains the extra tiers. The cast menu filters `BITRATES` native player, downloads) gains the extra tiers. The cast menu filters `BITRATES`
to tiers within the connected device's `maxVideoBitrate` (from sub-project A's to tiers at or below **both** the connected device's `maxVideoBitrate` (from
`detectCapabilities`), so only usable tiers are shown. sub-project A's `detectCapabilities`) and the media's own bitrate, so only
meaningful tiers are shown.
- `availableAudioTracks` / `availableSubtitleTracks` — derived from the **selected - `availableAudioTracks` / `availableSubtitleTracks` — derived from the **selected
version's** `MediaStreams`, not always `MediaSources[0]`. version's** `MediaStreams`, not always `MediaSources[0]`.
- Every "selected" indicator reads from `currentSelection`. - Every "selected" indicator reads from `currentSelection`.
@@ -181,7 +182,7 @@ this is consistent with audio. The `pendingSelection` covers the re-buffer gap.
| `hooks/useCastSelection.ts` | New — A3 selection state (truth + pending) | | `hooks/useCastSelection.ts` | New — A3 selection state (truth + pending) |
| `app/(auth)/casting-player.tsx` | Replace track state with `useCastSelection`; real versions + separate quality axis | | `app/(auth)/casting-player.tsx` | Replace track state with `useCastSelection`; real versions + separate quality axis |
| `components/chromecast/ChromecastSettingsMenu.tsx` | Separate Version / Quality sections; selected rows from `currentSelection` | | `components/chromecast/ChromecastSettingsMenu.tsx` | Separate Version / Quality sections; selected rows from `currentSelection` |
| `components/BitRateSheet.tsx` | Expand the shared `BITRATES` ladder (Jellyfin Android TV tiers) | | `components/BitrateSelector.tsx` | Expand the shared `BITRATES` ladder (Jellyfin Android TV tiers) |
The `BITRATES` expansion is a one-array change to a shared constant. It is The `BITRATES` expansion is a one-array change to a shared constant. It is
deliberately app-wide: the native player and downloads bitrate menus gain the same deliberately app-wide: the native player and downloads bitrate menus gain the same