tracker r2823 - in trunk: . src/tracker-extract tests/tracker-extract tests/tracker-extract/data/mp3



Author: mottela
Date: Thu Jan 22 22:33:39 2009
New Revision: 2823
URL: http://svn.gnome.org/viewvc/tracker?rev=2823&view=rev

Log:
Added regex for additional TCON to id3v1 genre mapping and testcases

Added:
   trunk/tests/tracker-extract/data/mp3/id3v23_tcon_1.data
   trunk/tests/tracker-extract/data/mp3/id3v23_tcon_2.data
   trunk/tests/tracker-extract/data/mp3/id3v23_tcon_3.data
   trunk/tests/tracker-extract/data/mp3/id3v23_tcon_4.data
   trunk/tests/tracker-extract/data/mp3/id3v23_tcon_5.data
   trunk/tests/tracker-extract/data/mp3/id3v23_tcon_6.data
Modified:
   trunk/ChangeLog
   trunk/src/tracker-extract/tracker-extract-mp3.c
   trunk/tests/tracker-extract/data/mp3/create_mp3_testdata
   trunk/tests/tracker-extract/tracker-extract-mp3-test.c
   trunk/tests/tracker-extract/tracker-extract-testsuite-mp3.c
   trunk/tests/tracker-extract/tracker-extract-testsuite-mp3.h

Modified: trunk/src/tracker-extract/tracker-extract-mp3.c
==============================================================================
--- trunk/src/tracker-extract/tracker-extract-mp3.c	(original)
+++ trunk/src/tracker-extract/tracker-extract-mp3.c	Thu Jan 22 22:33:39 2009
@@ -292,7 +292,7 @@
 
         memcpy(&c, data, 2);
 
-        switch (c) {
+switch (c) {
         case 0xfeff:
         case 0xfffe:
 		be = (G_BYTE_ORDER == G_BIG_ENDIAN);
@@ -310,6 +310,47 @@
         return utf8;
 }
 
+/* Get the genre codes from regular expressions */
+static gboolean
+get_genre_number (const char *str, guint *genre)
+{
+	static GRegex *regex1 = NULL;
+	static GRegex *regex2 = NULL;
+	GMatchInfo *info = NULL;
+	gchar *result = NULL;
+
+	if (!regex1)
+		regex1 = g_regex_new("\\(([0-9]+)\\)", 0, 0, NULL);
+
+	if (!regex2)
+		regex2 = g_regex_new("([0-9]+)\\z", 0, 0, NULL);
+
+	if (g_regex_match(regex1, str, 0, &info)) {
+		result = g_match_info_fetch(info, 1);
+		if (result) {
+			*genre = atoi(result);
+			g_free (result);
+			g_match_info_free (info);
+			return TRUE;
+		}
+	}
+
+	g_match_info_free (info);
+
+	if (g_regex_match(regex2, str, 0, &info)) {
+		result = g_match_info_fetch(info, 1);
+		if (result) {
+			*genre = atoi(result);
+			g_free (result);
+			g_match_info_free (info);
+			return TRUE;
+		}	
+	}
+
+	g_match_info_free (info);
+
+	return FALSE;
+}
 
 static gboolean
 get_id3 (const gchar *data,
@@ -755,27 +796,10 @@
 					}
 
 					if (strcmp (tmap[i].text, "TCON") == 0) {
-						if (g_pattern_match_simple ("(*)*", word)) {
-							gchar *begin;
-							gchar *end;
-							guint genre;
-							gchar *new_word;
-
-							begin = strchr (word,'(');
-							if (!begin)
-								continue;
-							begin++;
-							end = strchr (begin, ')');
-							if (!end)
-								continue;
-							end[0] = '\0';
-
-							genre = (guint)strtol(begin,&end,10);
-
-							if (begin != end) {
-								g_free (word);
-								word = g_strdup (genre_names[genre]);
-							}
+						gint genre;
+						if (get_genre_number (word, &genre)) {
+							g_free (word);
+							word = g_strdup (genre_names[genre]);
 						}
 					}					
 
@@ -1052,27 +1076,10 @@
 					}
 
 					if (strcmp (tmap[i].text, "TCON") == 0) {
-						if (g_pattern_match_simple ("(*)*", word)) {
-							gchar *begin;
-							gchar *end;
-							guint genre;
-							gchar *new_word;
-
-							begin = strchr (word,'(');
-							if (!begin)
-								continue;
-							begin++;
-							end = strchr (begin, ')');
-							if (!end)
-								continue;
-							end[0] = '\0';
-
-							genre = (guint)strtol(begin,&end,10);
-
-							if (begin != end) {
-								g_free (word);
-								word = g_strdup (genre_names[genre]);
-							}
+						gint genre;
+						if (get_genre_number (word, &genre)) {
+							g_free (word);
+							word = g_strdup (genre_names[genre]);
 						}
 					}
 

Modified: trunk/tests/tracker-extract/data/mp3/create_mp3_testdata
==============================================================================
--- trunk/tests/tracker-extract/data/mp3/create_mp3_testdata	(original)
+++ trunk/tests/tracker-extract/data/mp3/create_mp3_testdata	Thu Jan 22 22:33:39 2009
@@ -38,6 +38,26 @@
 echo Basic id3v23 tags 1| text2wave - | lame --resample 48 - "id3v23_comm_3.mp3"
 id3v2 --id3v2-only -t "The titlev23"  -a "The artistv23" -A "The album namev23" -y 1969 -c "c"  -T 8  -g 8  "id3v23_comm_3.mp3"
 
+#TCON
+echo id3v23 tcon 1| text2wave - | lame --resample 48 - "id3v23_tcon_1.mp3"
+id3v2 --id3v2-only --TCON "Red Metal"  "id3v23_tcon_1.mp3"
+
+echo id3v23 tcon 2| text2wave - | lame --resample 48 - "id3v23_tcon_2.mp3"
+id3v2 --id3v2-only --TCON "(42)"  "id3v23_tcon_2.mp3"
+
+echo id3v23 tcon 3| text2wave - | lame --resample 48 - "id3v23_tcon_3.mp3"
+id3v2 --id3v2-only --TCON "(42)Soul"  "id3v23_tcon_3.mp3"
+
+echo id3v23 tcon 4| text2wave - | lame --resample 48 - "id3v23_tcon_4.mp3"
+id3v2 --id3v2-only --TCON "(42)Smooth Soul Metal"  "id3v23_tcon_4.mp3"
+
+#TCON the next ones are "against the spec", but usually handled this way
+echo id3v23 tcon 5| text2wave - | lame --resample 48 - "id3v23_tcon_5.mp3"
+id3v2 --id3v2-only --TCON "42"  "id3v23_tcon_5.mp3"
+
+echo id3v23 tcon 6| text2wave - | lame --resample 48 - "id3v23_tcon_6.mp3"
+id3v2 --id3v2-only --TCON "42 Red Metal"  "id3v23_tcon_6.mp3"
+
 #Others
 echo Basic id3v23 tags 1| text2wave - | lame --resample 48 - "id3v23_tags_1.mp3"
 id3v2 --id3v2-only  --PCNT "4" --TALB "Album/Movie/Show" --TCON "content type" --TCOP "copyright me" --TDAT "2312" --TENC "julkaisija" --TEXT "Monday, monday.. yeah yeah.. monday" --TIT2 "Title or songname" --TLAN "fin" --TPE1 "lead performer" --TYER "2003" "id3v23_tags_1.mp3"

Added: trunk/tests/tracker-extract/data/mp3/id3v23_tcon_1.data
==============================================================================
--- (empty file)
+++ trunk/tests/tracker-extract/data/mp3/id3v23_tcon_1.data	Thu Jan 22 22:33:39 2009
@@ -0,0 +1 @@
+Audio:Genre       = "Red Metal"

Added: trunk/tests/tracker-extract/data/mp3/id3v23_tcon_2.data
==============================================================================
--- (empty file)
+++ trunk/tests/tracker-extract/data/mp3/id3v23_tcon_2.data	Thu Jan 22 22:33:39 2009
@@ -0,0 +1 @@
+Audio:Genre       = "Soul"

Added: trunk/tests/tracker-extract/data/mp3/id3v23_tcon_3.data
==============================================================================
--- (empty file)
+++ trunk/tests/tracker-extract/data/mp3/id3v23_tcon_3.data	Thu Jan 22 22:33:39 2009
@@ -0,0 +1 @@
+Audio:Genre       = "Soul"

Added: trunk/tests/tracker-extract/data/mp3/id3v23_tcon_4.data
==============================================================================
--- (empty file)
+++ trunk/tests/tracker-extract/data/mp3/id3v23_tcon_4.data	Thu Jan 22 22:33:39 2009
@@ -0,0 +1 @@
+Audio:Genre       = "Soul"

Added: trunk/tests/tracker-extract/data/mp3/id3v23_tcon_5.data
==============================================================================
--- (empty file)
+++ trunk/tests/tracker-extract/data/mp3/id3v23_tcon_5.data	Thu Jan 22 22:33:39 2009
@@ -0,0 +1 @@
+Audio:Genre       = "Soul"

Added: trunk/tests/tracker-extract/data/mp3/id3v23_tcon_6.data
==============================================================================
--- (empty file)
+++ trunk/tests/tracker-extract/data/mp3/id3v23_tcon_6.data	Thu Jan 22 22:33:39 2009
@@ -0,0 +1 @@
+Audio:Genre       = "42 Red Metal"

Modified: trunk/tests/tracker-extract/tracker-extract-mp3-test.c
==============================================================================
--- trunk/tests/tracker-extract/tracker-extract-mp3-test.c	(original)
+++ trunk/tests/tracker-extract/tracker-extract-mp3-test.c	Thu Jan 22 22:33:39 2009
@@ -51,6 +51,8 @@
 			      data, test_tracker_extract_mp3_id3v1_basic);
 	g_test_add_data_func ("/tracker-extract/tracker-extract-mp3/id3v23_basic",
 			      data, test_tracker_extract_mp3_id3v23_basic);
+	g_test_add_data_func ("/tracker-extract/tracker-extract-mp3/id3v23_tcon",
+			      data, test_tracker_extract_mp3_id3v23_tcon);
 	g_test_add_data_func ("/tracker-extract/tracker-extract-mp3/id3v23_tags",
 			      data, test_tracker_extract_mp3_id3v23_tags);
 	g_test_add_data_func ("/tracker-extract/tracker-extract-mp3/header_bitrate",

Modified: trunk/tests/tracker-extract/tracker-extract-testsuite-mp3.c
==============================================================================
--- trunk/tests/tracker-extract/tracker-extract-testsuite-mp3.c	(original)
+++ trunk/tests/tracker-extract/tracker-extract-testsuite-mp3.c	Thu Jan 22 22:33:39 2009
@@ -43,6 +43,16 @@
 	{ NULL, NULL }
 };
 
+static const ExtractData data_id3v23_tcon[] = { 
+	{ "/mp3/id3v23_tcon_1.mp3", "/mp3/id3v23_tcon_1.data" },
+	{ "/mp3/id3v23_tcon_2.mp3", "/mp3/id3v23_tcon_2.data" },
+	{ "/mp3/id3v23_tcon_3.mp3", "/mp3/id3v23_tcon_3.data" },
+	{ "/mp3/id3v23_tcon_4.mp3", "/mp3/id3v23_tcon_4.data" },
+	{ "/mp3/id3v23_tcon_5.mp3", "/mp3/id3v23_tcon_5.data" },
+	{ "/mp3/id3v23_tcon_6.mp3", "/mp3/id3v23_tcon_6.data" },
+	{ NULL, NULL }
+};
+
 static const ExtractData data_id3v23_tags[] = { 
 	{ "/mp3/id3v23_trck_1.mp3", "/mp3/id3v23_trck_1.data" },
 	{ "/mp3/id3v23_comm_1.mp3", "/mp3/id3v23_comm_1.data" },
@@ -128,6 +138,18 @@
 	}
 }
 
+void test_tracker_extract_mp3_id3v23_tcon(gconstpointer data)
+{
+	const TrackerExtractorData *extractor = data;
+	guint i;
+
+	for (i=0; data_id3v23_tcon[i].filename; i++) {
+		extract_file (data,
+			      data_id3v23_tcon[i].filename,
+			      data_id3v23_tcon[i].testdata);		
+	}
+}
+
 void test_tracker_extract_mp3_header_bitrate(gconstpointer data)
 {
 	const TrackerExtractorData *extractor = data;

Modified: trunk/tests/tracker-extract/tracker-extract-testsuite-mp3.h
==============================================================================
--- trunk/tests/tracker-extract/tracker-extract-testsuite-mp3.h	(original)
+++ trunk/tests/tracker-extract/tracker-extract-testsuite-mp3.h	Thu Jan 22 22:33:39 2009
@@ -25,6 +25,7 @@
 
 void test_tracker_extract_mp3_id3v1_basic       (gconstpointer data);
 void test_tracker_extract_mp3_id3v23_basic      (gconstpointer data);
+void test_tracker_extract_mp3_id3v23_tcon       (gconstpointer data);
 void test_tracker_extract_mp3_id3v23_tags       (gconstpointer data);
 void test_tracker_extract_mp3_header_bitrate    (gconstpointer data);
 void test_tracker_extract_mp3_header_bitrate_vbr(gconstpointer data);



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