diff options
Diffstat (limited to 'voctocore/lib')
-rw-r--r-- | voctocore/lib/pipeline.py | 21 | ||||
-rw-r--r-- | voctocore/lib/video/mix.py | 41 | ||||
-rw-r--r-- | voctocore/lib/video/rawoutput.py | 2 | ||||
-rw-r--r-- | voctocore/lib/video/src.py | 2 |
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(), |