diff src/mpg123/mpg123.c @ 469:1256144d2a6e trunk

[svn] - fix crash - finish shout metadata support
author nenolod
date Sun, 21 Jan 2007 02:09:42 -0800
parents a3bf53abebf5
children 220515815cf8
line wrap: on
line diff
--- a/src/mpg123/mpg123.c	Sun Jan 21 01:55:08 2007 -0800
+++ b/src/mpg123/mpg123.c	Sun Jan 21 02:09:42 2007 -0800
@@ -671,6 +671,7 @@
 static void *
 decode_loop(void *arg)
 {
+    static gchar *old_title = NULL;
     gboolean have_xing_header = FALSE, vbr = FALSE;
     int disp_count = 0;
     char *filename = arg;
@@ -761,7 +762,17 @@
 	    }
         }
         else {
-            mpgdec_title = mpgdec_metadata("stream-name");
+            gchar *tmp = mpgdec_metadata("stream-name");
+	    old_title = mpgdec_metadata("track-name");
+
+	    if (old_title != NULL)
+	    {
+	        mpgdec_title = g_strdup_printf("%s (%s)", old_title, tmp);
+		g_free(tmp);
+	    }
+            else
+		mpgdec_title = tmp;
+
 	    mpgdec_length = -1;
         }
 
@@ -848,10 +859,32 @@
                                            mpgdec_bitrate * 1000,
                                            mpgdec_frequency, mpgdec_stereo);
                     }
+
                 }
                 else
                     disp_count--;
                 play_frame(&fr);
+
+	        {
+		    gchar *new_title = mpgdec_metadata("track-name");
+		    gchar *srv_name = mpgdec_metadata("stream-name");
+
+		    if (old_title == NULL || g_strcasecmp(old_title, new_title))
+                    {
+			g_free(mpgdec_title);
+			mpgdec_title = g_strdup_printf("%s (%s)", 
+							new_title, srv_name);
+
+			g_free(old_title);
+			old_title = new_title;
+
+			g_free(srv_name);
+
+                        mpgdec_ip.set_info(mpgdec_title, mpgdec_length,
+                                           mpgdec_bitrate * 1000,
+                                           mpgdec_frequency, mpgdec_stereo);
+		    }
+		}
             }
             else {
                 mpgdec_ip.output->buffer_free();
@@ -865,6 +898,11 @@
         }
     }
     g_free(mpgdec_title);
+
+    if (old_title != NULL)
+        g_free(old_title);
+
+    old_title = NULL;
     mpgdec_title = NULL;
     mpgdec_stream_close();
     if (output_opened && !audio_error)