''' SVPlayer player backend objects (c) 2011-2012 Jan ONDREJ (SAL) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. ''' import sys, os, time, glob, itertools from urllib import pathname2url #from config import * from sgtk import * from base import BasePlayerWidget ### MPlayer ### from mplayer.gtk2 import GtkPlayerView from mplayer import Step class MPlayerWidget(GtkPlayerView, BasePlayerWidget): ''' Mplayer widget ''' name = 'mplayer' max_volume = 100 parent = None def __init__(self, media=None, subtitles=[], options={}, events=True): GtkPlayerView.__init__(self) if hasattr(self, '_mplayer'): self.player = self._mplayer self.player.args += tuple( ['-volume', '0'] + list(self.dict2list(options)) ) self.modify_bg(Gtk.STATE_NORMAL, COLOR_BLACK) self.playing = False self.set_volume(0) self.svp_state = None self.connect('destroy', self.svp_eof) if media: self.set_media(media, *options) def __del__(self): self.player.quit() def dict2list(self, options): return [ x for x in itertools.chain.from_iterable(options.items()) if x is not None ] def svp_eof(self): self.svp_state = "Ended" def set_media(self, url, options): # does not work self.player.args += tuple(self.dict2list(options)) if url.startswith("file://"): url = url[7:] #print "mplayer LOAD", url self.player.loadfile(url) self.playing = True def get_size(self): return (self.player.width, self.player.height) def get_state(self): if self.svp_state: return self.svp_state elif self.player.paused: return "Paused" elif self.player.time_pos is None: return "Stopped" else: return "Playing" def was_ended(self): return self.svp_state=="Ended" def get_volume(self): return self.player.volume or 0 def set_volume(self, volume): self.player.volume = volume def get_mute(self): return self.player.mute def set_mute(self, value): self.player.mute = value def toggle_mute(self): self.player.mute = Step() def set_deinterlace(self, method): self.player.deinterlace = True def set_crop(self, x): pass # not implemented in mplayer def play(self): pass # no need to play def stop(self): #print "mplayer STOP" if self.playing: #self.player._run_command("stop") self.player.quit() def pause(self, state=None): if state is None: self.player._run_command("pause") self.paused = not self.paused elif self.paused != state: self.player._run_command("pause") self.paused = state def get_tracks(self, priority=[]): return [] # TODO: not implemented yet def get_position(self): if self.player.time_pos is not None: return self.player.percent_pos, \ self.player.time_pos, self.player.length return 0, 0, 0.01 def forward(self, seconds): if self.player.time_pos is not None: self.player.time_pos += seconds def seek(self, position): self.player.time_pos = self.player.length*position/100 def print_info(self): print "State:", self.get_state() print "Length:", self.player.length print "Size:", self.get_size()