Add Support for Dynamic HDR Metadata Format Selection
@microkatz is already working on this.
Since Dec 6, 2024.
- Dominant language
- Java
- Stars
- 3k
- Forks
- 955
- Avg merge
- 12d 14h
- Merged PRs (30d)
- 2
Description
On Samsung TVs which don't support Dolby Vision, ExoPlayer currently defaults to HDR10 when both Dolby Vision and HDR10+ metadata are present in a video. On devices or displays that support HDR10+ but not Dolby Vision (e.g., Google Chromecast with Google TV + Samsung TVs), this behavior causes HDR10+ metadata to be ignored and playback falls back to HDR10.
Proposed Solution:
Introduce a user-configurable option to prioritize dynamic HDR metadata formats, similar to what has been implemented in Kodi. Here's the proposed functionality:
-
Configuration Option: Add a new setting (e.g., setPreferredHDRFormat) allowing users to prioritize HDR10+, Dolby Vision, or none.
-
Implementation:
For Dolby Vision: Filter out Dolby Vision NAL types.
For HDR10+: Parse SEI messages and remove SMPTE ST 2094-40 metadata if HDR10+ is not selected.
- Ensure playback respects the user's preferred dynamic metadata format and falls back to HDR10 only when no supported dynamic format is available.
Motivation:
Devices like Google Chromecast with Google TV, when paired with Samsung TVs (which only support HDR10+), fail to play HDR10+ metadata due to Dolby Vision being prioritized. This issue impacts compatibility and user experience on platforms where HDR10+ is critical.
Reference Implementation:
Kodi added a similar setting called "Allowed HDR Dynamic Metadata Formats," which filters out undesired metadata types during playback. Details of their implementation can be found here.
https://github.com/xbmc/xbmc/pull/24584
Benefits:
Enables HDR10+ playback on devices that lack Dolby Vision support.
Improves compatibility for users with Samsung TVs and Google devices. This issue also affects Fire TV Stick Max.
I’d be happy to provide additional details or testing support if needed.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.