try sync handler in gtk-app
[opo.git] / wha.py
blob2bb7af5f6182d00c6f83f21e70950027dbf9faa5
1 #!/usr/bin/python
2 import pygst
3 pygst.require("0.10")
4 import gst
5 import pygtk
6 pygtk.require('2.0')
7 import gtk
9 WIDTH = 320
10 HEIGHT = 240
12 def videotestsrc():
13 """Make an interesting video test src"""
14 videosrc = gst.element_factory_make("videotestsrc", "video")
15 sp = videosrc.set_property
16 sp("pattern", "zone-plate")
17 sp("kt2", 0)
18 sp("kx2", 2)
19 sp("ky2", 3)
20 sp("kxy", 2)
21 sp("kt2", 0)
22 return videosrc
25 class Screen:
26 def __init__(self, pipeline, videosrc=None):
27 #video screen
28 self.screen = gtk.DrawingArea()
29 self.screen.set_size_request(WIDTH, HEIGHT)
31 #pack window
32 self.window = gtk.Window()
33 self.vbox = gtk.VBox() # vertical box
34 self.vbox.pack_start(self.screen)
35 self.vbox.pack_start(self.buttons)
36 self.window.add(self.vbox)
38 # Create GStreamer bits and bobs
39 self.videosrc = videosrc
40 self.pipeline = pipeline
41 self.pipeline.add(self.videosrc)
42 self.sink = gst.element_factory_make("ximagesink", "sink")
43 self.pipeline.add(self.sink)
44 self.videosrc.link(self.sink)
46 self.window.show_all()
47 self.realise()
48 self.sink.set_xwindow_id(self.screen.window.xid)
49 self.pipeline.set_state(gst.STATE_PLAYING)
52 class Main:
53 def __init__(self):
54 #video screen
55 self.screen = gtk.DrawingArea()
56 self.screen.set_size_request(WIDTH, HEIGHT)
58 #buttons
59 self.play_button = gtk.Button(stock=gtk.STOCK_MEDIA_PLAY)
60 self.play_button.connect("clicked", self.play_onclick)
61 self.stop_button = gtk.Button(stock=gtk.STOCK_MEDIA_STOP)
62 self.stop_button.connect("clicked", self.stop_onclick)
63 self.quit_button = gtk.Button(stock=gtk.STOCK_QUIT)
64 self.quit_button.connect("clicked", self.quit_onclick)
66 self.buttons = gtk.HButtonBox()
67 self.buttons.add(self.play_button)
68 self.buttons.add(self.stop_button)
69 self.buttons.add(self.quit_button)
71 #pack window
72 self.window = gtk.Window()
73 self.vbox = gtk.VBox() # vertical box
74 self.vbox.pack_start(self.screen)
75 self.vbox.pack_start(self.buttons)
76 self.window.add(self.vbox)
78 # Create GStreamer pipeline
79 self.pipeline = gst.Pipeline()
80 self.videosrc = videotestsrc()
81 self.pipeline.add(self.videosrc)
82 self.sink = gst.element_factory_make("ximagesink", "sink")
83 self.pipeline.add(self.sink)
84 self.videosrc.link(self.sink)
86 #self.window.connect("delete_event", self.delete_event)
87 self.window.connect("destroy", self.destroy)
89 self.window.show_all()
91 def play_onclick(self, widget):
92 print "play"
93 self.sink.set_xwindow_id(self.screen.window.xid)
94 self.pipeline.set_state(gst.STATE_PLAYING)
96 def stop_onclick(self, widget):
97 print "stop"
98 self.pipeline.set_state(gst.STATE_READY)
100 def destroy(self, widget, data=None):
101 print "bye"
102 gtk.main_quit()
104 quit_onclick = destroy
106 start = Main()
107 gtk.main()