The prober never asks for the frame HDR10+ announces itself in #30
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Settings::supports_first_video_frameis never measured, so the frame is neverread.
Ffprobe::supports_option(crates/jellyfin-ffmpeg/src/prober.rs) exists andis right, and nothing outside the crate's own tests calls it. The only place
that builds a
prober::Settingsfor a running server leaves the flag at itsfalsedefault, andargumentsonly appends-show_frames -only_first_vframewhen it is true — so no probe this server makes ever asks for the frame.
That frame is where HDR10+ and Dolby Vision announce themselves. Upstream
measures the option once at startup
(
MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs,CheckSupportedProberOption)and passes it for every local video afterwards, so a file whose dynamic range a
client would be told about is one this server reads as plain.
crates/jellyfin-ffmpeg/README.mdalready describes the flag as the oneargument measured from the binary rather than derived, which is what it will be
once something measures it.
Fixed in the merge of
fix/30-hdr10plus.The binary is asked once at startup whether it takes
only_first_vframe, asthe encoder's own capabilities are measured, and the answer is handed to every
probe a scan makes. On this machine it answers no — the option is Jellyfin's
own build rather than a distro one — which is the case the flag exists for.
While wiring it: the frame was being asked for, parsed into
hdr10_plus_present_flag, and then dropped on the write. The insert named 46columns and
Hdr10PlusPresentFlagwas not one of them, though every DolbyVision sibling was — so a video carrying HDR10+ read exactly like one without,
and
/ItemsansweredHDR10where upstream answersHDR10Plus. That is thewhole of what this issue was worth, and it now has a test:
crates/jellyfin-db/tests/streams.rswrites a stream carrying everydynamic-range field and reads the columns back.