X-Git-Url: http://git.asbjorn.biz/?p=talkcutter.git;a=blobdiff_plain;f=src%2Fvideoplayer.py;h=0d88a22900f88e295e3498c3149d8b400c44e639;hp=04f0f80c03386ce250a495826484b900562ecc88;hb=6958c5bcc833e071bb8b0cae1483c02c00c7099b;hpb=66912d768e1245aaaf77728af7c38bf299e0bb8d diff --git a/src/videoplayer.py b/src/videoplayer.py index 04f0f80..0d88a22 100644 --- a/src/videoplayer.py +++ b/src/videoplayer.py @@ -4,79 +4,32 @@ import sys import pygtk import gtk import gtk.glade +from mediaplayer import mediaplayer -class videoplayer: +class videoplayer(mediaplayer): + def __init__( self, parent ): self.parent = parent self.wTree = parent.wTree - self.playbin = gst.element_factory_make('playbin2') + self.spinner = self.wTree.get_widget('video_spin') + self.seeker = self.wTree.get_widget('video_seeker') + self.label = self.wTree.get_widget('video_label') + self.drawingarea = self.wTree.get_widget('video') + + super(videoplayer, self).__init__() self.sink = gst.element_factory_make('xvimagesink') self.sink.set_property('force-aspect-ratio', True) self.playbin.set_property('video-sink', self.sink) - self.bus = self.playbin.get_bus() - self.bus.add_signal_watch() - self.bus.connect("message::eos", self.on_finish) + audiosink = gst.element_factory_make('fakesink') + self.playbin.set_property('audio-sink', audiosink) - self.drawingarea = self.wTree.get_widget('video') self.drawingarea.connect('realize', self.on_video_realized) - self.spinner = self.wTree.get_widget('video_spin') - #self.spinner.connect('change-value', self.on_) - - self.seeker = self.wTree.get_widget('video_seeker') - self.seeker.set_range(0, 100) - self.seeker.set_increments(1, 10) - self.seeker.connect('change-value', self.on_seeker_change) - - self.label = self.wTree.get_widget('video_label') - - self.is_playing = False - - def play(self, uri): - self.playbin.set_property('uri', uri) - self.playbin.set_state(gst.STATE_PLAYING) - self.label.label = 'f'; - gobject.timeout_add(100, self.update_slider) - self.is_playing = True - - def on_finish(self, bus, message): - self.playbin.set_state(gst.STATE_PAUSED); - self.slider.set_value(0); def on_video_realized(self, sender): self.sink.set_xwindow_id(self.drawingarea.window.xid) - def update_slider(self): - if not self.is_playing: - return False # cancel timeout - - try: - nanosecs, format = self.playbin.query_position(gst.FORMAT_TIME) - duration_nanosecs, format = self.playbin.query_duration(gst.FORMAT_TIME) - - # block seek handler so we don't seek when we set_value() - self.seeker.handler_block_by_func(self.on_seeker_change) - - self.seeker.set_range(0, float(duration_nanosecs) / gst.SECOND) - self.seeker.set_value(float(nanosecs) / gst.SECOND) - - self.seeker.handler_unblock_by_func(self.on_seeker_change) - - except gst.QueryError: - # pipeline must not be ready and does not know position - pass - - return True # continue calling every 30 milliseconds - - - def on_seeker_change(self, slider, a, b): - print 'on_seeker_change' - seek_time_secs = slider.get_value() - self.playbin.seek_simple(gst.FORMAT_TIME, gst.SEEK_FLAG_FLUSH | gst.SEEK_FLAG_KEY_UNIT, seek_time_secs * gst.SECOND) - - -