Author: tack
Date: Tue Nov 28 18:06:44 2006
New Revision: 2102

Modified:
   trunk/popcorn/src/backends/base.py
   trunk/popcorn/src/backends/gstreamer/child.py
   trunk/popcorn/src/backends/gstreamer/player.py
   trunk/popcorn/src/backends/mplayer/player.py
   trunk/popcorn/src/backends/xine/child.py
   trunk/popcorn/src/backends/xine/player.py
   trunk/popcorn/src/generic.py

Log:
Fix bug with mplayer where it would append device= to alsa paramters when
no device specified in config; add set_audio_delay() API.


Modified: trunk/popcorn/src/backends/base.py
==============================================================================
--- trunk/popcorn/src/backends/base.py  (original)
+++ trunk/popcorn/src/backends/base.py  Tue Nov 28 18:06:44 2006
@@ -158,6 +158,12 @@
     # position property based on get_state and _set_state
     _position = property(get_position, _set_position, None, 'player position')
 
+ 
+    def get_audio_delay(self):
+        """
+        Returns the audio delay set by set_audio_delay()
+        """
+        return self._audio_delay
 
 
     def set_window(self, window):

Modified: trunk/popcorn/src/backends/gstreamer/child.py
==============================================================================
--- trunk/popcorn/src/backends/gstreamer/child.py       (original)
+++ trunk/popcorn/src/backends/gstreamer/child.py       Tue Nov 28 18:06:44 2006
@@ -200,3 +200,11 @@
         self._gst.seek(1.0, gst.FORMAT_TIME,
                        gst.SEEK_FLAG_FLUSH | gst.SEEK_FLAG_ACCURATE,
                        gst.SEEK_TYPE_SET, pos, gst.SEEK_TYPE_NONE, 0)
+
+
+    def set_audio_delay(self, delay):
+        """
+        Sets audio delay.  Positive value defers audio by delay.
+        """
+        # NYI
+        pass

Modified: trunk/popcorn/src/backends/gstreamer/player.py
==============================================================================
--- trunk/popcorn/src/backends/gstreamer/player.py      (original)
+++ trunk/popcorn/src/backends/gstreamer/player.py      Tue Nov 28 18:06:44 2006
@@ -121,3 +121,11 @@
         SEEK_RELATIVE, SEEK_ABSOLUTE or SEEK_PERCENTAGE.
         """
         self._gst.seek(value, type)
+
+
+    def set_audio_delay(self, delay):
+        """
+        Sets audio delay.  Positive value defers audio by delay.
+        """
+        self._audio_delay = delay
+        self._gst.set_audio_delay(delay)

Modified: trunk/popcorn/src/backends/mplayer/player.py
==============================================================================
--- trunk/popcorn/src/backends/mplayer/player.py        (original)
+++ trunk/popcorn/src/backends/mplayer/player.py        Tue Nov 28 18:06:44 2006
@@ -355,6 +355,7 @@
             self._file = mrl
 
         self._state = STATE_OPENING
+        self._audio_delay = 0.0
 
         # We have a problem at this point. The 'open' function is used to
         # open the stream and provide information about it. After that, the
@@ -510,7 +511,7 @@
                 device = self._config.audio.device.surround51
             else:
                 device = self._config.audio.device.stereo
-            if device != 'auto':
+            if device != '':
                 args[-1] += ':device=' + device.replace(':', '=')
             
         # There is no way to make MPlayer ignore keys from the X11 window.  So
@@ -584,6 +585,14 @@
         self._child_write("seek %f %s" % (value, s.index(type)))
 
 
+    def set_audio_delay(self, delay):
+        """
+        Sets audio delay.  Positive value defers audio by delay.
+        """
+        self._audio_delay = delay
+        self._child_write("audio_delay %f 1" % -delay)
+
+
     #
     # Methods for filter handling (not yet in generic and base
     #

Modified: trunk/popcorn/src/backends/xine/child.py
==============================================================================
--- trunk/popcorn/src/backends/xine/child.py    (original)
+++ trunk/popcorn/src/backends/xine/child.py    Tue Nov 28 18:06:44 2006
@@ -363,6 +363,12 @@
             self._stream.play(pos = (value / 100.0) * 65535)
 
 
+    def set_audio_delay(self, delay):
+        # xine-lib wants units in 1/90000 sec, so convert.
+        delay = -int(delay * 90000.0)
+        self._stream.set_parameter(xine.PARAM_AV_OFFSET, delay)
+
+
     def stop(self):
         self._status.stop()
         if self._stream:

Modified: trunk/popcorn/src/backends/xine/player.py
==============================================================================
--- trunk/popcorn/src/backends/xine/player.py   (original)
+++ trunk/popcorn/src/backends/xine/player.py   Tue Nov 28 18:06:44 2006
@@ -242,6 +242,7 @@
             self._xine.configure_audio(self._config.audio.driver)
             self._xine.configure_stream()
         self._position = 0.0
+        self._audio_delay = 0.0
         log.debug('xine open')
         self._xine.open(self._mrl)
         self._state = STATE_OPENING
@@ -294,6 +295,21 @@
         self._xine.seek(value, type)
 
 
+    def set_audio_delay(self, delay):
+        """
+        Sets audio delay.  Positive value defers audio by delay.
+        """
+        self._audio_delay = delay
+        self._xine.set_audio_delay(delay)
+
+
+    def get_audio_delay(self):
+        """
+        Returns the audio delay set by set_audio_delay()
+        """
+        return self._audio_delay
+
+
     def nav_command(self, input):
         """
         Issue the navigation command to the player.

Modified: trunk/popcorn/src/generic.py
==============================================================================
--- trunk/popcorn/src/generic.py        (original)
+++ trunk/popcorn/src/generic.py        Tue Nov 28 18:06:44 2006
@@ -334,6 +334,24 @@
         return 0.0
 
 
+    @required_states(STATE_PLAYING, STATE_PAUSED)
+    def set_audio_delay(self, delay):
+        """
+        Sets the audio delay relative to the video.  A positive value causes
+        audio to come later, while a negative value plays the audio before.
+        """
+        self._player.set_audio_delay(delay)
+
+
+    def get_audio_delay(self, delay):
+        """
+        Returns the audio delay.
+        """
+        if self._player:
+            return self._player.get_audio_delay()
+        return 0.0
+
+
     def get_info(self):
         """
         Get information about the stream.

-------------------------------------------------------------------------
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