Your message dated Mon, 21 Mar 2011 06:59:11 +0000
with message-id <[email protected]>
and subject line Bug#576836: fixed in quodlibet 2.2.99-1
has caused the Debian Bug report #576836,
regarding quodlibet: Buffering problems in network streams
to be marked as done.
This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.
(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)
--
576836: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=576836
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: quodlibet
Version: 2.2+debian-1
Severity: normal
Tags: patch upstream
[resend 2, because previous submit seems to be lost]
The current versions of quodlibet (using GStreamer) do not handle
Internet radio streams correctly. Some time ago (I assume pre version
2, or maybe Xine backend)) it worked correctly. First, on start it does
not wait for the buffer to fill, leading to choppy playback and to
extremely choppy playback when the net connection is actually used for
something besides radio.
Second, the stream is literally paused when the user pauses play. When
the user unpauses after a longer time, it will continue where it paused
and play the rest of the buffer and then fail because it can not get
matching followup data anymore.
I have attached a patch series against the Debian packaged version but
upstream does not appear to have changed the file in question, so the
patches should apply either way.
>From ab86d5e05e3d3336c14182680b7047e4bda4faad Mon Sep 17 00:00:00 2001
From: Andreas Bombe <[email protected]>
Date: Tue, 30 Mar 2010 22:53:46 +0200
Subject: [PATCH 1/3] gstbe: Fix halt playback on backend error
Playback was halted when the pipeline wasn't initialized, instead of
when the pipeline should be initialized but failed.
---
quodlibet/player/gstbe.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/quodlibet/player/gstbe.py b/quodlibet/player/gstbe.py
index 160b875..21fb71c 100644
--- a/quodlibet/player/gstbe.py
+++ b/quodlibet/player/gstbe.py
@@ -208,7 +208,7 @@ class GStreamerPlayer(BasePlayer):
"initialized. The pipeline might be invalid, "
"or the device may be in use. Check the "
"player preferences.")).run()
- self._paused = paused = True
+ self._paused = paused = True
self.emit((paused and 'paused') or 'unpaused')
if self.bin:
if self._paused:
--
1.7.0.3
>From bb51786bf414c14b9831de6fbb1c37ccb7bfdb52 Mon Sep 17 00:00:00 2001
From: Andreas Bombe <[email protected]>
Date: Tue, 30 Mar 2010 23:07:28 +0200
Subject: [PATCH 2/3] gstbe: Do not pause network streams, destroy pipeline for
them
Do the same thing the Xine backend does: If the request is to pause,
check if song is a file. Pause if file, stop (in GStreamer backend
meaning destroy pipeline) if it is not. On unpause, the code to
initialize a new pipeline if it does not exist is already in place.
Without this, radio streams that were paused for a long time will play
what is left in the buffer and then fail, since no matching followup
data can be received.
---
quodlibet/player/gstbe.py | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/quodlibet/player/gstbe.py b/quodlibet/player/gstbe.py
index 21fb71c..53ac364 100644
--- a/quodlibet/player/gstbe.py
+++ b/quodlibet/player/gstbe.py
@@ -211,10 +211,12 @@ class GStreamerPlayer(BasePlayer):
self._paused = paused = True
self.emit((paused and 'paused') or 'unpaused')
if self.bin:
- if self._paused:
+ if not self._paused:
+ self.bin.set_state(gst.STATE_PLAYING)
+ elif self.song.is_file:
self.bin.set_state(gst.STATE_PAUSED)
else:
- self.bin.set_state(gst.STATE_PLAYING)
+ self.__destroy_pipeline()
elif paused is True:
# Something wants us to pause between songs, or when
# we've got no song playing (probably StopAfterMenu).
--
1.7.0.3
>From 5da8e195ce168b7016f52522e099e320ce300cd5 Mon Sep 17 00:00:00 2001
From: Andreas Bombe <[email protected]>
Date: Mon, 29 Mar 2010 01:00:06 +0200
Subject: [PATCH 3/3] gstbe: Fix lack of buffering on radio streams
Listen to gst.MESSAGE_BUFFERING messages and set the stream to paused
while it is less than 100 percent. Introduce a new inhibit_play flag in
the player to allow the stream to be paused internally without leaking
this internal state to the user interface.
---
quodlibet/player/gstbe.py | 22 +++++++++++++++++++++-
1 files changed, 21 insertions(+), 1 deletions(-)
diff --git a/quodlibet/player/gstbe.py b/quodlibet/player/gstbe.py
index 53ac364..793e6cc 100644
--- a/quodlibet/player/gstbe.py
+++ b/quodlibet/player/gstbe.py
@@ -65,6 +65,7 @@ class GStreamerPlayer(BasePlayer):
self.connect('destroy', lambda s: self.__destroy_pipeline())
self._in_gapless_transition = False
self.paused = True
+ self._inhibit_play = False
def __init_pipeline(self):
if self.bin: return True
@@ -112,6 +113,7 @@ class GStreamerPlayer(BasePlayer):
return True
def __destroy_pipeline(self):
+ self._inhibit_play = False
if self.bin is None: return
self.bin.set_state(gst.STATE_NULL)
bus = self.bin.get_bus()
@@ -137,6 +139,9 @@ class GStreamerPlayer(BasePlayer):
err, debug = message.parse_error()
err = str(err).decode(const.ENCODING, 'replace')
self.error(err, True)
+ elif message.type == gst.MESSAGE_BUFFERING:
+ percent = message.parse_buffering()
+ self._set_inhibit_play(percent < 100)
return True
def __message_elem(self, bus, message):
@@ -194,6 +199,20 @@ class GStreamerPlayer(BasePlayer):
else:
return 0
+ def _set_inhibit_play(self, inhibit):
+ """Set the inhibit play flag. If set, this will pause the pipeline
+ without giving the appearance of being paused to the outside. This
+ is for internal uses of pausing, such as for waiting while the buffer
+ is being filled for network streams."""
+ if inhibit == self._inhibit_play:
+ return
+
+ self._inhibit_play = inhibit
+ if inhibit:
+ self.bin.set_state(gst.STATE_PAUSED)
+ elif not self.paused:
+ self.bin.set_state(gst.STATE_PLAYING)
+
def _set_paused(self, paused):
if paused != self._paused:
self._paused = paused
@@ -212,7 +231,8 @@ class GStreamerPlayer(BasePlayer):
self.emit((paused and 'paused') or 'unpaused')
if self.bin:
if not self._paused:
- self.bin.set_state(gst.STATE_PLAYING)
+ if not self._inhibit_play:
+ self.bin.set_state(gst.STATE_PLAYING)
elif self.song.is_file:
self.bin.set_state(gst.STATE_PAUSED)
else:
--
1.7.0.3
--- End Message ---
--- Begin Message ---
Source: quodlibet
Source-Version: 2.2.99-1
We believe that the bug you reported is fixed in the latest version of
quodlibet, which is due to be installed in the Debian FTP archive:
exfalso_2.2.99-1_all.deb
to main/q/quodlibet/exfalso_2.2.99-1_all.deb
quodlibet-ext_2.2.99-1_amd64.deb
to main/q/quodlibet/quodlibet-ext_2.2.99-1_amd64.deb
quodlibet_2.2.99-1.debian.tar.gz
to main/q/quodlibet/quodlibet_2.2.99-1.debian.tar.gz
quodlibet_2.2.99-1.dsc
to main/q/quodlibet/quodlibet_2.2.99-1.dsc
quodlibet_2.2.99-1_all.deb
to main/q/quodlibet/quodlibet_2.2.99-1_all.deb
quodlibet_2.2.99.orig.tar.gz
to main/q/quodlibet/quodlibet_2.2.99.orig.tar.gz
A summary of the changes between this version and the previous one is
attached.
Thank you for reporting the bug, which will now be closed. If you
have further comments please address them to [email protected],
and the maintainer will reopen the bug report if appropriate.
Debian distribution maintenance software
pp.
Ondřej Kuzník <[email protected]> (supplier of updated quodlibet package)
(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing [email protected])
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Format: 1.8
Date: Tue, 15 Mar 2011 19:29:38 +0100
Source: quodlibet
Binary: exfalso quodlibet quodlibet-ext
Architecture: source all amd64
Version: 2.2.99-1
Distribution: unstable
Urgency: low
Maintainer: Christine Spang <[email protected]>
Changed-By: Ondřej Kuzník <[email protected]>
Description:
exfalso - audio tag editor for GTK+
quodlibet - audio library manager and player for GTK+
quodlibet-ext - extensions for the Quod Libet audio player
Closes: 398322 405289 484689 576836
Changes:
quodlibet (2.2.99-1) unstable; urgency=low
.
* New upstream release 2.2.99 (Closes: #484689, #576836, #398322, #405289)
* Bump python-gtk2 dependency to 0.12.
* Notable changes:
- It's now possible to do complex searches without specifying tags to
search in.
- Playcount now increases after you have heard half of the song.
- Custom numeric tags now support floating point.
- All text entries support undo/redo actions.
- Support for text markup and the per entry pattern in the paned browser
can be customized.
- Drag and Drop support in the paned browser.
- Quodlibet now asks for a name if a new playlist gets created.
- The queue is now resizable.
- Several new translations.
* Suggest libmodplug1 instead of libmodplug0c2.
* Bump Standards-Version to 3.9.1.0
Checksums-Sha1:
d67570acbab2813c92aad4d0bf0e425c65f0837c 2046 quodlibet_2.2.99-1.dsc
f22a49648adcd23e384c5a9ef5b93815d8a888ab 997300 quodlibet_2.2.99.orig.tar.gz
5fc0b9aa999dbbba7c9a38579540ec6fd0c854de 9281 quodlibet_2.2.99-1.debian.tar.gz
403796e91d392ddf9b706c27914b0fb64defe7d3 679206 exfalso_2.2.99-1_all.deb
06b3c42d77513e1c38c53bb2ceb3a10f8d3e29a2 34948 quodlibet_2.2.99-1_all.deb
7db1cdf4b3b8cb9c39cc5b091b3368bd756244ae 41144 quodlibet-ext_2.2.99-1_amd64.deb
Checksums-Sha256:
6c8bb02658e39b0f49aacbc7038e92900dad016a9759dc6f0a87cef08a0e6f8b 2046
quodlibet_2.2.99-1.dsc
75aa849945e2e331959a9c91ec9904f141c4922fa27a73683282f90ed3b3af80 997300
quodlibet_2.2.99.orig.tar.gz
2b98309380c36a9676a918fab0d3f81d65c53275a4c7f04c412e192d0d5a78d0 9281
quodlibet_2.2.99-1.debian.tar.gz
7e31ed8b0bae068a5b757373deb6ed4a517811d38f2be7220f9715ad7c5cf646 679206
exfalso_2.2.99-1_all.deb
31102cda47e4a329e75d23be2193a96522126b025f575c5fee8a7257d03f5c92 34948
quodlibet_2.2.99-1_all.deb
7d36bf998bce9a7781438304680925660a8e8c0407b8cdb8b17a7b30e3fc8413 41144
quodlibet-ext_2.2.99-1_amd64.deb
Files:
d2f6caeac966d3ac973da46f824cd379 2046 sound optional quodlibet_2.2.99-1.dsc
fd6bd80375c7481b91213690b73368d3 997300 sound optional
quodlibet_2.2.99.orig.tar.gz
f494914027bfa6710ca9742a64835f08 9281 sound optional
quodlibet_2.2.99-1.debian.tar.gz
8704763ade0407e06b5d19458714847e 679206 sound optional exfalso_2.2.99-1_all.deb
575d018f5042eeaf03e846a7aaeb5c49 34948 sound optional
quodlibet_2.2.99-1_all.deb
1275d62f4dc23b870918ec0c4746bdf5 41144 sound extra
quodlibet-ext_2.2.99-1_amd64.deb
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
iQIcBAEBCAAGBQJNhqteAAoJEGSVn+mDjfGcY0IP/A9rGmd7oOOSbgI/+Wt3bZM5
i8D4LGxqtNVQE+uldtql7TDczCfr5EXjZfTZnph0MbLcwz7PtBcvWoVhMxXcigyz
0ejVRMj5s1sAsVnj7ZbgtkCHM0kVbCnL6YVBME5ULAebJAZWz5Ymyq5ee4v8qBVX
fCYQuMVtNhTD455KqbbLBQ3ENSckuUTbanqPn7ZIAPpMABNyTVC42KTJu4U/fQjl
bydXYSMK+qvNQU434KrfEK6MVUE/S8v7hWtoM+ilrTRWAc0ahFe2rdG6Mwgb5YAg
LafzR9UwLtFKtd+1L4g6RLsLaoeU/BWDW3s5jwEutCBsr3arTqLzH06xxRyJ62Um
NXJpLWNYedT8R0DbUMOxciHQYq/OFbZaBqah+ZeBBx+Lc5RlIVfAeaoxST2J+V9L
4/HZax6HXEk507U9a1k8tpCtZVAtAmnpt4xJNwny9U6em9N+hPntJec/lHgO8Ycz
t439+zEXS8RqkM3T9GkCN0YZcKEYGiiixm0pCy/5sAcZy3yFSpBNvVxHXVP8PKWn
5diBw5af0eRtui02NfFrZjnpKOjp8GJy39d88A16SkKYXfDV2oPr4fjODxnN5IUi
cQ1uUl5sBGzMRl5q4vrk+ddOvC3Cd5hjrU4nvqRQpYQ6f5RXHwb6XBsgwsdrnoZC
eUxdS7e8RHEhBseNza6X
=roCd
-----END PGP SIGNATURE-----
--- End Message ---