quietvoid / dovi_tool

dovi_tool is a CLI tool combining multiple utilities for working with Dolby Vision.
MIT License
577 stars 57 forks source link

dolby_vision: Support persisted state RPU parsing #149

Open quietvoid opened 2 years ago

quietvoid commented 2 years ago

This is required for parsing compressed RPUs. It probably would imply using a crate like once_cell, and setting it behind a feature.

So API users can choose to use the extra allocations to preserve the state.

Then, in vdr_dm_data_payload, that state can either be updated or fetched from to get the proper attributes. For the DM data, the RPU is compressed when RpuDataHeader::reserved_zero_3bits is set to 1.

Todo:

HoffmannTom commented 2 years ago

@quietvoid Maybe this PDF sheds some lights on it: https://www.etsi.org/deliver/etsi_gs/CCM/001_099/001/01.01.01_60/gs_ccm001v010101p.pdf It is explained in 6.3.2 HDR DM metadata (= HDR display management metadata) It seems to create a reference between the metadata and the picture it refers to and to the current transmitted frame.

About use_prev_vdr_rpu_flag I found this explanation: https://patents.google.com/patent/US10701399B2/en "use_prev_vdr_rpu_flag specifies whether the current Dolby Vision reference processing unit is predicted from a previously sent reference processing unit. The following values are supported. 1: A previously sent Dolby Vision reference processing unit is used to generate the interlayer prediction for the current picture 0: The current Dolby Vision reference processing unit is transmitted explicitly, and a vdr_rpu_id is assigned to the current Dolby Vision reference processing unit. When the BL picture is an instantaneous refresh picture, the value of use_prev_vdr_rpu_flag must be 0."

I hope some of these information helps.

quietvoid commented 1 year ago

Dolby kinda seems to have abandoned the compressed RPU concept, but I might still add support for it.