quietvoid / dovi_tool

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

Add support for variable length extension metadata blocks #106

Closed quietvoid closed 2 years ago

quietvoid commented 2 years ago

Implements fixes for #104, #105

L8, L9, and L10 metadata blocks can have variable lengths, to avoid serializing unnecessary metadata. That's useful in the case of allowing preset mastering display primaries, as well as being able to support custom primaries.

quietvoid commented 2 years ago

@saindriches I added your changes, just need to actually test it and fix stuff.

quietvoid commented 2 years ago

Feels a bit odd that the primaries are over 15 bits, since the documentation uses values based on 50 000 max. Probably have to verify with an XML reference.

quietvoid commented 2 years ago

Looks like there's no way to validate L10. However L9 passes the tests:

Test case results (' - ' = not applicable or skipped by configuration):
Test case Id    1: FAIL (Video codec compliance)
Test case Id    2:   -  (Frame continuity)
Test case Id    3: PASS (VUI validation)
Test case Id    4:   -  (Dual layer validation)
Test case Id    5: PASS (RPU NAL unit presence and position)
Test case Id    6: PASS (RPU header compliance)
Test case Id    7: PASS (Basic DM metadata ('L0') - intrinsic)
Test case Id    8: PASS (Basic DM metadata ('L0') - source comparison)
Test case Id    9: PASS (L1 metadata - intrinsic)
Test case Id   10: PASS (L1 metadata - source comparison)
Test case Id   11: PASS (L2 metadata - source comparison)
Test case Id   12: FAIL (L4 metadata presence)
Test case Id   13: PASS (L6 metadata presence and stability)
Test case Id   14: PASS (Comparison with reference RPU)
Test case Id   15: PASS (L5 metadata presence)
Test case Id   16: PASS (Extended display management metadata general validation)
Test case Id   17: PASS (L3 metadata - source comparison)
Test case Id   18: PASS (L8 metadata - intrinsic)
Test case Id   19: PASS (L8 metadata - source comparison)
Test case Id   20: PASS (L9 metadata - intrinsic)
Test case Id   21: PASS (L9 metadata - source comparison)
Test case Id   22: PASS (L10 metadata - intrinsic)
Test case Id   23:   -  (ST 2094-10 syntax check)
Test case Id   24:   -  (ST 2094-10 ext_block_level 1)
Test case Id   25:   -  (ST 2094-10 ext_block_level 2)
Test case Id   26:   -  (ST 2094-10 ext_block_level 5)
saindriches commented 2 years ago

It's able to verify L10 with an XML metadata, it checks target displays used by L8 and compare correspond L10 with XML data, and will raise an error if values don't match.

Use cmv4_0_2_custom_displays.xml with changed values in TargetDisplay:

Level 8 Display Management Metadata mismatch of RPU and external source reference file [E243].
Found Level 10 for target_display_index 255 in RPU but no legal corresponding custom target display in reference XML/MXF.

It will also raise an error if L8 and L10 trims do not correspond (that means any target_display_id which is predefined or not used by L8 trims also should not appear in L10, and any target in L8 which is not predefined must appear in L10), so it should be OK.