Files
unshackle/tests/core/test_dash_descriptive_audio.py
T
imSp4rky 856a193061 feat(tracks): support HDR Vivid and Audio Vivid
Add Video.Range.VIVID and Audio.Codec.AV3A, found by the first-segment probe (CUVA SEI, MPEG-TS cuvv/AVSA/0xD5); sort videos by standard resolution, then bitrate; drop service names left in core and tests. Closes #179
2026-11-14 22:03:13 -07:00

50 lines
1.8 KiB
Python

import xml.etree.ElementTree as ET
import pytest
from unshackle.core.manifests.dash import DASH
def adaptation_set(scheme: str, value: str) -> ET.Element:
return ET.fromstring(f'<AdaptationSet><Accessibility schemeIdUri="{scheme}" value="{value}"/></AdaptationSet>')
@pytest.mark.parametrize(
"scheme,value",
[
# "description" is the value the DASH role scheme defines. A service writes it, and reading only
# "descriptive" left every audio-description track unflagged.
("urn:mpeg:dash:role:2011", "description"),
("urn:mpeg:dash:role:2011", "descriptive"),
("urn:tva:metadata:cs:AudioPurposeCS:2007", "1"),
],
)
def test_descriptive_accessibility_values(scheme: str, value: str) -> None:
assert DASH.is_descriptive(adaptation_set(scheme, value)) is True
@pytest.mark.parametrize(
"scheme,value",
[
("urn:mpeg:dash:role:2011", "main"),
("urn:mpeg:dash:role:2011", "caption"),
("urn:tva:metadata:cs:AudioPurposeCS:2007", "2"),
],
)
def test_non_descriptive_accessibility_values(scheme: str, value: str) -> None:
assert DASH.is_descriptive(adaptation_set(scheme, value)) is False
def test_no_accessibility_element() -> None:
assert DASH.is_descriptive(ET.fromstring("<AdaptationSet/>")) is False
def test_descriptive_role_element() -> None:
# some manifests mark audio description with a Role and no Accessibility element
element = ET.fromstring(
'<AdaptationSet><Role schemeIdUri="urn:mpeg:dash:role:2011" value="description"/></AdaptationSet>'
)
assert DASH.is_descriptive(element) is True
main = ET.fromstring('<AdaptationSet><Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/></AdaptationSet>')
assert DASH.is_descriptive(main) is False