Author: dmeyer
Date: Thu Jan  4 18:13:53 2007
New Revision: 2347

Added:
   trunk/popcorn/src/backends/mplayer/child.py
Modified:
   trunk/popcorn/src/backends/mplayer/player.py

Log:
make it more look like the other backends

Added: trunk/popcorn/src/backends/mplayer/child.py
==============================================================================
--- (empty file)
+++ trunk/popcorn/src/backends/mplayer/child.py Thu Jan  4 18:13:53 2007
@@ -0,0 +1,75 @@
+import kaa.notifier
+
+# start mplayer in gdb for debugging
+USE_GDB = False
+
+
+class ChildCommand(object):
+    """
+    A command or message for the child.
+    """
+    def __init__(self, app, cmd):
+        self._app = app
+        self._cmd = cmd
+
+
+    def __call__(self, *args):
+        """
+        Send command to child.
+        """
+        if not self._app.is_alive():
+            return
+        cmd = '%s %s' % (self._cmd, ' '.join([ str(x) for x in args]))
+        # print self._func, cmd
+        self._app._child.write(cmd.strip() + '\n')
+
+
+class MplayerApp(object):
+
+    def __init__(self, command=None):
+        if not command:
+            return
+        if USE_GDB:
+            self._child = kaa.notifier.Process("gdb")
+            self._command = command
+        else:
+            self._child = kaa.notifier.Process(command)
+        self.signals = self._child.signals
+        stop = kaa.notifier.WeakCallback(self._child_stop)
+        self._child.set_stop_command(stop)
+                
+    def start(self, args):
+        if USE_GDB:
+            self._child.start(self._command)
+            self._child.write("run %s\n" % ' '.join(args))
+            self._child.signals["stdout"].connect_weak(self._child_handle_line)
+            self._child.signals["stderr"].connect_weak(self._child_handle_line)
+        else:
+            self._child.start(args)
+
+
+    def _child_stop(self):
+        self.quit()
+        # Could be paused, try sending again.
+        self.quit()
+
+
+    def _child_handle_line(line):
+        if line.startswith("Program received signal SIGSEGV"):
+            # Mplayer crashed, issue backtrace.
+            self._child.write("thread apply all bt\n")
+            
+
+    def stop(self):
+        self._child.stop()
+
+
+    def is_alive(self):
+        return self._child and self._child.is_alive()
+    
+
+    def __getattr__(self, attr):
+        """
+        Return ChildCommand object.
+        """
+        return ChildCommand(self, attr)

Modified: trunk/popcorn/src/backends/mplayer/player.py
==============================================================================
--- trunk/popcorn/src/backends/mplayer/player.py        (original)
+++ trunk/popcorn/src/backends/mplayer/player.py        Thu Jan  4 18:13:53 2007
@@ -47,8 +47,7 @@
 from kaa.popcorn.backends.base import MediaPlayer
 from kaa.popcorn.ptypes import *
 
-# start mplayer in gdb for debugging
-USE_GDB = False
+from child import MplayerApp
 
 BUFFER_UNLOCKED = 0x10
 BUFFER_LOCKED = 0x20
@@ -177,11 +176,10 @@
         if not self._mp_cmd:
             raise PlayerError, "No MPlayer executable found in PATH"
 
-        self._mplayer = None
+        self._mplayer = MplayerApp()
 
         self._filters_pre = []
         self._filters_add = []
-        self._last_line = None
 
         self._mp_info = _get_mplayer_info(self._mp_cmd, self._handle_mp_info)
         self._check_new_frame_t = kaa.notifier.WeakTimer(self._check_new_frame)
@@ -208,19 +206,11 @@
     # child IO
     #
 
-    def _child_stop(self):
-        self._command("quit")
-        # Could be paused, try sending again.
-        self._command("quit")
-
-
     def _child_handle_line(self, line):
         if re.search("@@@|outbuf|overlay", line, re.I):
             childlog(line)
         elif line[:2] not in ("A:", "V:"):
             childlog(line)
-        elif USE_GDB:
-            childlog(line)
 
         if line.startswith("V:") or line.startswith("A:"):
             m = MPlayer.RE_STATUS.search(line)
@@ -322,20 +312,6 @@
         elif line.startswith("FATAL:"):
             log.error(line.strip())
 
-        elif USE_GDB and line.startswith("Program received signal SIGSEGV"):
-            # Mplayer crashed, issue backtrace.
-            self._mplayer.write("thread apply all bt\n")
-
-        if line.strip():
-            self._last_line = line
-
-
-    def _command(self, cmd):
-        if not self._is_alive():
-            return False
-        log.info('mplayer send %s', cmd)
-        self._mplayer.write(cmd + "\n")
-
 
     def _child_exited(self, exitcode):
         log.info('mplayer exited')
@@ -343,7 +319,7 @@
 
 
     def _is_alive(self):
-        return self._mplayer and self._mplayer.is_alive()
+        return self._mplayer.is_alive()
 
 
 
@@ -538,19 +514,11 @@
 
         log.info("spawn: %s %s", self._mp_cmd, ' '.join(args))
 
-        if USE_GDB:
-            self._mplayer = kaa.notifier.Process("gdb")
-            self._mplayer.start(self._mp_cmd)
-            self._mplayer.write("run %s\n" % ' '.join(args))
-        else:
-            self._mplayer = kaa.notifier.Process(self._mp_cmd)
-            self._mplayer.start(args)
-
+        self._mplayer = MplayerApp(self._mp_cmd)
         self._mplayer.signals["stdout"].connect_weak(self._child_handle_line)
         self._mplayer.signals["stderr"].connect_weak(self._child_handle_line)
         self._mplayer.signals["completed"].connect_weak(self._child_exited)
-        stop = kaa.notifier.WeakCallback(self._child_stop)
-        self._mplayer.set_stop_command(stop)
+        self._mplayer.start(args)
         return
 
 
@@ -558,23 +526,22 @@
         """
         Stop playback.
         """
-        if self._mplayer:
-            self._mplayer.stop()
-            self._state = STATE_SHUTDOWN
+        self._mplayer.stop()
+        self._state = STATE_SHUTDOWN
 
 
     def pause(self):
         """
         Pause playback.
         """
-        self._command("pause")
+        self._mplayer.pause()
 
 
     def resume(self):
         """
         Resume playback.
         """
-        self._command("pause")
+        self._mplayer.pause()
 
 
     def seek(self, value, type):
@@ -582,7 +549,7 @@
         SEEK_RELATIVE, SEEK_ABSOLUTE and SEEK_PERCENTAGE.
         """
         s = [SEEK_RELATIVE, SEEK_PERCENTAGE, SEEK_ABSOLUTE]
-        self._command("seek %f %s" % (value, s.index(type)))
+        self._mplayer.seek(value, s.index(type))
 
 
     #
@@ -593,40 +560,32 @@
         """
         Sets audio delay. Positive value defers audio by delay.
         """
-        if not self._is_alive():
-            return
-        self._command("audio_delay %f 1" % -delay)
+        self._mplayer.audio_delay(-delay, 1)
 
 
     def _prop_audio_track(self, id):
         """
         Change audio track (mpeg and mkv only)
         """
-        if not self._is_alive():
-            return
-        self._command("switch_audio %s" % id)
+        self._mplayer.switch_audio(id)
 
 
     def _prop_subtitle_track(self, id):
         """
         Change subtitle track
         """
-        if not self._is_alive():
-            return
-        self._command("sub_select %s" % id)
+        self._mplayer.sub_select(id)
 
 
     def _prop_subtitle_filename(self, filename):
         """
         Change subtitle filename
         """
-        if not self._is_alive():
-            return
-        self._command("sub_load %s" % filename)
+        self._mplayer.sub_load(filename)
 
 
     #
-    # Methods for filter handling (not yet in generic and base
+    # Methods for filter handling (not yet in generic and base)
     #
 
     def prepend_filter(self, filter):
@@ -698,7 +657,7 @@
         if invalid_regions:
             for (x, y, w, h) in invalid_regions:
                 cmd.append("invalidate=%d:%d:%d:%d" % (x, y, w, h))
-        self._command("overlay %s" % ",".join(cmd))
+        self._mplayer.overlay(*cmd)
         self._overlay_set_lock(BUFFER_LOCKED)
 
         try:
@@ -752,9 +711,9 @@
 
         size = self._cur_outbuf_mode[2]
         if size == None:
-            self._command("outbuf %d" % mode)
+            self._mplayer.outbuf(mode)
         else:
-            self._command("outbuf %d %d %d" % (mode, size[0], size[1]))
+            self._mplayer.outbuf(mode, size[0], size[1])
 
 
     def unlock_frame_buffer(self):

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to