aboutsummaryrefslogtreecommitdiff
path: root/voctocore/lib
diff options
context:
space:
mode:
authorMaZderMind <github@mazdermind.de>2015-05-10 20:59:37 +0200
committerMaZderMind <github@mazdermind.de>2015-05-10 20:59:37 +0200
commitff90df796c715ee9c95fb8a2152cea2698fe92ab (patch)
tree626e514d66c9433ea156af1d684337dacbc24087 /voctocore/lib
parente104284f309b4492325931c5b47a16505e44a9a1 (diff)
implement mixer & test-output
Diffstat (limited to 'voctocore/lib')
-rw-r--r--voctocore/lib/pipeline.py21
-rw-r--r--voctocore/lib/video/mix.py41
-rw-r--r--voctocore/lib/video/rawoutput.py2
-rw-r--r--voctocore/lib/video/src.py2
4 files changed, 57 insertions, 9 deletions
diff --git a/voctocore/lib/pipeline.py b/voctocore/lib/pipeline.py
index 5687573..fb9b846 100644
--- a/voctocore/lib/pipeline.py
+++ b/voctocore/lib/pipeline.py
@@ -18,12 +18,21 @@ class Pipeline(object):
vsources = []
vmirrors = []
vpreviews = []
+ vmixer = None
+ vmixerout = None
def __init__(self):
+ self.initVideo()
+
+ def initVideo(self):
caps = Config.get('mix', 'videocaps')
self.log.info('Video-Caps configured to: %s', caps)
- for idx, name in enumerate(Config.getlist('sources', 'video')):
+ names = Config.getlist('sources', 'video')
+ if len(names) < 1:
+ raise RuntimeException("At least one Video-Source must be configured!")
+
+ for idx, name in enumerate(names):
port = 10000 + idx
self.log.info('Creating Video-Source %s at tcp-port %u', name, port)
@@ -37,9 +46,9 @@ class Pipeline(object):
mirror = VideoRawOutput('video_%s_mirror' % name, port, caps)
self.vmirrors.append(mirror)
- # self.log.debug('Creating Video-Mixer')
- # self.videomixer = VideoMix()
+ self.log.debug('Creating Video-Mixer')
+ self.videomixer = VideoMix()
- # port = 11000
- # self.log.debug('Creating Video-Mixer-Output at tcp-port %u', port)
- # mirror = VideoRawOutput('video_mix', port, caps)
+ port = 11000
+ self.log.debug('Creating Video-Mixer-Output at tcp-port %u', port)
+ self.vmixerout = VideoRawOutput('video_mix', port, caps)
diff --git a/voctocore/lib/video/mix.py b/voctocore/lib/video/mix.py
index 2d73d7b..8bb7036 100644
--- a/voctocore/lib/video/mix.py
+++ b/voctocore/lib/video/mix.py
@@ -7,9 +7,48 @@ from lib.config import Config
class VideoMix(object):
log = logging.getLogger('VideoMix')
+ mixingPipeline = None
+
def __init__(self):
caps = Config.get('mix', 'videocaps')
names = Config.getlist('sources', 'video')
self.log.info('Configuring Mixer for %u Sources', len(names))
- #for idx, name in enumerate():
+
+ pipeline = """
+ videomixer name=mix !
+ {caps} !
+ textoverlay text=mixer halignment=left valignment=top ypad=175 !
+ intervideosink channel=video_mix
+ """.format(
+ caps=caps
+ )
+
+ for idx, name in enumerate(names):
+ pipeline += """
+ intervideosrc channel=video_{name}_mixer !
+ {caps} !
+ videoscale !
+ capsfilter name=caps_{idx} !
+ mix.
+ """.format(
+ name=name,
+ caps=caps,
+ idx=idx
+ )
+
+ self.log.debug('Launching Mixing-Pipeline:\n%s', pipeline)
+ self.mixingPipeline = Gst.parse_launch(pipeline)
+ self.mixingPipeline.set_state(Gst.State.PLAYING)
+
+ mixerpad = self.mixingPipeline.get_by_name('mix').get_static_pad('sink_0')
+ mixerpad.set_property('alpha', 0.5)
+ mixerpad.set_property('xpos', 64)
+ mixerpad.set_property('ypos', 64)
+
+ mixerpad = self.mixingPipeline.get_by_name('mix').get_static_pad('sink_1')
+ mixerpad.set_property('alpha', 0.2)
+
+ capsilter = self.mixingPipeline.get_by_name('caps_1')
+ capsilter.set_property('caps', Gst.Caps.from_string(
+ 'video/x-raw,width=320,height=180'))
diff --git a/voctocore/lib/video/rawoutput.py b/voctocore/lib/video/rawoutput.py
index ecdb1ba..bb9efc4 100644
--- a/voctocore/lib/video/rawoutput.py
+++ b/voctocore/lib/video/rawoutput.py
@@ -40,7 +40,7 @@ class VideoRawOutput(object):
pipeline = """
intervideosrc channel={channel} !
{caps} !
- textoverlay text={channel} halignment=left valignment=top ypad=125 !
+ textoverlay text={channel} halignment=left valignment=top ypad=225 !
gdppay !
fdsink fd={fd}
""".format(
diff --git a/voctocore/lib/video/src.py b/voctocore/lib/video/src.py
index dbbe12d..404b60f 100644
--- a/voctocore/lib/video/src.py
+++ b/voctocore/lib/video/src.py
@@ -66,7 +66,7 @@ class VideoSrc(object):
fdsrc fd={fd} !
gdpdepay !
{caps} !
- textoverlay text=video_{name}_fd halignment=left valignment=top ypad=175 !
+ textoverlay text=video_{name}_fd halignment=left valignment=top ypad=125 !
intervideosink channel=video_{name}_in
""".format(
fd=conn.fileno(),