You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.3 KiB
56 lines
1.3 KiB
3 years ago
|
import typing
|
||
|
|
||
|
from knowit.core import Configurable, Property
|
||
|
|
||
|
|
||
|
class BitRateMode(Configurable[str]):
|
||
|
"""Bit Rate mode property."""
|
||
|
|
||
|
|
||
|
class AudioCompression(Configurable[str]):
|
||
|
"""Audio Compression property."""
|
||
|
|
||
|
|
||
|
class AudioProfile(Configurable[str]):
|
||
|
"""Audio profile property."""
|
||
|
|
||
|
|
||
|
class AudioChannels(Property[int]):
|
||
|
"""Audio Channels property."""
|
||
|
|
||
|
ignored = {
|
||
|
'object based', # Dolby Atmos
|
||
|
}
|
||
|
|
||
|
def handle(self, value: typing.Union[int, str], context: typing.MutableMapping) -> typing.Optional[int]:
|
||
|
"""Handle audio channels."""
|
||
|
if isinstance(value, int):
|
||
|
return value
|
||
|
|
||
|
if value.lower() not in self.ignored:
|
||
|
try:
|
||
|
return int(value)
|
||
|
except ValueError:
|
||
|
self.report(value, context)
|
||
|
return None
|
||
|
|
||
|
|
||
|
class AudioCodec(Configurable[str]):
|
||
|
"""Audio codec property."""
|
||
|
|
||
|
@classmethod
|
||
|
def _extract_key(cls, value) -> str:
|
||
|
key = str(value).upper()
|
||
|
if key.startswith('A_'):
|
||
|
key = key[2:]
|
||
|
|
||
|
# only the first part of the word. E.g.: 'AAC LC' => 'AAC'
|
||
|
return key.split(' ')[0]
|
||
|
|
||
|
@classmethod
|
||
|
def _extract_fallback_key(cls, value, key) -> typing.Optional[str]:
|
||
|
if '/' in key:
|
||
|
return key.split('/')[0]
|
||
|
else:
|
||
|
return None
|