Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37910673
en ru br
Репозитории ALT
S:3.4.7-alt2
5.1: 0.12.6-alt0.M51.1
4.1: 0.11.6-alt1.M41.1
4.0: 0.9.7-alt1.0.M40.1
3.0: 0.8.8-alt0.5
www.altlinux.org/Changes

Группа :: Звук
Пакет: rhythmbox

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: rhythmbox-0.11.5-xfade-buffering.patch
Скачать


--- trunk/backends/gstreamer/rb-player-gst-xfade.c	2008/06/14 01:10:29	5745
+++ trunk/backends/gstreamer/rb-player-gst-xfade.c	2008/07/18 23:50:01	5813
@@ -1777,8 +1777,8 @@
 	} else {
 		progress = 99;
 	}
-	rb_debug ("current network buffer level: %u; threshold %u - %u%%",
-		  level, stream->queue_threshold, progress);
+	rb_debug ("%s: buffer level: %u; threshold %u - %u%%",
+		  stream->uri, level, stream->queue_threshold, progress);
 
 	post_buffering_message (stream, progress);
 
@@ -1790,7 +1790,7 @@
 {
 	GstPad *sinkpad;
 
-	rb_debug ("queue running - removing pad probe, running signal handler");
+	rb_debug ("%s: queue running", stream->uri);
 
 	/* detach pad probe */
 	sinkpad = gst_element_get_pad (stream->queue, "sink");
@@ -1811,7 +1811,7 @@
 static void
 stream_queue_underrun_cb (GstElement *queue, RBXFadeStream *stream)
 {
-	rb_debug ("queue underrun - attaching pad probe, running signal handler");
+	rb_debug ("%s: queue underrun", stream->uri);
 	GstPad *sinkpad;
 
 	g_object_set (stream->queue, "min-threshold-bytes", stream->queue_threshold, NULL);
@@ -2454,13 +2454,30 @@
 get_times_and_stream (RBPlayerGstXFade *player, RBXFadeStream **pstream, gint64 *pos, gint64 *duration)
 {
 	gboolean got_time = FALSE;
+	gboolean buffering = FALSE;
 	RBXFadeStream *stream;
 
 	if (player->priv->pipeline == NULL)
 		return FALSE;
 
 	g_static_rec_mutex_lock (&player->priv->stream_list_lock);
-	stream = find_stream_by_state (player, FADING_IN | PLAYING | FADING_OUT_PAUSED | PAUSED | PENDING_REMOVE);
+	
+	/* first look for a network stream that is buffering during preroll */
+	stream = find_stream_by_state (player, PREROLLING | PREROLL_PLAY);
+	if (stream != NULL) {
+		if (stream->emitted_fake_playing == FALSE) {
+			g_object_unref (stream);
+			stream = NULL;
+		} else {
+			rb_debug ("found buffering stream %s as current", stream->uri);
+			buffering = TRUE;
+		}
+	}
+
+	/* otherwise, the stream that is playing */
+	if (stream == NULL) {
+		stream = find_stream_by_state (player, FADING_IN | PLAYING | FADING_OUT_PAUSED | PAUSED | PENDING_REMOVE);
+	}
 	g_static_rec_mutex_unlock (&player->priv->stream_list_lock);
 
 	if (stream != NULL) {
@@ -2469,7 +2486,9 @@
 		}
 
 		if (pos != NULL) {
-			if (stream->state == PAUSED) {
+			if (buffering) {
+				*pos = 0;
+			} else if (stream->state == PAUSED) {
 				GstFormat format = GST_FORMAT_TIME;
 				*pos = -1;
 
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin