nightl
This commit is contained in:
46
bin/ffx/audio_layout.py
Normal file
46
bin/ffx/audio_layout.py
Normal file
@@ -0,0 +1,46 @@
|
||||
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
|
||||
Reference in New Issue
Block a user