Advertisement
Guest User

Completely untested first refactor

a guest
Dec 11th, 2013
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.66 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. '''
  4. Porting This http://sourceforge.net/projects/camdesk/?source=dlp (cool app from Mike, give him the money) following https://wiki.ubuntu.com/Novacut/GStreamer1.0
  5.  
  6. Many things are not yet working. Broken: -video appears in new window ~ -no settings window yet
  7.  
  8. What has been done:
  9.  
  10. Changes folowing the porting guide
  11. All indents are using four spaces even on line breaks (or python3 complains)
  12. What needs to be done:
  13.  
  14. somehow connect the video to widget
  15. settings window is broke, debug and fix
  16. anything else
  17. look for and implement new stuff (talk to creator?)
  18. '''
  19.  
  20. import sys, os
  21. import gi
  22. gi.require_version('Gst', '1.0')
  23. from gi.repository import GObject, Gst, Gtk, Gdk
  24. GObject.threads_init()
  25. Gst.init(None)
  26.  
  27. class CamDesk(Gtk.Window):
  28.     '''
  29.    The base CamDesk class
  30.    '''
  31.  
  32.     def __init__(self):
  33.         '''
  34.        Case switch in python FTW
  35.        '''
  36.         super(CamDesk, self).__init__()
  37.        
  38.         self.set_position(Gtk.WindowPosition.CENTER)
  39.         self.set_title("CamDesk")
  40.         self.set_decorated(False)
  41.         #self.set_has_frame(False)
  42.         self.set_size_request(320, 240)
  43.         self.set_resizable(False)
  44.         self.set_keep_above(True)
  45.         self.set_property('skip-taskbar-hint', True)
  46.         #Gtk.Window_set_default_icon_from_file('logo.png')
  47.         self.connect("destroy", Gtk.main_quit, "WM destroy")
  48.         self.connect("key-press-event", self.closeme)
  49.         self.connect("key-press-event", self.startme)
  50.         self.connect("key-press-event", self.stopme)
  51.         self.connect("key-press-event", self.properties)
  52.        
  53.         vbox = Gtk.VBox(False, 0)
  54.         self.add(vbox)
  55.        
  56.         self.movie_window = Gtk.DrawingArea()
  57.         vbox.add(self.movie_window)
  58.         self.show_all()
  59.        
  60.         # Set up the Gstreamer pipeline
  61.         self.player = Gst.parse_launch ("v4l2src ! autovideosink")
  62.        
  63.         bus = self.player.get_bus()
  64.         bus.add_signal_watch()
  65.         bus.enable_sync_message_emission()
  66.         bus.connect("message", self.on_message)
  67.         bus.connect("sync-message::element", self.on_sync_message)
  68.  
  69.         self.widget = None
  70.         self.event = None
  71.         self.on_keypress_dict = {
  72.             Gdk.KEY_Escape : Gtk.main_quit(),
  73.             Gdk.KEY_F1 : self.player.set_state(Gst.State.PLAYING),
  74.             Gdk.KEY_F2 : self.player.set_state(Gst.State.NULL),
  75.             Gdk.KEY_F5 : self.properties()
  76.  
  77.         }
  78.    
  79.     def on_keypress(self, widget, event):
  80.         '''
  81.        A case switch statement to eliminate the
  82.        five checks kludginess
  83.        '''
  84.         self.widget = widget
  85.         self.event = event
  86.         self.on_keypress[event.keyval]
  87.  
  88.     def properties(self, widget, event) :
  89.         self.win = Gtk.Window(Gtk.Window.TOPLEVEL)
  90.         self.win.set_title("Properties")
  91.         self.win.set_size_request(320, 120)
  92.         self.win.set_resizable(False)
  93.         self.win.set_keep_above(True)
  94.         self.win.set_property('skip-taskbar-hint', True)
  95.         self.win.connect("destroy", self.closeproperties)
  96.         vbox = Gtk.VBox(spacing=4)
  97.         hbox = Gtk.HBox(spacing=4)
  98.         hbox2 = Gtk.HBox(spacing=4)
  99.         check = Gtk.CheckButton("Pin")
  100.         check.set_active(True)
  101.         check.set_size_request(100, 35)
  102.         check.connect("clicked", self.pinning)
  103.         hbox.pack_start(check)
  104.         scale = Gtk.HScale()
  105.         scale.set_range(0, 100)
  106.         scale.set_value(100)
  107.         scale.set_size_request(320, 35)
  108.         scale.connect("value-changed", self.opac_slider)
  109.         hbox.pack_start(scale)
  110.         self.entry = Gtk.Entry()
  111.         self.entry2 = Gtk.Entry()
  112.         self.entry.set_text("width")
  113.         self.entry2.set_text("height")
  114.         hbox2.pack_start(self.entry)
  115.         hbox2.pack_start(self.entry2)
  116.         hbox3 = Gtk.HBox(spacing=4)
  117.         ok = Gtk.Button("OK")
  118.         ok.connect("clicked", self.change_size)
  119.         hbox3.pack_start(ok)
  120.         exit = Gtk.Button("Exit")
  121.         exit.connect("clicked", self.closeproperties)
  122.         hbox3.pack_start(exit)
  123.         vbox.pack_start(hbox)
  124.         vbox.pack_start(hbox2)
  125.         vbox.pack_start(hbox3)
  126.         self.win.add(vbox)
  127.         self.win.show_all()
  128.            
  129.     def pinning(self, checkbox):
  130.         if checkbox.get_active():
  131.             self.set_keep_above(True)
  132.         else:
  133.             self.set_keep_above(False)
  134.  
  135.     def opac_slider(self, w):
  136.         self.set_opacity(w.get_value()/100.0)
  137.                
  138.     def change_size(self, w):
  139.         width = int(self.entry.get_text())
  140.         height = int(self.entry2.get_text())
  141.         self.set_size_request(width,height)
  142.                  
  143.     def closeproperties(self, w):
  144.         self.win.hide()
  145.  
  146.     def on_message(self, bus, message):
  147.         t = message.type
  148.         if t == Gst.Message.EOS:
  149.             self.player.set_state(Gst.State_NULL)
  150.             self.startcam.set_label("Start")
  151.         elif t == Gst.Message.ERROR:
  152.             err, debug = message.parse_error()
  153.         print("Error: %s" % err, debug)
  154.         self.player.set_state(Gst.State_NULL)
  155.         self.startcam.set_label("Start")
  156.                
  157.     def on_sync_message(self, bus, message):
  158.         if message.structure is None:
  159.             return
  160.             message_name = message.structure.get_name()
  161.         if message_name == "prepare-window-handle":
  162.     # Assign the viewport
  163.             self.moviewindow.imagesink = message.src
  164.             self.moviewindow.imagesink.set_property("force-aspect-ratio", True)
  165.             self.moviewindow.imagesink.set_window_handle(self.movie_window.window.xid)
  166.  
  167. CamDesk()
  168. #Gtk.gdk.threads_init()
  169. Gtk.main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement