More documentation

This commit is contained in:
Jamie Hardt
2022-11-24 21:24:59 -08:00
parent faf809b8e2
commit b6acdb1f7f
2 changed files with 63 additions and 8 deletions

View File

@@ -10,5 +10,8 @@ Class Reference
.. automodule:: wavinfo.wave_dbmd_reader .. automodule:: wavinfo.wave_dbmd_reader
.. autoclass:: wavinfo.wave_dbmd_reader.WavDolbyChunkReader
:members:
.. autoclass:: wavinfo.wave_dbmd_reader.DolbyDigitalPlusMetadata .. autoclass:: wavinfo.wave_dbmd_reader.DolbyDigitalPlusMetadata
:members: :members:

View File

@@ -1,5 +1,5 @@
""" """
Wave `dbmd` Dolby Metadata Reading Dolby Bitstream Metadata
Unless otherwise stated, all § references here are to Unless otherwise stated, all § references here are to
`EBU Tech 3285 Supplement 6`_. `EBU Tech 3285 Supplement 6`_.
@@ -10,21 +10,29 @@ Unless otherwise stated, all § references here are to
from enum import IntEnum, Enum from enum import IntEnum, Enum
from struct import unpack from struct import unpack
from dataclasses import dataclass from dataclasses import dataclass
from typing import Optional, Tuple from typing import Optional, Tuple, Any
class SegmentTypes(IntEnum): class SegmentType(IntEnum):
""" """
""" """
EndMarker = 0x0 EndMarker = 0x0
DolbyE = 0x1 DolbyE = 0x1
Reserved2 = 0x2
DolbyDigital = 0x3 DolbyDigital = 0x3
Reserved4 = 0x4
Reserved5 = 0x5
Reserved6 = 0x6
DolbyDigitalPlus = 0x7 DolbyDigitalPlus = 0x7
AudioInfo = 0x8 AudioInfo = 0x8
DolbyAtmos = 0x9 DolbyAtmos = 0x9
DolbyAtmosSupplemental = 0xa DolbyAtmosSupplemental = 0xa
@classmethod
def _missing_(cls,val):
return val
@dataclass @dataclass
class DolbyDigitalPlusMetadata: class DolbyDigitalPlusMetadata:
@@ -43,6 +51,7 @@ class DolbyDigitalPlusMetadata:
A gain coefficient used in several metadata fields for downmix A gain coefficient used in several metadata fields for downmix
scenarios. scenarios.
""" """
PLUS_3DB = 0b000 PLUS_3DB = 0b000
"+3 dB" "+3 dB"
@@ -263,7 +272,7 @@ class DolbyDigitalPlusMetadata:
lfe_on: bool lfe_on: bool
#: The kind of service of this stream. `bsmod` § 4.3.2.2 #: The kind of service of this stream. `bsmod` § 4.3.2.2
bitstream_mode: 'DolbyDigitalPlusMetadata.BitStreamMode' bitstream_mode: BitStreamMode
#: Indicates which channels are in use. `acmod` § 4.3.2.3 #: Indicates which channels are in use. `acmod` § 4.3.2.3
audio_coding_mode: AudioCodingMode audio_coding_mode: AudioCodingMode
@@ -290,15 +299,38 @@ class DolbyDigitalPlusMetadata:
original_bitstream: bool original_bitstream: bool
dialnorm: DialnormLevel dialnorm: DialnormLevel
langcode: Optional[int]
mixlevel: Optional[MixLevel] #: Language code
roomtype: Optional[RoomType] langcode: int
#: `True` if `mixlevel` and `roomtype` are valid
prod_info_exists: bool
#: Mix level
mixlevel: MixLevel
#: Room Type
roomtype: RoomType
#: LoRo preferred center downmix level
loro_center_downmix_level: DownMixLevelToken loro_center_downmix_level: DownMixLevelToken
#: LoRo preferred surround downmix level
loro_surround_downmix_level: DownMixLevelToken loro_surround_downmix_level: DownMixLevelToken
#: Preferred downmix mode
downmix_mode: PreferredDownMixMode downmix_mode: PreferredDownMixMode
#: LtRt preferred center downmix level
ltrt_center_downmix_level: DownMixLevelToken ltrt_center_downmix_level: DownMixLevelToken
#: LtRt preferred surround downmix level
ltrt_surround_downmix_level: DownMixLevelToken ltrt_surround_downmix_level: DownMixLevelToken
#: Surround-EX mode
surround_ex_mode: SurroundEXMode surround_ex_mode: SurroundEXMode
#: Dolby Headphone mode
dolby_headphone_encoded: HeadphoneMode dolby_headphone_encoded: HeadphoneMode
ad_converter_type: ADConverterType ad_converter_type: ADConverterType
compression_profile: RFCompressionProfile compression_profile: RFCompressionProfile
@@ -430,3 +462,23 @@ class DolbyDigitalPlusMetadata:
dynamic_range=dynamic_range, dynamic_range=dynamic_range,
stream_type=stream_info, stream_type=stream_info,
datarate_kbps=data_rate) datarate_kbps=data_rate)
class WavDolbyChunkReader:
"""
Reads Dolby bitstream metadata.
"""
#: List of the Dolby Metadata Segments.
#:
#: Each list entry is a tuple of `SegmentType`, a `bool`
#: indicating if the segment's checksum was valid, and the
#: segment's parsed dataclass (or a `bytes` array if it was
#: not recognized).
segment_list: Tuple[SegmentType | int, bool, Any]
def __init__(self, dbmd_data) -> None:
self.segment_list = []