aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xvoctocore/experiments/failovertest2.py34
1 files changed, 16 insertions, 18 deletions
diff --git a/voctocore/experiments/failovertest2.py b/voctocore/experiments/failovertest2.py
index 6ee9c01..919b946 100755
--- a/voctocore/experiments/failovertest2.py
+++ b/voctocore/experiments/failovertest2.py
@@ -76,9 +76,8 @@ class FailoverFilter(Gst.Bin):
self.capsfilter.set_property('caps', Gst.Caps.from_string('video/x-raw,format=I420,width=640,height=480'))
# Connect signal handlers
- self.queue.connect('underrun', self.on_queue_underrun)
- self.queue.connect('running', self.on_queue_running)
- self.queue.connect('pushing', self.on_queue_pushing)
+ self.queue.connect('underrun', self.on_queue)
+ self.queue.connect('running', self.on_queue)
# Link elements
self.queue.get_static_pad('src').link(self.goodpad)
@@ -93,20 +92,11 @@ class FailoverFilter(Gst.Bin):
Gst.GhostPad.new('src', self.switch.get_static_pad('src'))
)
- def on_queue_underrun(self, queue):
- print('on_queue_underrun()')
+ def on_queue(self, queue):
+ level = queue.get_property('current-level-buffers')
+ print('on_queue()', level)
switch = queue.get_parent().get_by_name("sw")
- switch.set_property('active-pad', switch.get_static_pad('sink_1'))
-
- def on_queue_running(self, queue):
- print('on_queue_running()')
-
- def on_queue_pushing(self, queue):
- print('on_queue_pushing()')
- switch = queue.get_parent().get_by_name("sw")
- switch.set_property('active-pad', switch.get_static_pad('sink_0'))
-
-
+ switch.set_property('active-pad', switch.get_static_pad('sink_1' if level == 0 else 'sink_0'))
class VideomixerWithDisplay(Gst.Bin):
def __init__(self):
@@ -115,12 +105,16 @@ class VideomixerWithDisplay(Gst.Bin):
# Create elements
self.secondsrc = Gst.ElementFactory.make('videotestsrc', None)
self.mixer = Gst.ElementFactory.make('videomixer', None)
+ self.q1 = Gst.ElementFactory.make('queue', None)
+ self.q2 = Gst.ElementFactory.make('queue', None)
self.display = Gst.ElementFactory.make('ximagesink', None)
# Add elements to Bin
self.add(self.secondsrc)
self.add(self.mixer)
self.add(self.display)
+ self.add(self.q1)
+ self.add(self.q2)
# Set properties
self.secondsrc.set_property('pattern', 'ball')
@@ -135,12 +129,16 @@ class VideomixerWithDisplay(Gst.Bin):
self.secondpad.set_property('ypos', 50)
# Link elements
- self.secondsrc.get_static_pad('src').link(self.secondpad)
+ self.q1.get_static_pad('src').link(self.firstpad)
+
+ self.q2.get_static_pad('src').link(self.secondpad)
+ self.secondsrc.link(self.q2)
+
self.mixer.link(self.display)
# Add Ghost Pads
self.add_pad(
- Gst.GhostPad.new('sink', self.firstpad)
+ Gst.GhostPad.new('sink', self.q1.get_static_pad('sink'))
)