You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
from enum import Enum
|
|
from .track_type import TrackType
|
|
|
|
class AudioLayout(Enum):
|
|
|
|
LAYOUT_STEREO = {"layout": "stereo", "index": 1}
|
|
LAYOUT_5_1 = {"layout": "5.1(side)", "index": 2}
|
|
LAYOUT_6_1 = {"layout": "6.1", "index": 3}
|
|
LAYOUT_7_1 = {"layout": "7.1", "index": 4} #TODO: Does this exist?
|
|
|
|
LAYOUT_6CH = {"layout": "6ch", "index": 5}
|
|
|
|
LAYOUT_UNDEFINED = {"layout": "undefined", "index": 0}
|
|
|
|
|
|
def layout(self):
|
|
"""Returns the layout as string"""
|
|
return self.value['layout']
|
|
|
|
def index(self):
|
|
"""Returns the layout as string"""
|
|
return self.value['layout']
|
|
|
|
|
|
def identify(self, streamObj):
|
|
|
|
FFPROBE_LAYOUT_KEY = 'channel_layout'
|
|
FFPROBE_CHANNELS_KEY = 'channels'
|
|
FFPROBE_CODEC_TYPE_KEY = 'codec_type'
|
|
|
|
if (type(streamObj) is not dict
|
|
or FFPROBE_CODEC_TYPE_KEY not in streamObj.keys()
|
|
or streamObj[FFPROBE_CODEC_TYPE_KEY] != TrackType.AUDIO.label()):
|
|
raise Exception('Not an ffprobe audio stream object')
|
|
|
|
if FFPROBE_LAYOUT_KEY in streamObj.keys():
|
|
matchingLayouts = [l for l in AudioLayout if l.value['layout'] == streamObj[FFPROBE_LAYOUT_KEY]]
|
|
if matchingLayouts:
|
|
return matchingLayouts[0]
|
|
|
|
if (FFPROBE_CHANNELS_KEY in streamObj.keys()
|
|
and int(streamObj[FFPROBE_CHANNELS_KEY]) == 6):
|
|
|
|
return AudioLayout.LAYOUT_6CH
|
|
|
|
return AudioLayout.LAYOUT_UNDEFINED
|