Skip to content

Feature Request: Add Dolby Vision compatibility mode (On-the-fly Profile 7 to 8.1 conversion) #1704

Description

@crazingineer

Stremio Version
Stremio 1.9.5 and Google TV (based on Android 14)

Is your feature request related to a problem? Please describe.
Yes, it is. I'm always frustrated when I try to play UHD Blu-ray remux files, as almost all of them use Dolby Vision Profile 7. Unfortunately, hardware support for Profile 7 is practically non-existent on the vast majority of Android TV / Google TV devices (including my TCL C7K). When attempting to play a Profile 7 remux via Stremio's internal player, the playback simply falls back to standard HDR10, meaning users completely lose out on the dynamic metadata.

Describe the solution you'd like
I would love to see a "Dolby Vision compatibility mode" toggle added to Stremio's playback settings (similar to the one recently implemented in Kodi v21). When enabled, this feature would convert Dolby Vision Profile 7 to Profile 8.1 on the fly, entirely on the client side. This allows the native TV hardware decoder to successfully trigger Dolby Vision instead of defaulting to HDR10.

Describe alternatives you've considered
Currently, the main workaround is using an external player (like Kodi or Vimu) that already has this compatibility feature built-in. However, using an external player breaks Stremio's resume point and watch-tracking functionality, which is highly inconvenient. The only other alternative is manually pre-processing and converting the files using external computer scripts (like dovi_tool) before watching, which is incredibly time-consuming.

Additional context
For reference on how this could be implemented, Kodi achieves this through on-the-fly bitstream manipulation before passing the stream to the hardware decoder:

  • NAL Unit Parsing: The player parses the HEVC Network Abstraction Layer Units (NALUs) as the file is read.
  • RPU Extraction: It extracts the Reference Processing Unit (RPU), which holds the Dolby Vision dynamic metadata.
  • Enhancement Layer Discard: Because Profile 8.1 doesn't support an Enhancement Layer (EL), the player drops the EL video data (if it's a Full Enhancement Layer release) while retaining the Base Layer (BL) and the RPU.
  • Header Modification: The player rewrites the metadata header within the RPU, changing the flag from Profile 7 to Profile 8.
  • Bitstream Injection: The modified RPU is injected back into the HEVC bitstream and handed off to the Android MediaCodec API.

Implementing a similar pipeline in Stremio's internal ExoPlayer/libVLC would be a massive quality-of-life upgrade for users with local home theater setups!

(Disclaimer: Please note that a portion of the text in this issue, specifically the technical breakdown of how Kodi handles the conversion, was generated with the help of AI to ensure the feature request was articulated clearly and accurately.)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions