androidx / androidx/media

Add Support for Dynamic HDR Metadata Format Selection

Open
#1,941 0 comments 0 reactions 1 assignee View on GitHub

@microkatz is already working on this.

Since Dec 6, 2024.

enhancement needs triage
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:

  1. Configuration Option: Add a new setting (e.g., setPreferredHDRFormat) allowing users to prioritize HDR10+, Dolby Vision, or none.

  2. 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.

  1. 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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.