riccardocagnasso

Untitled

May 1st, 2014
987
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.57 KB | None | 0 0
  1. import gi
  2. gi.require_version('Gst', '1.0')
  3. from gi.repository import Gst, GObject, GstNet, Gdk, Gtk, cairo
  4.  
  5. Gst.init(None)
  6.  
  7. from gi.repository import GdkX11, GstVideo
  8. import signal
  9.  
  10.  
  11. class BasicPlayer(object):
  12.     base_time = 0
  13.  
  14.     def __init__(self, window=None):
  15.         self.window = window
  16.  
  17.         self.pipeline = self.get_pipeline()
  18.  
  19.         self.bus = self.pipeline.get_bus()
  20.         self.bus.add_signal_watch()
  21.         self.bus.connect("message", self.on_message)
  22.         self.bus.enable_sync_message_emission()
  23.         self.bus.connect("sync-message::element",
  24.                          self.on_sync_message)
  25.  
  26.         self.pipeline.set_state(Gst.State.PLAYING)
  27.  
  28.     def get_pipeline(self):
  29.         pipeline = Gst.Pipeline()
  30.  
  31.         source = Gst.ElementFactory.make('videotestsrc')
  32.         adaptor1 = Gst.ElementFactory.make('videoconvert', 'adaptor1')
  33.         overlay = Gst.ElementFactory.make('cairooverlay', 'overlay')
  34.         adaptor2 = Gst.ElementFactory.make('videoconvert', 'adaptor2')
  35.         sink = Gst.ElementFactory.make('eglglessink', 'sink')
  36.  
  37.         pipeline.add(source)
  38.         pipeline.add(adaptor1)
  39.         pipeline.add(overlay)
  40.         pipeline.add(adaptor2)
  41.         pipeline.add(sink)
  42.  
  43.         source.link(adaptor1)
  44.         adaptor1.link(overlay)
  45.         overlay.link(adaptor2)
  46.         adaptor2.link(sink)
  47.  
  48.         overlay.connect('draw', self.on_overlay_draw)
  49.  
  50.         return pipeline
  51.  
  52.     def on_overlay_draw(self, overlay, cairo, timestamp, duration):
  53.         print(overlay)
  54.         print(cairo)
  55.         print(timestamp)
  56.         print(duration)
  57.  
  58.     def on_sync_message(self, bus, message):
  59.         """Whe handle sync messages to put the video in a GTK DrawingArea"""
  60.         if message.get_structure().get_name() == 'prepare-window-handle'\
  61.                 and self.window:
  62.             Gdk.threads_enter()
  63.             message.src.set_window_handle(self.window.movie_window
  64.                                           .get_property('window').get_xid())
  65.             Gdk.threads_leave()
  66.  
  67.     def on_message(self, bus, message):
  68.         """Messages Handler"""
  69.         t = message.type
  70.         if t == Gst.MessageType.ERROR:
  71.             err, debug = message.parse_error()
  72.             print("Error: %s" % err, debug)
  73.         elif t == Gst.MessageType.EOS:
  74.             if self.enqueued is None:
  75.                 self.go_to_loop(True)
  76.             else:
  77.                 self._sobstitute_video(self.enqueued)
  78.  
  79.  
  80. if __name__ == "__main__":
  81.     player = BasicPlayer()
  82.     signal.signal(signal.SIGINT, signal.SIG_DFL)
  83.  
  84.     Gtk.main()
Advertisement
Add Comment
Please, Sign In to add comment