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