[TESTING] Vero V: Dolby Vision TV led support

Overview

In February this year, we made testing for Dolby Vision Profile 5 tonemapping available for Vero V devices. This resolved issues playing Profile 5 content which does not have an HDR fallback layer and otherwise resulted in pink and green colours during playback. This also enabled users without a Dolby Vision display to enjoy this content in HDR or SDR.

We received positive feedback, but since the launch of Vero V it has been apparent that users would like native Dolby Vision output and not just for the content to be output as HDR. So for some time, we’ve been thinking of how to achieve this. We kept quiet for a while, as our plan is always to underpromise and overdeliver.

Goals

When considering such an implementation, we have a few key objectives:

  • Listen to our customers and give them what they ask for (Dolby Vision)
  • Implement Dolby Vision in a way that does not impede on user freedoms that are associated with OSMC
  • Implement Dolby Vision in a way that works well and for many years to come
  • Support existing customer base via the form of a software update
  • Enable customers to make best use of their investment in a DV display
  • Support playback of any video format, including ‘legacy’ codecs that many customers have in their collection but other players have deprecated

Implementation

We are happy to implement display-led (TV-led) Dolby Vision with support for CMv2.9 and CMv4.0. Currently, the status of this implementation is as follows:

Profile Expected Behaviour
4 Plays SDR base only, even to a DV compatible display
5 Plays well on DV displays as well as HDR displays as it did previously, but now passing through display management metadata to DV displays.
7 Plays well with display management metadata passed on to DV displays. Dual tracks are merged to a single track. If playing FEL, this is discarded with BL + RPU used only.
8.1 Plays well with display management metadata passed on to DV displays.
8.4 Plays the HLG base layer only even to a DV display

Advantages and considerations

Considering the original goals outlined above, we believe we have achieved them as far as possible.

Because we design and commission our own hardware, we are able to make use of Vero’s characteristics for a solution which should stand us in good stead going forward. We do not rely on a proprietary kernel module supplied from the SoC vendor for an Android system. That approach was rejected because we could not be sure features would not be lost as we move to newer kernels and, in time, newer hardware. We would be dependent on a ‘black box’ over which we would have no control. We would also be subject to licensing conditions which we found onerous. While this means player-led and VS engine conversions will not be supported, we believe those features will become less important as DV support comes to more affordable TVs.

With our approach, we aren’t the first to support DV with Kodi on AMLogic but we were able to do so in a way that is best for us as developers and in turn our users. We expect to be able to move to a newer kernel without loss of functionality and we can actively investigate and resolve issues that arise directly.

Invitation to test

We’d like to now invite users to publicly test this functionality.

To test these improvements:

  1. Login via the command line
  2. Run the following command to add the staging repository:
    echo 'deb http://apt.osmc.tv bullseye-devel main' | sudo tee /etc/apt/sources.list.d/osmc-devel.list
  3. Run the following commands to update: sudo apt-get update && sudo apt-get dist-upgrade && reboot
  4. Your system should have have received the update.

I also recommend you remove /etc/apt/sources.list.d/osmc-devel.list after updating.

This will deactivate the staging repository. You can do so with the following command:
sudo rm /etc/apt/sources.list.d/osmc-devel.list.

Please note that we will automatically disable this update channel after 14 days on your device in case you forget to do so to ensure that your system reverts to the stable update channel.

Frequently asked questions

What is Dolby Vision?

Dolby Vision (DV) is a technology for High Dynamic Resolution (HDR) video. Its objective is to:

  • re-create (using the ‘composer’) as close as possible the 12-bit video that the colourist optimised in the editing studio
  • tonemap the result to suit the user’s display (using the ‘display mapper’). The instructions for this (metadata) are generated by algorithm, but with adjustments the colourist may make while monitoring on a typical consumer TV.

The main monitor used in the editing suite will have a very high dynamic range with maximum peak luminance of 1000 nits or more. Domestic TVs, especially cheaper ones and OLEDs will not be that bright so the signal needs to be tonemapped to avoid losing detail in the highlights while maintaining contrast in the mid-tones. Note also that no displays can achieve their peak luminance over the whole screen at once. Ideally, the tonecurve is different for each scene and this is what DV does using dynamic metadata.

What is a Dolby Vision Profile?

Blu-rays with DV use ‘Profile 7’. The video has a ‘base layer’, compatible with HDR10 and an ‘enhancement layer’ which is merged with the base layer in the composer. The enhancement layer contains the instructions for the merge and the dynamic metadata for the display mapper.

Profile 7 video is what you get by backing up your DV Blu-rays to a hard disc (usually MKV format).

Streaming services may use ‘Profile 5’. This is a system optimised for efficient streaming. There is only one layer which is a proprietary format in an ‘IPT-PQ-c2’ colourspace. This needs to be converted to a format that can be sent via HDMI to the display. The stream includes dynamic metadata for the conversion and the display mapper. Software is available to capture Profile 5 streams and store them as files.

‘Profile 8’ is a single-layer system in which the layer is compatible with an existing video format - HDR10 (8.1), HLG (8.4) or SDR (8.2). Profile 8.1 files have often been converted from Profile 7. iPhones can record in profile 8.4.

What do TV-led and player-led mean?

With DV, the composer part is always in the player. The display mapper may be in the player (player-led mode) or in the display (display-led or TV-led mode). Players supporting player-led can be tricked into converting DV to ‘Low Latency DV’ (similar to HDR10) and sending that to a non-DV display. TV-led should be the preferred method for users with a DV display since the display manufacturer should know best how to tailor the video for his hardware.

What are FEL and MEL?

In Profile 7 video, the enhancement layer may be ‘full’ (FEL) or ‘minimum’ (MEL). FEL includes a video stream which modifies every pixel of the base layer. MEL is equivalent to Profile 8.1. FEL requires sophisticated decoder hardware and support for it seems to have been dropped in newer kernels and Android versions. Software is available which can merge a FEL into the base layer to produce a Profile 8.1 video.

How can I play Dolby Vision with OSMC?

To play Dolby Vision in the best possible quality you need a TV/display that supports Dolby Vision Standard Mode. With other displays, the quality can only be as good as HDR10. Early Sonys and some Panasonics offer only Low Latency Mode which we do not support.

Vero V devices will pass through Profile 7 and 8.1 video together with the display mapper metadata for a DV display to operate in TV-led mode. Non-DV displays will be sent the base layer only - as-is for an HDR display or tonemapped for an SDR display.

Vero V devices will apply the shaping metadata to a Profile 5 stream. The result will be sent to a DV display with the display mapper metadata, or to non-DV displays as HDR10 or (tonemapped) SDR as appropriate.

OSMC on Vero 4K, Vero 4k + and Raspberry Pi does not support Dolby Vision.

What about HDR10+? What support is there for my Samsung?

Some titles are available with both HDR10+ and DV metadata. These will play as DV on a DV display, HDR10+ on a TV that supports HDR10+ but not DV (Samsung) and HDR10/SDR otherwise.

We might be able to convert DV to HDR10+ in the future. But the metadata formats are very different so it’s unclear how good that conversion can be.

Thank you to those that tested

Many thanks go out to those that tested this exciting new functionality in advance and gave vital feedback that allowed us to improve things to a state where they can be tested publicly.

7 Likes

I’ve run into a problem updating to this test build from the earlier test builds, and now I have no Dolby Vision support. On startup I get a warning in the upper left tat says “Failed to start Dolby Vision firmware loader.” Here’s what happened during the install:

osmc@osmc-lr:~$ echo 'deb http://apt.osmc.tv bullseye-devel main' | sudo tee /etc/apt/sources.list.d/osmc-devel.list
deb http://apt.osmc.tv bullseye-devel main
osmc@osmc-lr:~$ sudo apt-get update && sudo apt-get dist-upgrade && reboot
Hit:1 https://deb.debian.org/debian bullseye InRelease
Get:2 https://security.debian.org bullseye-security InRelease [27.2 kB]                
Get:3 https://deb.debian.org/debian bullseye-updates InRelease [44.1 kB]                                               
Get:4 https://ftp.fau.de/osmc/osmc/apt bullseye-devel InRelease [4,713 B]                                              
Get:6 https://security.debian.org bullseye-security/main armhf Packages [319 kB]
Hit:5 https://ftp.fau.de/osmc/osmc/apt bullseye InRelease
Get:7 https://security.debian.org bullseye-security/main arm64 Packages [322 kB]
Get:8 https://security.debian.org bullseye-security/main Translation-en [211 kB]
Get:9 https://ftp.fau.de/osmc/osmc/apt bullseye-devel/main armhf Packages.diff/Index [2,023 B]
Ign:9 https://ftp.fau.de/osmc/osmc/apt bullseye-devel/main armhf Packages.diff/Index
Get:10 https://ftp.fau.de/osmc/osmc/apt bullseye-devel/main arm64 Packages.diff/Index [2,023 B]
Ign:10 https://ftp.fau.de/osmc/osmc/apt bullseye-devel/main arm64 Packages.diff/Index
Get:11 https://ftp.fau.de/osmc/osmc/apt bullseye-devel/main armhf Packages [33.1 kB]
Get:12 https://ftp.fau.de/osmc/osmc/apt bullseye-devel/main arm64 Packages [72.9 kB]
Fetched 1,039 kB in 2s (447 kB/s)    
Reading package lists... Done
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
  vero564-image-4.9.269-72-osmc:arm64
The following packages will be upgraded:
  vero5-mediacenter-osmc vero5-secureosmc-osmc vero5-userland-osmc vero564-image-4.9.269-70-osmc:arm64
  vero564-kernel-osmc:arm64
5 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 130 MB/154 MB of archives.
After this operation, 87.3 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 https://ftp.fau.de/osmc/osmc/apt bullseye-devel/main armhf vero5-userland-osmc armhf 1.3.0 [11.6 MB]
Get:2 https://ftp.fau.de/osmc/osmc/apt bullseye-devel/main armhf vero5-mediacenter-osmc armhf 21.1.0-10 [93.9 MB]
Get:3 https://ftp.fau.de/osmc/osmc/apt bullseye-devel/main armhf vero5-secureosmc-osmc armhf 1.5.0-1 [518 kB]          
Get:4 https://ftp.fau.de/osmc/osmc/apt bullseye-devel/main arm64 vero564-image-4.9.269-72-osmc arm64 4.9.269-72-osmc [23.9 MB]
Get:5 https://ftp.fau.de/osmc/osmc/apt bullseye-devel/main arm64 vero564-kernel-osmc arm64 3.9.314 [1,084 B]           
Fetched 130 MB in 20s (6,524 kB/s)                                                                                     
(Reading database ... 39780 files and directories currently installed.)
Preparing to unpack .../0-vero5-userland-osmc_1.3.0_armhf.deb ...
Unpacking vero5-userland-osmc (1.3.0) over (1.2.9) ...
dpkg: error processing archive /tmp/apt-dpkg-install-q8adsp/0-vero5-userland-osmc_1.3.0_armhf.deb (--unpack):
 trying to overwrite '/lib/firmware/osmc/dovi.ko_enc', which is also in package vero5-secureosmc-osmc 1.4.0-1
dpkg-deb: error: paste subprocess was killed by signal (Broken pipe)
Preparing to unpack .../1-vero5-mediacenter-osmc_21.1.0-10_armhf.deb ...
Unpacking vero5-mediacenter-osmc (21.1.0-10) over (21.1.0-9) ...
Preparing to unpack .../2-vero5-secureosmc-osmc_1.5.0-1_armhf.deb ...
Unpacking vero5-secureosmc-osmc (1.5.0-1) over (1.4.0-1) ...
Preparing to unpack .../3-vero564-image-4.9.269-70-osmc_4.9.269-70-osmc_arm64.deb ...
Unpacking vero564-image-4.9.269-70-osmc:arm64 (4.9.269-70-osmc) over (4.9.269-70-osmc) ...
Selecting previously unselected package vero564-image-4.9.269-72-osmc:arm64.
Preparing to unpack .../4-vero564-image-4.9.269-72-osmc_4.9.269-72-osmc_arm64.deb ...
Unpacking vero564-image-4.9.269-72-osmc:arm64 (4.9.269-72-osmc) ...
Preparing to unpack .../5-vero564-kernel-osmc_3.9.314_arm64.deb ...
Unpacking vero564-kernel-osmc:arm64 (3.9.314) over (3.9.312) ...
Errors were encountered while processing:
 /tmp/apt-dpkg-install-q8adsp/0-vero5-userland-osmc_1.3.0_armhf.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

I tried downgrading and then upgrading again, and it didn’t help, nor did a cold reboot. I can wipe the Vero V and start from scratch if needed, although I’d rather not.

How do I know my projector is device led? Does any device that supports Dolby vision do device led?

Player-led refers to when a device performs the role of display mapping. Vero V doesn’t do this, relying on the TV / projector do so, believing it will do a better job.

If your projector shows a DV symbol on its packaging / case, you don’t need to worry about this and things will work just fine.

I have moved to your post to the official testing thread.

Did you install the latest test build that I posted in the testing channel the other day?
If so, I think I know what the issue is.

Yup, I did.

Thanks for confirming.

It’s going to be because I moved a firmware file from vero5-secureosmc-osmc to vero5-userland-osmc when moving from test to prod.

But updating should fix this.

Can you try sudo apt-get update && sudo apt-get -f install

Fortunately it won’t affect new users – just early testers. But I would like to get this fixed properly for you after all of the testing :slight_smile:

It doesn’t look like that did anything:

osmc@osmc-lr:~$ sudo apt-get update && sudo apt-get -f install
Hit:1 https://deb.debian.org/debian bullseye InRelease
Hit:2 https://deb.debian.org/debian bullseye-updates InRelease                                                        
Hit:5 https://security.debian.org bullseye-security InRelease                                                         
Hit:3 https://ftp.fau.de/osmc/osmc/apt bullseye-devel InRelease
Hit:4 https://ftp.fau.de/osmc/osmc/apt bullseye InRelease
Reading package lists... Done
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

If you have output like that, then the system has updated just fine.

You could:

  • Verify existence of: /lib/firmware/osmc/dovi.ko_enc
  • Output of systemctl status doviloader
  • Output of lsmod | paste-log
  • Upload a full log (grab-logs -A).

I think there is a race condition loading the Dolby Vision firmware. It’s hard to reproduce and hit it, but I have seen it.

Sam

osmc@osmc-lr:~$ ls  /lib/firmware/osmc
dovi.ko_enc  video
osmc@osmc-lr:~$ systemctl status doviloader
● doviloader.service - Dolby Vision firmware loader
     Loaded: loaded (/lib/systemd/system/doviloader.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Tue 2024-12-17 22:00:50 EST; 5min ago
    Process: 2612 ExecStartPre=/bin/sleep 5 (code=exited, status=0/SUCCESS)
    Process: 2773 ExecStart=/usr/sbin/insmod /lib/firmware/osmc/dovi.ko_enc (code=exited, status=1/FAILURE)
   Main PID: 2773 (code=exited, status=1/FAILURE)

Dec 17 22:00:45 osmc-lr systemd[1]: Starting Dolby Vision firmware loader...
Dec 17 22:00:50 osmc-lr insmod[2773]: insmod: ERROR: could not insert module /lib/firmware/osmc/dovi.ko_enc: Required k>
Dec 17 22:00:50 osmc-lr systemd[1]: doviloader.service: Main process exited, code=exited, status=1/FAILURE
Dec 17 22:00:50 osmc-lr systemd[1]: doviloader.service: Failed with result 'exit-code'.
Dec 17 22:00:50 osmc-lr systemd[1]: Failed to start Dolby Vision firmware loader.

and the paste log: https://paste.osmc.tv/iyavodolir

Thanks.

Can you upload a full log as well?

Cheers

Sam

Also do you mind if I split this off in a separate topic?
I tested a fresh install of DV a couple of hours ago and it works. If there’s a problem for updaters I will get it resolved but don’t want these posts putting people off. Hard enough to get testers as it is…

That’s fine. Here’s the full log:

https://paste.osmc.tv/jidoxocoto

Also, the other part of the doviloader that was off screen says “Required key not available.”

Your kernel is too old (October):

Linux osmc-lr 4.9.269-70-osmc #1 SMP PREEMPT Thu Oct 17 19:43:19 UTC 2024 aarch64 GNU/Linux

Try this:

sudo apt-get update
sudo apt-get install -y --reinstall vero564-image-4.9.269-72-osmc:arm64

If your system updates fully, then the output of cat /proc/version should be:

Linux version 4.9.269-72-osmc (root@jenkins) (gcc version 10.2.1 20210110 (Debian 10.2.1-6) ) #1 SMP PREEMPT Wed Dec 18 01:32:19 UTC 2024

Sam

That did it. I suspect I created that particular problem when I tried to downgrade and then upgrade again. It’s working now and I have all the DV glory back. Thanks.

Thanks for confirming and getting back to me so promptly.
I won’t split the forum post out in case some of our earlier testers also encounter an issue. I was only planning to split this out if this became an all nighter with hundreds of posts…

Cheers

Sam

Definitely not an all nighter. I’m in the US and am now going to go to bed. '-)

Take it easy and thanks for your advance testing :slight_smile:

Installed and seems to work. My TCL TV detected Dolby Vision and the first video I’ve just tried seemed fine. I’ll give it a proper test tonight though. Thanks

1 Like

If you play a DV video and your PJ tells you it’s receiving DV you are good. If your PJ only accepts LLDV it will revert to HDR10.

1 Like