#!/usr/bin/python import sys import gobject import pygst pygst.require('0.10') import gst import gtk import gtk.glade #Give glade file path fname = 'small_gui.glade' # create widget tree ... App = gtk.glade.XML(fname) drawingarea1 = App.get_widget('drawingarea1') snapshot_image = App.get_widget('image1') snapshotbutton = App.get_widget('snapshotbutton') App.signal_autoconnect(locals()) called_once = False class MyInjectorSrc(gst.BaseSrc): __gsttemplates__ = ( gst.PadTemplate("src", gst.PAD_SRC, gst.PAD_ALWAYS, gst.caps_new_any()), ) def __init__(self, name, buffer): self.__gobject_init__() self.mybuffer = buffer self.set_name(name) def do_create(self, offset, size): dummybuffer = self.get_pad("src").alloc_buffer(0,self.mybuffer.size,self.mybuffer.caps) return gst.FLOW_OK, self.mybuffer def do_get_caps(self): print "MyInjectorSrc.do_get_caps was called" return self.mybuffer.caps gobject.type_register(MyInjectorSrc) class SnapshotCreator: def __init__(self,buffer): print "I am in SnapshotCreator.__init__, buffer.size = ", buffer.size print "buffer.caps = ", str(buffer.caps) self.src = MyInjectorSrc('injector_src',buffer) self.csp = gst.element_factory_make("ffmpegcolorspace","csp1") self.pngenc = gst.element_factory_make("pngenc") self.sink = gst.element_factory_make("filesink") self.sink.set_property("location","/home/frepe/src/biooptico/snapshot.png") self.ss_pipeline = gst.Pipeline() self.ss_pipeline.add(self.src,self.csp,self.pngenc,self.sink) result = self.src.link(self.csp) self.csp.link(self.pngenc) self.pngenc.link(self.sink) self.ss_pipeline.get_bus().add_signal_watch() self.ss_pipeline.get_bus().add_watch(self.__ss_pipelineMessageHandler__) print "Will now start ss_pipeline..." self.ss_pipeline.set_state (gst.STATE_PLAYING) print "... ss_pipeline started." def __ss_pipelineMessageHandler__(self,bus,message): print "State changed, str(message) = ", str(message) return True class Player: def __init__(self): self.playbin = gst.element_factory_make("playbin") self.playbin.set_property('uri','file:///home/frepe/src/biooptico/AndersFilmer/davidsson1.avi') def start(self): self.playbin.set_state (gst.STATE_PLAYING) def get_snapshot(self,button): print "in Player.get_snapshot" self.snapshot_buffer = self.playbin.get_property('frame') print "got snapshot, size = ", self.snapshot_buffer.size x = SnapshotCreator(self.snapshot_buffer) myPlayer = Player() snapshotbutton.connect("clicked",myPlayer.get_snapshot) myPlayer.start() gtk.main()