All pastes #187120 Raw Edit

Miscellany

public python v1 · immutable
#187120 ·published 2006-09-30 20:36 UTC
rendered paste body
import sysimport gobjectimport pygstpygst.require('0.10')import gstimport gtk  import gtk.glade import buffer2pngimport time#Give glade file path fname = 'biooptico.glade'# create widget tree ...  App = gtk.glade.XML(fname)drawingarea1 = App.get_widget('drawingarea1')drawingarea2 = App.get_widget('drawingarea2')snapshot_image = App.get_widget('image1')snapshotbutton = App.get_widget('snapshotbutton')recordbutton = App.get_widget('recordbutton')App.signal_autoconnect(locals())class Player:    def __init__(self):        self.src = gst.element_factory_make('v4l2src')        self.caps0 = gst.element_factory_make('capsfilter')        self.csp0 = gst.element_factory_make('ffmpegcolorspace')        self.csp1 = gst.element_factory_make('ffmpegcolorspace')        self.deintl = gst.element_factory_make('ffdeinterlace')        self.tee = gst.element_factory_make('tee')        self.queue0 = gst.element_factory_make('queue')        self.queue1 = gst.element_factory_make('queue')        self.sink0 = gst.element_factory_make('xvimagesink')        self.sink1 = gst.element_factory_make('ximagesink')        self.pipeline = gst.Pipeline()                self.pipeline.add(self.src,self.caps0,self.csp0,self.csp1,self.deintl,self.tee,self.queue0,self.queue1,self.sink0,self.sink1)                self.caps0.set_property('caps',gst.caps_from_string('video/x-raw-yuv,width=480,height=360'))        self.sink0.set_property('sync',False)                self.src.link(self.caps0)        #self.dec.connect('pad-added',self.__padAddedToDecodebin__)        self.caps0.link(self.csp0)        self.csp0.link(self.deintl)        self.deintl.link(self.tee)        self.tee.link(self.queue0)        self.queue0.link(self.sink0)        self.tee.link(self.queue1)        self.queue1.link(self.csp1)        self.csp1.link(self.sink1)                #self.src.set_property('location','/home/frepe/src/biooptico/playground/AndersFilmer/davidsson1_trans.avi')        gtk.gdk.Display.sync(drawingarea1.get_display())        self.sink0.set_xwindow_id(drawingarea1.window.xid)        self.sink1.set_xwindow_id(drawingarea2.window.xid)                self.grabber_queue = gst.element_factory_make('queue')        self.grabber_vrate = gst.element_factory_make('videorate')        self.grabber_caps0 = gst.element_factory_make('capsfilter')        self.grabber_enc = gst.element_factory_make('theoraenc')        self.grabber_mux = gst.element_factory_make('oggmux')        self.grabber_tee = gst.element_factory_make('tee')        self.grabber_fakesink = gst.element_factory_make('fakesink')        self.grabber_filesink = gst.element_factory_make('filesink')        self.pipeline.add(self.grabber_queue)        self.pipeline.add(self.grabber_vrate)        self.pipeline.add(self.grabber_caps0)        self.pipeline.add(self.grabber_enc)        self.pipeline.add(self.grabber_mux)        self.pipeline.add(self.grabber_fakesink)        self.pipeline.add(self.grabber_filesink)                self.grabber_caps0.set_property('caps',gst.caps_from_string('video/x-raw-yuv,framerate=25/2'))        self.grabber_enc.set_property('quality',16)        self.grabber_filesink.set_property('location','myrec.ogg')                    self.tee.link(self.grabber_queue)        self.grabber_queue.link(self.grabber_vrate)        self.grabber_vrate.link(self.grabber_caps0)        self.grabber_caps0.link(self.grabber_fakesink)        self.grabber_enc.link(self.grabber_mux)        self.grabber_mux.link(self.grabber_filesink)            def __padAddedToDecodebin__(self,element,pad):        pad.link(self.csp0.get_pad('sink'))            def start(self):        self.pipeline.set_state(gst.STATE_PLAYING)            def __probeCb__(self,pad,buffer):        print "__probeCb__ called"        buffer2png.buffer2png(buffer,'/home/frepe/src/biooptico/proper/mysnapshot.png')        pad.remove_buffer_probe(self.id)        return True            def on_snapshotbutton_clicked(self,button):        "The snapshot button was clicked"        print "on_snapshotbutton_clicked"        self.id = self.sink0.get_pad('sink').add_buffer_probe(self.__probeCb__)        snapshot_image.set_from_file('/home/frepe/src/biooptico/proper/mysnapshot.png')        snapshot_image.show()        return True    def on_recordbutton_clicked(self,button):        "The record button was clicked"        print "on_recordbutton_clicked"        if ( button.get_active()):            # Start recording here            self.pipeline.set_state(gst.STATE_PAUSED)            self.grabber_caps0.unlink(self.grabber_fakesink)            self.grabber_caps0.link(self.grabber_enc)                        self.pipeline.set_state(gst.STATE_PLAYING)                    else:            # Stop recording here            self.pipeline.set_state(gst.STATE_PAUSED)                        self.grabber_caps0.unlink(self.grabber_enc)            self.grabber_caps0.link(self.grabber_fakesink)                        self.pipeline.set_state(gst.STATE_PLAYING)                    return True    myPlayer = Player()myPlayer.start()recordbutton.connect('clicked',myPlayer.on_recordbutton_clicked)snapshotbutton.connect('clicked',myPlayer.on_snapshotbutton_clicked)gtk.main()