def __init__(self, inFile): self.allVideo = AllVideos(inFile) self.allVideo.save() self.pairVideo = self.allVideo.previous() if self.pairVideo.encVideo is not None: self.filename = self.pairVideo.encFile self.video = self.pairVideo.encVideo elif self.pairVideo.rawVideo is not None: self.filename = self.pairVideo.rawFile self.video = self.pairVideo.rawVideo self.rotation = 0 self.title = u"" self.keywords = u"" logger.info("Initialization of the windowed graphical interface ...") self.xml = GTKglade.XML(unifiedglade, root="videoWindow") self.xml.get_widget("logo").set_from_pixbuf(gtk.gdk.pixbuf_new_from_file(os.path.join(installdir, "gnome_mplayer_logo.png"))) self.xml.get_widget("videoWindow").show_now() self.timeout_handler_id = gobject.timeout_add(1000, timer_pass) hbox1 = self.xml.get_widget("hbox1") self.mplayer = PyGtkMplayer() hbox1.pack2(self.mplayer) # hbox1.pack_end(self.mplayer) hbox1.show_all() self.videoWid = long(self.mplayer.get_id()) self.mplayer.setwid(self.videoWid) self.xml.get_widget("videoWindow").resize(800, 400) self.mplayer.set_size_request(640, 480) self.mplayer.loadfile(self.filename) self.flush_event_queue() dictHandlers = { 'on_videoWindow_destroy': self.destroy, 'on_play_clicked': self.play, "on_pause_clicked":self.mplayer.pause, "on_rewind_clicked":self.mplayer.backward, "on_forward_clicked":self.mplayer.forward, "on_reEncode_clicked":self.reEncode, "on_nextVideo_clicked":self.next, "on_previousVideo_clicked":self.previous, } self.xml.signal_autoconnect(dictHandlers) self.flush_event_queue() self.loadVideo()
class VideoInterface(object): """ class interface that manages the GUI using Glade-2 """ def __init__(self, inFile): self.allVideo = AllVideos(inFile) self.allVideo.save() self.pairVideo = self.allVideo.previous() if self.pairVideo.encVideo is not None: self.filename = self.pairVideo.encFile self.video = self.pairVideo.encVideo elif self.pairVideo.rawVideo is not None: self.filename = self.pairVideo.rawFile self.video = self.pairVideo.rawVideo self.rotation = 0 self.title = u"" self.keywords = u"" logger.info("Initialization of the windowed graphical interface ...") self.xml = GTKglade.XML(unifiedglade, root="videoWindow") self.xml.get_widget("logo").set_from_pixbuf(gtk.gdk.pixbuf_new_from_file(os.path.join(installdir, "gnome_mplayer_logo.png"))) self.xml.get_widget("videoWindow").show_now() self.timeout_handler_id = gobject.timeout_add(1000, timer_pass) hbox1 = self.xml.get_widget("hbox1") self.mplayer = PyGtkMplayer() hbox1.pack2(self.mplayer) # hbox1.pack_end(self.mplayer) hbox1.show_all() self.videoWid = long(self.mplayer.get_id()) self.mplayer.setwid(self.videoWid) self.xml.get_widget("videoWindow").resize(800, 400) self.mplayer.set_size_request(640, 480) self.mplayer.loadfile(self.filename) self.flush_event_queue() dictHandlers = { 'on_videoWindow_destroy': self.destroy, 'on_play_clicked': self.play, "on_pause_clicked":self.mplayer.pause, "on_rewind_clicked":self.mplayer.backward, "on_forward_clicked":self.mplayer.forward, "on_reEncode_clicked":self.reEncode, "on_nextVideo_clicked":self.next, "on_previousVideo_clicked":self.previous, } self.xml.signal_autoconnect(dictHandlers) self.flush_event_queue() self.loadVideo() # gtk.main() def flush_event_queue(self): """Updates the GTK GUI before coming back to the gtk.main()""" gtkFlush() def destroy(self, *args): """destroy clicked by user""" self.mplayer.quit() gtk.main_quit() def loadVideo(self): """Load the video information and setup the GUI""" logger.debug("VideoInterface.loadVideo") self.xml.get_widget("filename").set_text(self.video.videoFile) self.xml.get_widget("model").set_text(self.video.camera.encode("UTF-8")) self.xml.get_widget("resolution").set_text("%ix%i" % (self.video.width, self.video.height)) self.xml.get_widget("size").set_text("%.2f %s" % smartSize(os.path.getsize(self.filename))) self.xml.get_widget("dateTime").set_text(self.video.timeStamp.strftime("%Y:%m:%d %Hh%Mm%Ss")) self.xml.get_widget("duration").set_text("%s s" % self.video.duration) self.xml.get_widget("video").set_text("%.1f fps\t%s\t%s" % (self.video.frameRate, self.video.videoCodec, self.video.videoBitRate)) self.xml.get_widget("audio").set_text("%s ch\t%.1fHz\t%s\t%s" % (self.video.audioChannel, self.video.audioSampleRate, self.video.audioCodec, self.video.audioBitRate)) if self.video.title: self.xml.get_widget("title").set_text(self.video.title) else: self.xml.get_widget("title").set_text("") if self.video.keywords: self.xml.get_widget("keyword").set_text(" ".join(self.video.keywords)) else: self.xml.get_widget("keyword").set_text("") self.play() def getRotation(self): if self.xml.get_widget("ccwRot").get_active() is True: rotation = 270 elif self.xml.get_widget("noRot").get_active() is True: rotation = 0 elif self.xml.get_widget("cwRot").get_active() is True: rotation = 90 return rotation def next(self, *args): """ Switch to next video """ logger.debug("NextVideo") self.pairVideo.saveMetadata() self.pairVideo = self.allVideo.next() if self.pairVideo.encVideo is not None: self.filename = self.pairVideo.encFile self.video = self.pairVideo.encVideo elif self.pairVideo.rawVideo is not None: self.filename = self.pairVideo.rawFile self.video = self.pairVideo.rawVideo logger.debug("VideoInterface.Playing video %s " % self.filename) self.loadVideo() self.mplayer.loadfile(self.filename) def previous(self, *args): """ Switch to previous video """ logger.debug("VideoInterface.PreviousVideo") self.pairVideo = self.allVideo.previous() if self.pairVideo.encVideo is not None: self.filename = self.pairVideo.encFile self.video = self.pairVideo.encVideo elif self.pairVideo.rawVideo is not None: self.filename = self.pairVideo.rawFile self.video = self.pairVideo.rawVideo logger.debug("Playing video %s " % self.filename) self.loadVideo() self.mplayer.loadfile(self.filename) def play(self, *args): """play the video""" logger.debug("ccwRot: %s, noRot: %s, cwRot: %s" % (self.xml.get_widget("ccwRot").get_active(), self.xml.get_widget("noRot").get_active(), self.xml.get_widget("cwRot").get_active())) rotation = self.getRotation() if rotation != self.rotation: self.rotation = rotation self.mplayer.quit() if rotation == 90: self.mplayer.videoFilter = "rotate=1" elif rotation == 270: self.mplayer.videoFilter = "rotate=2" else: self.mplayer.videoFilter = None self.videoWid = long(self.mplayer.get_id()) self.pairVideo.saveMetadata() logger.debug("Mplayer Wid is now %s" % self.videoWid) self.mplayer.setwid(self.videoWid) self.mplayer.loadfile(self.filename) else: self.pairVideo.saveMetadata() self.mplayer.play(*args) def reEncode(self, *args): """Re-Encode the video""" logger.debug("VideoInterface.reEncode") if self.video is None: logger.warning("VideoInterface.reEncode but self.video is None !!!") else: myTitle = self.xml.get_widget("title").get_text().strip() logger.debug("title is type %s" % type(myTitle)) if myTitle: self.video.title = myTitle lstKeys = self.xml.get_widget("keyword").get_text().split() if lstKeys: self.video.keywords = lstKeys strCamera = self.xml.get_widget("model").get_text().strip() if strCamera: self.video.camera = strCamera rotate = self.getRotation() if rotate == 90: self.video.rotation = u"Rotated 90 clock-wise" elif rotate in [-90, 270, ]: self.video.rotation = u"Rotated 90 counter clock-wise" else: self.video.rotation = u"Horizontal (normal)" try: timeVideo = datetime.datetime.strptime(self.xml.get_widget("dateTime").get_text(), "%Y:%m:%d %Hh%Mm%Ss") except ValueError: logger.warning("Not in DataTime format ...") else: self.video.timeStamp = timeVideo self.video.toDisk() self.video.reEncode()