New user preference to force enable or disable common HDR and Dolby Vision formats (#1644)

Description
Adding per-format HDR override preferences (HDR10, HDR10+, Dolby Vision
Profile 5/7/8) to control device compatibility information sent to the
Jellyfin server, so users can force specific formats on or off
independently instead of disabling Dolby Vision as a whole.

Related issues
This is a common problem across the Jellyfin ecosystem, but there isn't
a specific issue for Wholphin. My experience is the issue is FireTV
(model and generation) + TV dependent + media dependent. I tested videos
from
https://kodi.wiki/view/Samples with the same DOVIWithHDR10 flag that
worked while other movies I have with It is a very frustrating user
experience and the current workaround of setting the bitrate really low
to force a transcode is sub-optimal IMO as it lowers the video quality.
This allows the user to maintain full quality while disabling only the
specific format(s) causing problems.

https://github.com/jellyfin/jellyfin-androidtv/issues/4021
https://github.com/jellyfin/jellyfin-androidtv/issues/4892
https://github.com/nova-video-player/aos-AVP/issues/1503

https://www.reddit.com/r/jellyfin/comments/12jqoxh/dolby_vision_video_not_working_on_fire_stick_4k/

Testing

<!-- Describe how this change was tested and on what device(s) -->
FireTV 4K (gen 1) + Vizio
FireTV 4K Max (gen 1) + LG
FireTV 4K Max (gen 2) + Vizio
FireTV (gen 1) + Olevia


AI or LLM usage
Claude code assisted and wrote much of the code in this PR. I've
reviewed it all and run the pre-commit linting and formatting.

---------

Co-authored-by: Damontecres <damontecres@gmail.com>
This commit is contained in:
Jeff Whiting 2026-10-13 13:41:53 -06:00 • committed by GitHub
parent f01c5d367c
commit 9f557416ea
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 468 additions and 37 deletions

View file

@ -173,7 +173,7 @@
<string name="video_scale">Video Scale</string>
<string name="video">Video</string>
<string name="videos">Videos</string>
<string name="watch_live">Watch live</string>g
<string name="watch_live">Watch live</string>
<plurals name="years_old">
<item quantity="zero">%1$d years old</item>
<item quantity="one">%1$d year old</item>
@ -413,6 +413,19 @@
<string name="image_cache_size">Image disk cache size (MB)</string>
<string name="disable_audio_offload">Disable audio hardware offload</string>
<string name="disable_audio_offload_summary">Disabling offloading audio decoding may fix playback freezes on some devices</string>
<string name="hdr_formats">HDR formats</string>
<string name="hdr10_override">HDR10</string>
<string name="hdr10_plus_override">HDR10+</string>
<string name="dovi_profile_5">Dolby Vision Profile 5</string>
<string name="dovi_profile_7">Dolby Vision Profile 7</string>
<string name="dovi_profile_8">Dolby Vision Profile 8</string>
<string name="force_enable">Force enable</string>
<string name="force_disable">Force disable</string>
<string-array name="hdr_override_modes">
<item>@string/automatic</item>
<item>@string/force_enable</item>
<item>@string/force_disable</item>
</string-array>
<string name="view_options">View options</string>
<string name="columns">Columns</string>
<string name="spacing">Spacing</string>