shakaran

Untitled

Jun 26th, 2012
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.04 KB | None | 0 0
  1. #!/usr/bin/python3
  2.  
  3. import gi
  4. gi.require_version('Gst', '1.0')
  5. from gi.repository import GObject, Gst, Gtk
  6.  
  7. # Needed for window.get_xid(), xvimagesink.set_window_handle(), respectively:
  8. from gi.repository import GdkX11, GstVideo
  9.  
  10.  
  11. GObject.threads_init()
  12. Gst.init(None)
  13.  
  14.  
  15. class Webcam:
  16.     def __init__(self):
  17.         self.window = Gtk.Window()
  18.         self.window.connect('destroy', self.quit)
  19.         self.window.set_default_size(800, 450)
  20.  
  21.         self.drawingarea = Gtk.DrawingArea()
  22.     self.window.add(self.drawingarea)
  23.  
  24.     self.window.show_all()
  25.         # Create GStreamer pipeline
  26.         self.pipeline = Gst.Pipeline()
  27.  
  28.         # Create bus to get events from GStreamer pipeline
  29.         self.bus = self.pipeline.get_bus()
  30.         self.bus.add_signal_watch()
  31.         self.bus.connect('message::error', self.on_error)
  32.  
  33.         # This is needed to make the video output in our DrawingArea:
  34.         self.bus.enable_sync_message_emission()
  35.         self.bus.connect('sync-message::element', self.on_sync_message)
  36.  
  37.         # Create GStreamer elements
  38.         self.src = Gst.ElementFactory.make('autovideosrc', None)
  39.         self.sink = Gst.ElementFactory.make('autovideosink', None)
  40.     self.xid = self.drawingarea.get_property('window').get_xid()
  41.  
  42.     self.src.set_window_handle(self.xid)
  43.         # Add elements to the pipeline
  44.         self.pipeline.add(self.src)
  45.         self.pipeline.add(self.sink)
  46.  
  47.         self.src.link(self.sink)
  48.  
  49.     def run(self):
  50.         self.window.show_all()
  51.         self.pipeline.set_state(Gst.State.PLAYING)
  52.         Gtk.main()
  53.  
  54.     def quit(self, window):
  55.         self.pipeline.set_state(Gst.State.NULL)
  56.         Gtk.main_quit()
  57.  
  58.     def on_sync_message(self, bus, msg):
  59.         if msg.get_structure().get_name() == 'prepare-window-handle':
  60.             print('prepare-window-handle')
  61.             #msg.src.set_property('force-aspect-ratio', True)
  62.             #msg.src.set_window_handle(xid)
  63.  
  64.     def on_error(self, bus, msg):
  65.         print('on_error():', msg.parse_error())
  66.  
  67.  
  68. webcam = Webcam()
  69. webcam.run()
Advertisement
Add Comment
Please, Sign In to add comment