feat(dash): flag dv profile 8 tracks from supplementalCodecs and use hdr10+dv as the hybrid

This commit is contained in:
imSp4rky
2026-10-18 17:18:11 -06:00
parent 2cc5e44957
commit 1a8e633fdc
11 changed files with 232 additions and 43 deletions
+2 -1
View File
@@ -454,7 +454,8 @@ the API surface.
### Dolby Vision and hybrid
Two DV mechanisms sit on top of the track model. **DV fixup** re-exposes DV signalling on
HLS streams that carry a valid DV RPU but advertise plain HEVC (`dv_compatible_bitstream`).
HLS and DASH streams that carry a valid DV RPU but advertise plain HEVC, with DV only in the
supplemental codecs (`dv_compatible_bitstream`). `--list` shows such a track as `HDR10+DV` or `HDR10P+DV`.
**Hybrid** processing (`Video.Range.HYBRID`) selects an HDR10(+) base and a DV donor,
extracts the RPU with `dovi_tool`, and injects it onto the base layer, to make a single
track that carries both HDR10 metadata and the DV RPU. Both are automatic once the
+20 -4
View File
@@ -145,6 +145,21 @@ unshackle dl -v hevc,avc EXAMPLE 81234567
unshackle dl -q 2160 -r HDR10,DV EXAMPLE '...'
```
`--list` labels a track that carries a second format as `<range>+<format>`:
- The first part is the range that `-r` selects the track by.
- The second part is the format that the track also carries.
- The `+` only joins the two parts. unshackle writes HDR10+ as `HDR10P`, so `HDR10+DV` is HDR10 with
Dolby Vision, not HDR10+ with Dolby Vision.
| Label | Track | Selected by |
| --- | --- | --- |
| `DV+HDR10P` | A Dolby Vision track that also carries HDR10+ | `-r DV` |
| `HDR10+DV` | An HDR10 track whose frames also carry a Dolby Vision profile 8 RPU | `-r HDR10` |
| `HDR10P+DV` | An HDR10+ track whose frames also carry a Dolby Vision profile 8 RPU | `-r HDR10P` |
The output file of a track with a Dolby Vision profile 8 RPU plays as Dolby Vision on a DV screen.
!!! warning "HYBRID requires dovi_tool"
`-r HYBRID` makes a single hybrid track by injecting the Dolby Vision RPU
metadata onto an HDR10/HDR10+ base layer with **dovi_tool**.
@@ -157,10 +172,11 @@ unshackle dl -q 2160 -r HDR10,DV EXAMPLE '...'
and goes on with the other resolutions of the title. When no hybrid file at all was made,
the title fails.
A DV track that carries HDR10+ (`DV+HDR10P` in `--list`) is already a hybrid. At a resolution
that has one, `-r HYBRID` selects the DV+HDR10P track with the highest bitrate (the lowest with
`--worst`) and muxes it as it is, with no base track and no dovi_tool step. The other
resolutions get a hybrid that unshackle makes.
A track that is `DV+HDR10P`, `HDR10+DV` or `HDR10P+DV` in `--list` already carries Dolby Vision and an HDR10
or HDR10+ base, so it is already a hybrid. At a resolution that has one, `-r HYBRID` selects it
and muxes it as it is, with no base track and no dovi_tool step. A track that carries HDR10+
comes first, then the highest bitrate (the lowest with `--worst`). The other resolutions get a
hybrid that unshackle makes.
To keep an HDR10+ deliverable *alongside* the hybrid, request both ranges:
`-r HYBRID,HDR10P`. `-r HYBRID` on its own muxes only the merged hybrid.