From 66912d768e1245aaaf77728af7c38bf299e0bb8d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Asbj=C3=B8rn=20Sloth=20T=C3=B8nnesen?= Date: Thu, 25 Mar 2010 17:02:20 +0000 Subject: [PATCH] initail commit --- .gitignore | 1 + src/main.glade | 419 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/talkcutter.py | 59 ++++++++ src/videoplayer.py | 82 ++++++++++ 4 files changed, 561 insertions(+) create mode 100644 .gitignore create mode 100644 src/main.glade create mode 100755 src/talkcutter.py create mode 100644 src/videoplayer.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0d20b64 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.pyc diff --git a/src/main.glade b/src/main.glade new file mode 100644 index 0000000..f77d5fd --- /dev/null +++ b/src/main.glade @@ -0,0 +1,419 @@ + + + + + + + + + True + vertical + + + True + + + True + _File + True + + + True + + + gtk-new + True + True + True + + + + + gtk-open + True + True + True + + + + + gtk-save + True + True + True + + + + + gtk-save-as + True + True + True + + + + + True + + + + + gtk-quit + True + True + True + + + + + + + + + True + _Edit + True + + + True + + + gtk-cut + True + True + True + + + + + gtk-copy + True + True + True + + + + + gtk-paste + True + True + True + + + + + gtk-delete + True + True + True + + + + + + + + + True + _View + True + + + + + True + _Help + True + + + True + + + gtk-about + True + True + True + + + + + + + + + False + 0 + + + + + True + True + + + True + vertical + + + + + + + + + + + + False + True + + + + + True + vertical + + + True + vertical + + + True + + + True + + + + + + 0 + + + + + True + video filename + + + False + 1 + + + + + True + + + True + True + + + 0 + + + + + True + True + + 15 + + + False + 1 + + + + + gtk-media-pause + True + True + True + True + + + False + 2 + + + + + False + 2 + + + + + 0 + + + + + True + + + False + 1 + + + + + True + vertical + + + True + audio filename + + + False + 0 + + + + + True + + + True + True + + + 0 + + + + + True + True + + 15 + + + False + 1 + + + + + gtk-media-pause + True + True + True + True + + + False + 2 + + + + + False + 1 + + + + + False + 2 + + + + + True + + + False + 3 + + + + + True + vertical + + + True + talk filename + + + False + 0 + + + + + True + + + True + True + + + 0 + + + + + True + True + + 15 + + + False + 1 + + + + + gtk-media-pause + True + True + True + True + + + False + 2 + + + + + False + 1 + + + + + False + 4 + + + + + False + True + + + + + 1 + + + + + True + 2 + + + False + 2 + + + + + + diff --git a/src/talkcutter.py b/src/talkcutter.py new file mode 100755 index 0000000..bf91923 --- /dev/null +++ b/src/talkcutter.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python +import os +import gst, gtk, gobject +import sys +from videoplayer import videoplayer +try: + import pygtk + pygtk.require("2.0") +except: + pass +try: + import gtk + import gtk.glade +except: + print("GTK Not Availible") + sys.exit(1) + + +class TalkCutter: + + wTree = None + + def __init__( self ): + self.wTree = gtk.glade.XML( "main.glade" ) + + dic = { + "on_quit_clicked" : self.quit, + "on_video_realize" : self.on_video_realize, + } + + self.wTree.signal_autoconnect( dic ) + + self.drawingarea = self.wTree.get_widget("video") + + print self.drawingarea + + self.video = videoplayer(self) + self.video.play('file:///mnt/dl/dkuug/video/osd10/dan/dan.dv') + + print self.wTree.get_widget('dMain').show() + self.wTree.visible = True + gtk.main() + + + def on_destroy(self, window): + self.playbin.set_state(gst.STATE_NULL) + gtk.main_quit() + + def on_video_realize(self, sender): + print 'triggered' + print self.drawingarea.window.xid + + def quit(self, widget): + gtk.main_quit() + sys.exit(0) + +if __name__ == "__main__": + TalkCutter() + diff --git a/src/videoplayer.py b/src/videoplayer.py new file mode 100644 index 0000000..04f0f80 --- /dev/null +++ b/src/videoplayer.py @@ -0,0 +1,82 @@ +import os +import gst, gtk, gobject +import sys +import pygtk +import gtk +import gtk.glade + +class videoplayer: + def __init__( self, parent ): + self.parent = parent + self.wTree = parent.wTree + + self.playbin = gst.element_factory_make('playbin2') + + 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) + + 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) + + + -- 1.7.10.4