Skip to content

New user preference to disable Dolby Vision#1644

Open
whitingj wants to merge 5 commits into
damontecres:mainfrom
whitingj:main
Open

New user preference to disable Dolby Vision#1644
whitingj wants to merge 5 commits into
damontecres:mainfrom
whitingj:main

Conversation

@whitingj

@whitingj whitingj commented Jun 29, 2026

Copy link
Copy Markdown

The PR adds a user preference to control dolby vision support in device profiles. This gives the user the ability to turn off problematic dolby vision media without relying on KnownDefects.kt to handle all permutations.

Background:
My household uses FireTV for streaming our media. I have several different models across multiple generations connected to different brands of TVs. It has been a very frustrating experience trying to get Dolby Vision media to play on those devices. I frequently get a black screen when play DV media by it various by model and TV. This seems to be a very common issue that continues to cause people problems. I tried various fixes including filtering DV codecs with mixed success (it worked on some FireTV / TV combos but not others). Since the problem varies depending on the TV and media, I thought it best to give the user a preference to disable DV compatibility and let the server transcode.

Feature Changes:

  • AppPreference.kt: Added the new user preference. The preference is labeled "Disable Dolby Vision" and defaults to "Off". It provides two other options "Disable All Dolby Vision" and "Disable Dolby Vision with HDR10". The first removes all Dolby Vision compatibility, when the second only removes compatibility with hybrid Dolby Vision/HDR10 media. (See Screen Shoot)
  • DeviceProfileService.kt: Glues up the new user preference with DeviceProfileUtils.kt.
  • DeviceProfileUtils.kt: In HEVC and AV1 unsupported buildSet it will apply the user preference and mark the device as incompatible.
  • WholphinDataStore.proto: Updates to the protobuf to store the new user preference.
  • strings.xml: The new strings I introduced for the prefence.

Description

Adding a new user preference to disable Dolby Vision when sending device compatibility information to the Jellyfin server.

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 the same flag didn't work. It is a very frustrating user experience and the current work around 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 DV.

jellyfin/jellyfin-androidtv#4021
jellyfin/jellyfin-androidtv#4892
nova-video-player/aos-AVP#1503
https://www.reddit.com/r/jellyfin/comments/12jqoxh/dolby_vision_video_not_working_on_fire_stick_4k/

Testing

FireTV 4K (gen 1) + Vizio
FireTV 4K Max (gen 1) + LG
FireTV 4K Max (gen 2) + Vizio
FireTV (gen 1) + Olevia

Screenshots

Preference-Choices Prefence

AI or LLM usage

I used Claude Code to help guide me through the unfamiliar repo and to prototype solutions. The current code in the PR is my own.

whitingj and others added 4 commits June 29, 2026 13:00
…ofiles. This gives the user the ability to turn off problematic dolby vision media without relying on KnownDefects.kt to handle all permutations. Additionally, changes were made to workflows/main.yaml and build.gradle.kts making it easier for people who fork the repo to build and have actions.

@damontecres damontecres left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR has build script changes unrelated to the suggested feature. I will review this PR once that is fixed.

@whitingj

Copy link
Copy Markdown
Author

Removed the changes to the build and github actions. Let me know if I need to make any other changes before getting a review. Thanks.

@whitingj
whitingj requested a review from damontecres June 30, 2026 18:43
@xAphex

xAphex commented Jul 10, 2026

Copy link
Copy Markdown

At this point there needs to be a Dolby Vision section that includes all Dolby vision settings, or else it clutters settings.

image

another thing, when you select disable dolby vision with hdr10, does it direct play HDR10 or transcodes it?

@damontecres damontecres left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll admit that I'm not super familiar with Dolby Vision and all of the peculiarities with it, but I do agree that it seems accurately detecting support is difficult so this seems useful.

Thanks for the contribution!

summary = R.string.force_dovi_profile_7_summary,
)

val DoviDeviceCompatibilityPref =

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd like to make this an experimental setting, see #1624 for an example.

when (doviDeviceCompatibilityMode) {
DoviDeviceCompatibilityMode.DISABLE_DOVI_ALL -> {
add(VideoRangeType.DOVI.serialName)
add(VideoRangeType.DOVI_WITH_HDR10.serialName)

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does DOVI_WITH_HLG and DOVI_WITH_SDR need to be considered here?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for pointing out these formats. Since the preference is disable all dolby vision, I think we should it should report the device as being incompatible with these formats (even through I haven't had a problem with it). The less restrictive option would continue to only disable the dolby vision with hdr10(+) formats.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think reporting all of them as incompatible makes sense

add(VideoRangeType.DOVI_WITH_HDR10.serialName)
if (jellyfinTenEleven) add("DOVIWithHDR10Plus")
}
else -> {}

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use exhaustive enum list instead of else so potential future changes force a compiler error.

add("DOVIWithELHDR10Plus")
}
}
else -> {}

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as above

</string-array>
<string-array name="dovi_device_compatibility_mode_descriptions">
<item>Allow Dolby Vision media</item>
<item>Force transcoding by reporting the device as incompatible with all Dolby Vision media</item>

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<item>Force transcoding by reporting the device as incompatible with all Dolby Vision media</item>
<item>Force transcoding all Dolby Vision media</item>

<string-array name="dovi_device_compatibility_mode_descriptions">
<item>Allow Dolby Vision media</item>
<item>Force transcoding by reporting the device as incompatible with all Dolby Vision media</item>
<item>Force transcoding by reporting the device as incompatible with Dolby Vision and HDR10/HDR10+ hybrid media</item>

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<item>Force transcoding by reporting the device as incompatible with Dolby Vision and HDR10/HDR10+ hybrid media</item>
<item>Force transcoding Dolby Vision with HDR10/HDR10+ hybrid media</item>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants