From: Philippe Valembois Date: Mon, 17 Apr 2006 19:57:10 +0000 (+0000) Subject: ext/shout2/gstshout2.*: Handle tags being received before the connection to the serve... X-Git-Tag: RELEASE-0_10_3~80 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=52563ea213aa5f1b59595450ac59146a1a45dea3;p=platform%2Fupstream%2Fgst-plugins-good.git ext/shout2/gstshout2.*: Handle tags being received before the connection to the server is established properly (see #... Original commit message from CVS: Patch by: Philippe Valembois * ext/shout2/gstshout2.c: (gst_shout2send_init), (gst_shout2send_set_metadata), (gst_shout2send_event), (gst_shout2send_render), (gst_shout2send_change_state): * ext/shout2/gstshout2.h: Handle tags being received before the connection to the server is established properly (see #338636). --- diff --git a/ChangeLog b/ChangeLog index bb5acb8..9a00ea8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,16 @@ 2006-04-17 Tim-Philipp Müller + Patch by: Philippe Valembois + + * ext/shout2/gstshout2.c: (gst_shout2send_init), + (gst_shout2send_set_metadata), (gst_shout2send_event), + (gst_shout2send_render), (gst_shout2send_change_state): + * ext/shout2/gstshout2.h: + Handle tags being received before the connection to + the server is established properly (see #338636). + +2006-04-17 Tim-Philipp Müller + * ext/shout2/gstshout2.c: (gst_shout2send_render): Don't crash in case the connection to the server fails: don't set pointer to NULL by assigning FALSE; error out diff --git a/ext/shout2/gstshout2.c b/ext/shout2/gstshout2.c index 2fc3bdd..df0865f 100644 --- a/ext/shout2/gstshout2.c +++ b/ext/shout2/gstshout2.c @@ -235,7 +235,7 @@ gst_shout2send_init (GstShout2send * shout2send) shout2send->audio_format = SHOUT_FORMAT_VORBIS; shout2send->sync = FALSE; shout2send->started = FALSE; - + shout2send->songmetadata = NULL; } static void @@ -281,10 +281,10 @@ set_shout_metadata (const GstTagList * list, const gchar * tag, GST_DEBUG ("shout metadata is now: %s", *shout_metadata); } +#if 0 static void gst_shout2send_set_metadata (GstShout2send * shout2send) { -#if 0 const GstTagList *user_tags; GstTagList *copy; char *tempmetadata; @@ -311,16 +311,14 @@ gst_shout2send_set_metadata (GstShout2send * shout2send) } gst_tag_list_free (copy); -#endif } +#endif static gboolean gst_shout2send_event (GstBaseSink * sink, GstEvent * event) { GstShout2send *shout2send; - shout_metadata_t *pmetadata; - char *tempmetadata; shout2send = GST_SHOUT2SEND (sink); @@ -337,13 +335,14 @@ gst_shout2send_event (GstBaseSink * sink, GstEvent * event) list, gst_tag_setter_get_tag_merge_mode (GST_TAG_SETTER (shout2send))); /* lets get the artist and song tags */ - tempmetadata = NULL; gst_tag_list_foreach ((GstTagList *) shout2send->tags, - set_shout_metadata, (gpointer) & tempmetadata); - if (tempmetadata) { - GST_DEBUG ("shout metadata now: %s", tempmetadata); + set_shout_metadata, &shout2send->songmetadata); + if (shout2send->songmetadata) { + shout_metadata_t *pmetadata; + + GST_DEBUG ("shout metadata now: %s", shout2send->songmetadata); pmetadata = shout_metadata_new (); - shout_metadata_add (pmetadata, "song", tempmetadata); + shout_metadata_add (pmetadata, "song", shout2send->songmetadata); shout_set_metadata (shout2send->conn, pmetadata); shout_metadata_free (pmetadata); } @@ -380,7 +379,16 @@ gst_shout2send_render (GstBaseSink * sink, GstBuffer * buf) if (shout_open (shout2send->conn) == SHOUTERR_SUCCESS) { g_print ("connected to server...\n"); /* lets set metadata */ - gst_shout2send_set_metadata (shout2send); + if (shout2send->songmetadata) { + shout_metadata_t *pmetadata; + + GST_DEBUG ("shout metadata now: %s", shout2send->songmetadata); + pmetadata = shout_metadata_new (); + shout_metadata_add (pmetadata, "song", shout2send->songmetadata); + shout_set_metadata (shout2send->conn, pmetadata); + shout_metadata_free (pmetadata); + } + shout2send->started = TRUE; } else { @@ -687,6 +695,8 @@ gst_shout2send_change_state (GstElement * element, GstStateChange transition) shout_close (shout2send->conn); shout_free (shout2send->conn); shout2send->started = FALSE; + g_free (shout2send->songmetadata); + shout2send->songmetadata = NULL; } break; case GST_STATE_CHANGE_READY_TO_NULL: diff --git a/ext/shout2/gstshout2.h b/ext/shout2/gstshout2.h index 3e2fb65..6656220 100644 --- a/ext/shout2/gstshout2.h +++ b/ext/shout2/gstshout2.h @@ -56,6 +56,7 @@ struct _GstShout2send { gchar *url; gboolean sync; gboolean started; + gchar *songmetadata; guint16 audio_format;