[Rhythmbox-devel] more iradio bits



Ok,

So this is I think these are the last bits I need in monkey-media for
now.  I got rid of using the spider thing, because the typefinding in
GStreamer 0.6.0 is too unreliable.  So when we're in iradio-mode, i just
hardcode it to using mad.  It's a hack, I know, but very very few sites
out there are vorbis.  Once the typefinding is fixed in GStreamer 0.6.1,
we can fix this.

Jorn, this patch is essentially the iradio analogue of the current code
in there.  Could we get this in?

After it is in, I would really like to have a monkey-media release.
Index: monkey-media-player-gst.c
===================================================================
RCS file: /cvs/gnome/monkey-media/src/monkey-media-player-gst.c,v
retrieving revision 1.8
diff -u -d -I$Id: -u -r1.8 monkey-media-player-gst.c
--- monkey-media-player-gst.c	1 Feb 2003 17:43:33 -0000	1.8
+++ monkey-media-player-gst.c	2 Feb 2003 04:16:37 -0000
@@ -485,6 +485,67 @@
 	return quark;
 }
 
+static void
+get_decoder (MonkeyMediaPlayer *mp,
+	     const char *uri,
+	     gboolean iradio_mode,
+	     GError **error)
+{
+	mp->priv->have_type = FALSE;
+
+	if (iradio_mode)
+	{
+		/* FIXME This is hardcoded until GStreamer's
+		 * typefinding stuff is improved. */
+		mp->priv->decoder = gst_element_factory_make ("mad", "decoder");
+		return;
+	}
+
+	gst_element_set_state (mp->priv->typefind_pipeline,
+			       GST_STATE_PLAYING);
+	
+	while (!mp->priv->have_type) {
+		if (!gst_bin_iterate (GST_BIN (mp->priv->typefind_pipeline))) {
+			char *unesc = gnome_vfs_unescape_string_for_display (uri);
+			g_set_error (error,
+				     MONKEY_MEDIA_PLAYER_ERROR,
+				     MONKEY_MEDIA_PLAYER_ERROR_NO_DEMUX_PLUGIN,
+				     _("Failed to find a decoder plugin for %s; check your installation"),
+				     unesc);
+			g_free (unesc);
+			return;
+		}
+	}
+
+	gst_element_set_state (mp->priv->typefind_pipeline,
+			       GST_STATE_NULL);
+
+	mp->priv->decoder = NULL;
+
+	if (strstr (mp->priv->type, "mp3")) {
+		mp->priv->decoder = gst_element_factory_make ("mad", "decoder");
+	} else if (strstr (mp->priv->type, "x-ogg")) {
+		mp->priv->decoder = gst_element_factory_make ("vorbisfile", "decoder");
+	} else if (strstr (mp->priv->type, "x-flac")) {
+		mp->priv->decoder = gst_element_factory_make ("flacdec", "decoder");
+	} else if (strstr (mp->priv->type, "x-wav")) {
+		mp->priv->decoder = gst_element_factory_make ("wavparse", "decoder");
+	} else if (strstr (mp->priv->type, "x-mod") || strstr (mp->priv->type, "x-s3m") ||
+		   strstr (mp->priv->type, "x-xm")  || strstr (mp->priv->type, "x-it")) {
+		mp->priv->decoder = gst_element_factory_make ("modplug", "decoder");
+	}
+
+	if (mp->priv->decoder == NULL) {
+		g_set_error (error,
+			     MONKEY_MEDIA_PLAYER_ERROR,
+			     MONKEY_MEDIA_PLAYER_ERROR_NO_DEMUX_PLUGIN,
+			     _("Mime type %s not handled; check your installation"),
+			     mp->priv->type);
+	}
+
+	g_free (mp->priv->type);
+}
+
 void
 monkey_media_player_open (MonkeyMediaPlayer *mp,
 			  const char *uri,
@@ -522,8 +583,6 @@
 		gst_bin_remove (GST_BIN (mp->priv->pipeline), mp->priv->decoder);
 	}
 
-	mp->priv->have_type = FALSE;
-
 	/* Internet radio support */
 	iradio_mode = !strncmp ("http", uri, 4);
 	g_object_set (G_OBJECT (mp->priv->src),
@@ -536,52 +595,10 @@
 	g_object_set (G_OBJECT (mp->priv->typefind_src),
 		      "location", uri, NULL);
 
-	gst_element_set_state (mp->priv->typefind_pipeline,
-			       GST_STATE_PLAYING);
-
-	while (!mp->priv->have_type) {
-		if (!gst_bin_iterate (GST_BIN (mp->priv->typefind_pipeline))) {
-			char *unesc = gnome_vfs_unescape_string_for_display (uri);
-			g_set_error (error,
-				     MONKEY_MEDIA_PLAYER_ERROR,
-				     MONKEY_MEDIA_PLAYER_ERROR_NO_DEMUX_PLUGIN,
-				     _("Failed to find a decoder plugin for %s; check your installation"),
-				     unesc);
-			g_free (unesc);
-			return;
-		}
-	}
-
-	gst_element_set_state (mp->priv->typefind_pipeline,
-			       GST_STATE_NULL);
-
-	mp->priv->decoder = NULL;
-
-	if (strstr (mp->priv->type, "mp3")) {
-		mp->priv->decoder = gst_element_factory_make ("mad", "decoder");
-	} else if (strstr (mp->priv->type, "x-ogg")) {
-		mp->priv->decoder = gst_element_factory_make ("vorbisfile", "decoder");
-	} else if (strstr (mp->priv->type, "x-flac")) {
-		mp->priv->decoder = gst_element_factory_make ("flacdec", "decoder");
-	} else if (strstr (mp->priv->type, "x-wav")) {
-		mp->priv->decoder = gst_element_factory_make ("wavparse", "decoder");
-	} else if (strstr (mp->priv->type, "x-mod") || strstr (mp->priv->type, "x-s3m") ||
-		   strstr (mp->priv->type, "x-xm")  || strstr (mp->priv->type, "x-it")) {
-		mp->priv->decoder = gst_element_factory_make ("modplug", "decoder");
-	}
-
-	if (mp->priv->decoder == NULL) {
-		g_set_error (error,
-			     MONKEY_MEDIA_PLAYER_ERROR,
-			     MONKEY_MEDIA_PLAYER_ERROR_NO_DEMUX_PLUGIN,
-			     _("Mime type %s not handled; check your installation"),
-			     mp->priv->type);
-		g_free (mp->priv->type);
+	get_decoder (mp, uri, iradio_mode, error);
+	if (*error != NULL)
 		return;
-	}
-
-	g_free (mp->priv->type);
-
+	
 	mp->priv->uri = g_strdup (uri);
 
 	gst_bin_add (GST_BIN (mp->priv->pipeline), mp->priv->decoder);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]