Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/glivex.py
diff options
context:
space:
mode:
Diffstat (limited to 'glivex.py')
-rw-r--r--glivex.py180
1 files changed, 90 insertions, 90 deletions
diff --git a/glivex.py b/glivex.py
index 5b8267f..7c2955d 100644
--- a/glivex.py
+++ b/glivex.py
@@ -48,100 +48,100 @@ import utils
import ui
class GliveX:
- def __init__(self, pca):
- self.window = None
- self.ca = pca
-
- self.playing = False
-
- self.pipeline = gst.Pipeline("slow-pipeline")
- self.createPipeline()
-
- bus = self.pipeline.get_bus()
- bus.enable_sync_message_emission()
- bus.add_signal_watch()
- self.SYNC_ID = bus.connect('sync-message::element', self._onSyncMessageCb)
- self.MESSAGE_ID = bus.connect('message', self._onMessageCb)
-
- def createPipeline ( self ):
- src = gst.element_factory_make("v4l2src", "camsrc")
- try:
- # old gst-plugins-good does not have this property
- src.set_property("queue-size", 2)
- except:
- pass
-
- queue = gst.element_factory_make("queue", "dispqueue")
- queue.set_property("leaky", True)
- queue.set_property('max-size-buffers', 1)
-
- scale = gst.element_factory_make("videoscale", "scale")
- scalecaps = gst.Caps('video/x-raw-yuv,width='+str(ui.UI.dim_PIPW)+',height='+str(ui.UI.dim_PIPH))
- colorspace = gst.element_factory_make("ffmpegcolorspace", "colorspace")
- xsink = gst.element_factory_make("ximagesink", "xsink")
- self.pipeline.add(src, queue, scale, colorspace, xsink)
- gst.element_link_many(src, queue, scale)
- scale.link(colorspace, scalecaps)
- colorspace.link(xsink)
-
- def play(self):
- self.pipeline.set_state(gst.STATE_PLAYING)
- self.playing = True
-
- def pause(self):
- self.pipeline.set_state(gst.STATE_PAUSED)
- self.playing = False
-
- def stop(self):
- self.pipeline.set_state(gst.STATE_NULL)
- self.playing = False
-
- def is_playing(self):
- return self.playing
-
- def idlePlayElement(self, element):
- element.set_state(gst.STATE_PLAYING)
- return False
-
- def _onSyncMessageCb(self, bus, message):
- if message.structure is None:
- return
- if message.structure.get_name() == 'prepare-xwindow-id':
- self.window.set_sink(message.src)
- message.src.set_property('force-aspect-ratio', True)
-
- def _onMessageCb(self, bus, message):
- t = message.type
- if t == gst.MESSAGE_EOS:
- #print("MESSAGE_EOS")
- pass
- elif t == gst.MESSAGE_ERROR:
- #todo: if we come out of suspend/resume with errors, then get us back up and running...
- #todo: handle "No space left on the resource.gstfilesink.c"
- #err, debug = message.parse_error()
- pass
+ def __init__(self, pca):
+ self.window = None
+ self.ca = pca
+
+ self.playing = False
+
+ self.pipeline = gst.Pipeline("slow-pipeline")
+ self.createPipeline()
+
+ bus = self.pipeline.get_bus()
+ bus.enable_sync_message_emission()
+ bus.add_signal_watch()
+ self.SYNC_ID = bus.connect('sync-message::element', self._onSyncMessageCb)
+ self.MESSAGE_ID = bus.connect('message', self._onMessageCb)
+
+ def createPipeline ( self ):
+ src = gst.element_factory_make("v4l2src", "camsrc")
+ try:
+ # old gst-plugins-good does not have this property
+ src.set_property("queue-size", 2)
+ except:
+ pass
+
+ queue = gst.element_factory_make("queue", "dispqueue")
+ queue.set_property("leaky", True)
+ queue.set_property('max-size-buffers', 1)
+
+ scale = gst.element_factory_make("videoscale", "scale")
+ scalecaps = gst.Caps('video/x-raw-yuv,width='+str(ui.UI.dim_PIPW)+',height='+str(ui.UI.dim_PIPH))
+ colorspace = gst.element_factory_make("ffmpegcolorspace", "colorspace")
+ xsink = gst.element_factory_make("ximagesink", "xsink")
+ self.pipeline.add(src, queue, scale, colorspace, xsink)
+ gst.element_link_many(src, queue, scale)
+ scale.link(colorspace, scalecaps)
+ colorspace.link(xsink)
+
+ def play(self):
+ self.pipeline.set_state(gst.STATE_PLAYING)
+ self.playing = True
+
+ def pause(self):
+ self.pipeline.set_state(gst.STATE_PAUSED)
+ self.playing = False
+
+ def stop(self):
+ self.pipeline.set_state(gst.STATE_NULL)
+ self.playing = False
+
+ def is_playing(self):
+ return self.playing
+
+ def idlePlayElement(self, element):
+ element.set_state(gst.STATE_PLAYING)
+ return False
+
+ def _onSyncMessageCb(self, bus, message):
+ if message.structure is None:
+ return
+ if message.structure.get_name() == 'prepare-xwindow-id':
+ self.window.set_sink(message.src)
+ message.src.set_property('force-aspect-ratio', True)
+
+ def _onMessageCb(self, bus, message):
+ t = message.type
+ if t == gst.MESSAGE_EOS:
+ #print("MESSAGE_EOS")
+ pass
+ elif t == gst.MESSAGE_ERROR:
+ #todo: if we come out of suspend/resume with errors, then get us back up and running...
+ #todo: handle "No space left on the resource.gstfilesink.c"
+ #err, debug = message.parse_error()
+ pass
class SlowLiveVideoWindow(gtk.Window):
- def __init__(self, bgd ):
- gtk.Window.__init__(self)
+ def __init__(self, bgd ):
+ gtk.Window.__init__(self)
- self.imagesink = None
- self.glivex = None
+ self.imagesink = None
+ self.glivex = None
- self.modify_bg( gtk.STATE_NORMAL, bgd )
- self.modify_bg( gtk.STATE_INSENSITIVE, bgd )
- self.unset_flags(gtk.DOUBLE_BUFFERED)
- self.set_flags(gtk.APP_PAINTABLE)
+ self.modify_bg( gtk.STATE_NORMAL, bgd )
+ self.modify_bg( gtk.STATE_INSENSITIVE, bgd )
+ self.unset_flags(gtk.DOUBLE_BUFFERED)
+ self.set_flags(gtk.APP_PAINTABLE)
- def set_glivex(self, pglivex):
- self.glivex = pglivex
- self.glivex.window = self
+ def set_glivex(self, pglivex):
+ self.glivex = pglivex
+ self.glivex.window = self
- def set_sink(self, sink):
- if (self.imagesink != None):
- assert self.window.xid
- self.imagesink = None
- del self.imagesink
+ def set_sink(self, sink):
+ if (self.imagesink != None):
+ assert self.window.xid
+ self.imagesink = None
+ del self.imagesink
- self.imagesink = sink
- self.imagesink.set_xwindow_id(self.window.xid)
+ self.imagesink = sink
+ self.imagesink.set_xwindow_id(self.window.xid)