summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--voctocore/default-config.ini18
-rw-r--r--voctocore/lib/commands.py10
-rw-r--r--voctocore/lib/videomix.py29
3 files changed, 54 insertions, 3 deletions
diff --git a/voctocore/default-config.ini b/voctocore/default-config.ini
index 398b613..8afd76b 100644
--- a/voctocore/default-config.ini
+++ b/voctocore/default-config.ini
@@ -5,21 +5,39 @@ audiocaps=audio/x-raw,format=S16LE,channels=2,layout=interleaved,rate=48000
; tcp-ports will be 10000,10001,10002
sources=cam1,cam2,grabber
+[fullscreen]
+; if configured, switching to fullscreen will automatically select this
+; source. if not configured, it will not change the last set source
+;default-a=cam1
+
[side-by-side-equal]
; defaults to 1% of the video width
;gutter=12
;ypos=200
+; if configured, switching to the sbs-equal mode will automatically select these
+; sources. if not configured, it will not change the last set sources
+;default-a=cam1
+;default-b=cam2
+
[side-by-side-preview]
;asize=1024x576
;apos=12/12
;bsize=320x180
;bpos=948/528
+; automatically select these sources when switching to sbs-preview
+;default-a=grabber
+;default-b=cam1
+
[picture-in-picture]
;pipsize=320x180
;pippos=948/528
+; automatically select these sources when switching to pip
+;default-a=grabber
+;default-b=cam1
+
[previews]
; disable if ui & server run on the same computer and can exchange uncompressed video frames
enabled=false
diff --git a/voctocore/lib/commands.py b/voctocore/lib/commands.py
index 64d1c57..bfe3168 100644
--- a/voctocore/lib/commands.py
+++ b/voctocore/lib/commands.py
@@ -115,9 +115,13 @@ class ControlServerCommands(object):
mode = decodeEnumName(CompositeModes, mode_name_or_id)
self.pipeline.vmix.setCompositeMode(mode)
- status = self._get_composite_status()
- return NotifyResponse('composite_mode', status)
-
+ composite_status = self._get_composite_status()
+ video_status = self._get_video_status()
+ return [
+ NotifyResponse('composite_mode', composite_status),
+ NotifyResponse('video_status', *video_status)
+ ]
+
def set_videos_and_composite(self, src_a_name_or_id, src_b_name_or_id, mode_name_or_id):
if src_a_name_or_id != '*':
src_a_id = decodeName(self.sources, src_a_name_or_id)
diff --git a/voctocore/lib/videomix.py b/voctocore/lib/videomix.py
index 7ff98c2..2fa9200 100644
--- a/voctocore/lib/videomix.py
+++ b/voctocore/lib/videomix.py
@@ -296,6 +296,33 @@ class VideoMix(object):
mixerpad.set_property('alpha', state.alpha)
mixerpad.set_property('zorder', state.zorder)
+ def selectCompositeModeDefaultSources(self):
+ sectionNames = {
+ CompositeModes.fullscreen: 'fullscreen',
+ CompositeModes.side_by_side_equal: 'side-by-side-equal',
+ CompositeModes.side_by_side_preview: 'side-by-side-preview',
+ CompositeModes.picture_in_picture: 'picture-in-picture'
+ }
+
+ compositeModeName = self.compositeMode.name
+ sectionName = sectionNames[self.compositeMode]
+
+ try:
+ defSource = Config.get(sectionName, 'default-a')
+ self.setVideoSourceA(self.names.index(defSource))
+ self.log.info('Changing sourceA to default of Mode %s: %s', compositeModeName, defSource)
+ except Exception as e:
+ print(e)
+ pass
+
+ try:
+ defSource = Config.get(sectionName, 'default-b')
+ self.setVideoSourceB(self.names.index(defSource))
+ self.log.info('Changing sourceB to default of Mode %s: %s', compositeModeName, defSource)
+ except Exception as e:
+ print(e)
+ pass
+
def on_handoff(self, object, buffer):
if self.padStateDirty:
self.padStateDirty = False
@@ -335,6 +362,8 @@ class VideoMix(object):
def setCompositeMode(self, mode):
self.compositeMode = mode
+
+ self.selectCompositeModeDefaultSources()
self.recalculateMixerState()
def getCompositeMode(self):