Lookin' great! Got a couple of patches for you

1. tracker-search-tool won't autogen.sh...EXTRA_DIST acceesses
variables that are commented out.

2. The new mp3 extractor creashes tracker-extract (strlen'ing a NULL?).

3. mplayer based extractor for videos and audio.
Index: src/tracker-search-tool/Makefile.am
===================================================================
RCS file: /cvs/gnome/tracker/src/tracker-search-tool/Makefile.am,v
retrieving revision 1.2
diff -u -p -r1.2 Makefile.am
--- src/tracker-search-tool/Makefile.am	8 Oct 2006 22:22:52 -0000	1.2
+++ src/tracker-search-tool/Makefile.am	12 Oct 2006 21:10:55 -0000
@@ -47,7 +47,7 @@ tracker_search_tool_LDADD =   \
 #Utilities_DATA = $(Utilities_in_files:.desktop.in=.desktop)
 
 
-EXTRA_DIST = \
+#EXTRA_DIST = \
 	$(Utilities_in_files) \
 	$(Utilities_DATA) \
 	$(schema_in_file) \
Index: src/tracker-extract/tracker-extract-mp3.c
===================================================================
RCS file: /cvs/gnome/tracker/src/tracker-extract/tracker-extract-mp3.c,v
retrieving revision 1.2
diff -u -p -r1.2 tracker-extract-mp3.c
--- src/tracker-extract/tracker-extract-mp3.c	11 Oct 2006 23:59:56 -0000	1.2
+++ src/tracker-extract/tracker-extract-mp3.c	12 Oct 2006 21:11:23 -0000
@@ -996,27 +996,27 @@ tracker_extract_mp3 (const char *filenam
 	}
 
 
-	if (strlen (info.title) > 0) {
+	if (info.title && strlen (info.title) > 0) {
 		g_hash_table_insert (metadata, g_strdup ("Audio.Title"), g_strdup (info.title));
 	}
 
-	if (strlen (info.artist) > 0) {
+	if (info.artist && strlen (info.artist) > 0) {
 		g_hash_table_insert (metadata, g_strdup ("Audio.Artist"), g_strdup (info.artist));
 	}
 
-	if (strlen (info.album) > 0) {
+	if (info.album && strlen (info.album) > 0) {
 		g_hash_table_insert (metadata, g_strdup ("Audio.Album"), g_strdup (info.album));
 	}
 
-	if (strlen (info.year) > 0) {
+	if (info.year && strlen (info.year) > 0) {
 		g_hash_table_insert (metadata, g_strdup ("Audio.ReleaseDate"), g_strdup (info.year));
 	}
 
-	if (strlen (info.genre) > 0) {
+	if (info.genre && strlen (info.genre) > 0) {
 		g_hash_table_insert (metadata, g_strdup ("Audio.Genre"), g_strdup (info.genre));
 	}
 
-	if (strlen (info.comment) > 0) {
+	if (info.comment && strlen (info.comment) > 0) {
 		g_hash_table_insert (metadata, g_strdup ("Audio.Comment"), g_strdup (info.comment));
 	}
 
Index: configure.in
===================================================================
RCS file: /cvs/gnome/tracker/configure.in,v
retrieving revision 1.24
diff -u -p -r1.24 configure.in
--- configure.in	11 Oct 2006 23:59:54 -0000	1.24
+++ configure.in	12 Oct 2006 21:12:02 -0000
@@ -361,20 +361,6 @@ AC_SUBST(VORBIS_LIBS)
 test "$have_vorbis" = "yes" && AC_DEFINE(HAVE_VORBIS, [], [Define if we have libvorbis])
 
 ##################################################################
-# check for ogg/theora
-##################################################################
-
-THEORA_REQUIRED=1.1
-
-PKG_CHECK_MODULES(THEORA, [theora >= $THEORA_REQUIRED], [have_theora=yes] , [have_theora=no])
-
-AM_CONDITIONAL(HAVE_THEORA, test "$have_theora" = "yes")
-AC_SUBST(THEORA_CFLAGS)
-AC_SUBST(THEORA_LIBS)
-test "$have_theora" = "yes" && AC_DEFINE(HAVE_THEORA, [], [Define if we have libtheora])
-
-
-##################################################################
 # check for libpng
 ##################################################################
 
@@ -481,7 +467,6 @@ Metadata extractors:
 
 	pdf :					$have_poppler
 	ogg/vorbis :				$have_vorbis
-	ogg/theora :				$have_theora
 	png :					$have_libpng
 	exif (jpeg) :				$have_libexif
 	gsf :					$have_libgsf
Index: src/tracker-extract/Makefile.am
===================================================================
RCS file: /cvs/gnome/tracker/src/tracker-extract/Makefile.am,v
retrieving revision 1.9
diff -u -p -r1.9 Makefile.am
--- src/tracker-extract/Makefile.am	9 Oct 2006 14:26:02 -0000	1.9
+++ src/tracker-extract/Makefile.am	12 Oct 2006 21:12:17 -0000
@@ -18,7 +18,8 @@ tracker_extract_SOURCES = tracker-extrac
 	tracker-extract-png.c \
 	tracker-extract-exif.c	\
 	tracker-extract-msoffice.c \
-	tracker-extract-imagemagick.c 
+	tracker-extract-imagemagick.c \
+	tracker-extract-mplayer.c 
 
 
 tracker_extract_LDADD = $(GLIB2_LIBS)  \
Index: src/trackerd/tracker-metadata.c
===================================================================
RCS file: /cvs/gnome/tracker/src/trackerd/tracker-metadata.c,v
retrieving revision 1.17
diff -u -p -r1.17 tracker-metadata.c
--- src/trackerd/tracker-metadata.c	11 Oct 2006 23:30:55 -0000	1.17
+++ src/trackerd/tracker-metadata.c	12 Oct 2006 21:12:37 -0000
@@ -143,7 +143,7 @@ tracker_get_metadata_type (const char *m
 
 	} else 	if (g_str_has_prefix (mime, "video")) {
 			/* don't bother with video metadata - its really really slow to extract + there's bugger all metadata anyhow! */
-			return IGNORE_METADATA;
+			return VIDEO_METADATA;
 
 	} else 	if (g_str_has_prefix (mime, "audio") || (strcmp (mime, "application/ogg") == 0)) {
 			return AUDIO_METADATA;
@@ -413,7 +413,7 @@ tracker_metadata_get_embedded (const cha
 
 	meta_type = tracker_get_metadata_type (mime);
 
-	if (meta_type == DOC_METADATA || meta_type == IMAGE_METADATA || meta_type == AUDIO_METADATA) {
+	if (meta_type == DOC_METADATA || meta_type == IMAGE_METADATA || meta_type == AUDIO_METADATA || meta_type == VIDEO_METADATA) {
 		char *argv[4];
 		char *value;
 
Index: src/tracker-extract/tracker-extract.c
===================================================================
RCS file: /cvs/gnome/tracker/src/tracker-extract/tracker-extract.c,v
retrieving revision 1.14
diff -u -p -r1.14 tracker-extract.c
--- src/tracker-extract/tracker-extract.c	9 Oct 2006 14:16:00 -0000	1.14
+++ src/tracker-extract/tracker-extract.c	12 Oct 2006 21:12:53 -0000
@@ -70,45 +70,45 @@ void tracker_extract_png   (gchar *, GHa
 void tracker_extract_exif   (gchar *, GHashTable *);
 #endif
 void tracker_extract_imagemagick   (gchar *, GHashTable *);
+void tracker_extract_mplayer   (gchar *, GHashTable *);
 
 MimeToExtractor extractors[] = {
-   /* Document extractors */
-	{ "application/vnd.oasis.opendocument.*",       tracker_extract_oasis       },
-	{ "application/postscript",                     tracker_extract_ps          },
+	/* Document extractors */
+	{ "application/vnd.oasis.opendocument.*",  tracker_extract_oasis       },
+	{ "application/postscript",                tracker_extract_ps          },
 #ifdef HAVE_POPPLER
-	{ "application/pdf",                            tracker_extract_pdf         },
+	{ "application/pdf",                       tracker_extract_pdf         },
 #endif
-	{ "application/x-abiword",                      tracker_extract_abw         },
+	{ "application/x-abiword",                 tracker_extract_abw         },
 #ifdef HAVE_LIBGSF
-	{ "application/msword",                         tracker_extract_msoffice    },
-	{ "application/vnd.ms-*",                       tracker_extract_msoffice    },
+	{ "application/msword",                    tracker_extract_msoffice    },
+	{ "application/vnd.ms-*",                  tracker_extract_msoffice    },
 #endif
 
 
-   /* Video extractors */
-#ifdef HAVE_THEORA
-	{ "video/x-theora+ogg",                         tracker_extract_theora      },
-#endif
+	/* Video extractors */
+	{ "video/*",                               tracker_extract_mplayer     },
 
 
-   /* Audio extractors */
-	{ "audio/mpeg",		                        tracker_extract_mp3      },
-	{ "audio/x-mp3",	                        tracker_extract_mp3      },
-	{ "audio/x-mpeg",	                        tracker_extract_mp3      },
+	/* Audio extractors */
+	{ "audio/mpeg",                            tracker_extract_mp3         },
+	{ "audio/x-mp3",                           tracker_extract_mp3         },
+	{ "audio/x-mpeg",                          tracker_extract_mp3         },
 #ifdef HAVE_VORBIS
-	{ "audio/x-vorbis+ogg",                         tracker_extract_vorbis      },
+	{ "audio/x-vorbis+ogg",                    tracker_extract_vorbis      },
 #endif
+	{ "audio/*",                               tracker_extract_mplayer     },
 
 
    /* Image extractors */
 #ifdef HAVE_LIBPNG
-	{ "image/png",                                  tracker_extract_png         },
+	{ "image/png",                             tracker_extract_png         },
 #endif
 #ifdef HAVE_LIBEXIF
-	{ "image/jpeg",                                 tracker_extract_exif        },
+	{ "image/jpeg",                            tracker_extract_exif        },
 #endif
-	{ "image/*",                                    tracker_extract_imagemagick },
-	{ "",                                           NULL                        }
+	{ "image/*",                               tracker_extract_imagemagick },
+	{ "",                                      NULL                        }
 };
 
 static MetadataFileType
@@ -125,7 +125,7 @@ get_metadata_type (const char *mime)
 		return IMAGE_METADATA;		
 	} else { 
 		if (g_str_has_prefix (mime, "video")) {
-			return IGNORE_METADATA;		
+			return VIDEO_METADATA;		
 		} else { 
 			if (g_str_has_prefix (mime, "audio")) {
 				return AUDIO_METADATA;		
@@ -174,6 +174,8 @@ tracker_get_file_metadata (const char *u
 		for (p = extractors; p->extractor; ++p) {
 			if (g_pattern_match_simple (p->mime, mime)) {
 				(*p->extractor)(uri_in_locale, meta_table);
+				if (g_hash_table_size (meta_table) == 0)
+					continue;
 				g_free (uri_in_locale);
 				g_free (mime);
 				return meta_table;
--- /dev/null	2006-08-05 19:53:54.000000000 -0400
+++ src/tracker-extract/tracker-extract-mplayer.c	2006-10-12 16:25:37.000000000 -0400
@@ -0,0 +1,102 @@
+
+#include "config.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <glib.h>
+
+gchar *video_tags[][2] = {
+      { "ID_VIDEO_HEIGHT",  "Video.Height"     },
+      { "ID_VIDEO_WIDTH",   "Video.Width"      },
+      { "ID_VIDEO_FPS",     "Video.FrameRate"  },
+      { "ID_VIDEO_CODEC",   "Video.Codec"      },
+      { "ID_VIDEO_BITRATE", "Video.Bitrate"    },
+      { NULL,               NULL               }
+   };
+
+gchar *audio_tags[][2] = {
+      { "ID_AUDIO_BITRATE", "Audio.Bitrate"    },
+      { "ID_AUDIO_RATE",    "Audio.Samplerate" },
+      { "ID_AUDIO_CODEC",   "Audio.Codec"      },
+      { "ID_AUDIO_NCH",     "Audio.Channels"   },
+      { NULL,               NULL               }
+   };
+
+gchar *info_tags[][2] = {
+      { "comments",     "Video.Comment"        },
+      { "name",         "Video.Title"          },
+      { "author",       "Video.Author"         },
+      { "copyright",    "Video.Copyright"      },
+      { NULL,           NULL                   }
+   };
+
+void
+tracker_extract_mplayer (gchar *filename, GHashTable *metadata)
+{
+	gchar      *argv[10];
+	gchar      *mplayer;
+	gchar     **lines, **line;
+   gchar     **tag;
+   gint        n;
+
+	argv[0] = g_strdup ("mplayer");
+	argv[1] = g_strdup ("-identify");
+	argv[2] = g_strdup ("-frames");
+	argv[3] = g_strdup ("0");
+	argv[4] = g_strdup ("-vo");
+	argv[5] = g_strdup ("null");
+	argv[6] = g_strdup ("-ao");
+	argv[7] = g_strdup ("null");
+	argv[8] = g_strdup (filename);
+	argv[9] = NULL;
+
+	if(g_spawn_sync (NULL,
+	                 argv,
+	                 NULL,
+	                 G_SPAWN_SEARCH_PATH | G_SPAWN_STDERR_TO_DEV_NULL,
+	                 NULL,
+	                 NULL,
+	                 &mplayer,
+	                 NULL,
+	                 NULL,
+	                 NULL)) {
+
+
+         lines = g_strsplit (mplayer, "\n", -1);
+
+         for (line = lines; *line; ++line) {
+
+            if (g_pattern_match_simple ("ID_VIDEO*=*", *line)) {
+               for (tag = video_tags; *tag; ++tag) {
+                  if (g_str_has_prefix (*line, tag[0])) {
+                     g_hash_table_insert (metadata, 
+                           g_strdup (tag[1]), 
+                           g_strdup ((*line) + strlen (tag[0]) + 1));
+                  }
+               }
+            }
+
+            if (g_pattern_match_simple ("ID_AUDIO*=*", *line)) {
+               for (tag = audio_tags; *tag; ++tag) {
+                  if (g_str_has_prefix (*line, tag[0])) {
+                     g_hash_table_insert (metadata, 
+                           g_strdup (tag[1]), 
+                           g_strdup ((*line) + strlen (tag[0]) + 1));
+                  }
+               }
+            }
+
+            if (g_pattern_match_simple ("ID_CLIP_INFO_NAME*=*", *line)) {
+               for (tag = info_tags; *tag; ++tag) {
+                  n = strlen(*line) - strlen(tag[0]);
+                  if (strcasecmp (*line + n, tag[0]) == 0) {
+                     g_hash_table_insert (metadata, 
+                           g_strdup (tag[1]), 
+                           g_strdup (strstr (line[1], "=") + 1));
+                  }
+               }
+            }
+         }
+	}
+}
+
Index: data/sqlite-tracker.sql
===================================================================
RCS file: /cvs/gnome/tracker/data/sqlite-tracker.sql,v
retrieving revision 1.8
diff -u -p -r1.8 sqlite-tracker.sql
--- data/sqlite-tracker.sql	6 Oct 2006 11:33:03 -0000	1.8
+++ data/sqlite-tracker.sql	12 Oct 2006 21:13:36 -0000
@@ -25,7 +25,7 @@ insert Into ServiceTypes (TypeID, TypeNa
 insert Into ServiceTypes (TypeID, TypeName, MetadataClass, Description, MainService) values (2, 'Documents', 'Doc, File', 'documents only', 1);
 insert Into ServiceTypes (TypeID, TypeName, MetadataClass, Description, MainService) values (3, 'Images', 'Image, File', 'image files only', 1);
 insert Into ServiceTypes (TypeID, TypeName, MetadataClass, Description, MainService) values (4, 'Music', 'Audio, File', 'music files only', 1);
-insert Into ServiceTypes (TypeID, TypeName, MetadataClass, Description, MainService) values (5, 'Videos', 'File', 'video and movie files only', 1);
+insert Into ServiceTypes (TypeID, TypeName, MetadataClass, Description, MainService) values (5, 'Videos', 'File, Audio, Video', 'video and movie files only', 1);
 insert Into ServiceTypes (TypeID, TypeName, MetadataClass, Description, MainService) values (6, 'Text Files', 'File', 'text files only', 1);
 insert Into ServiceTypes (TypeID, TypeName, MetadataClass, Description, MainService) values (7, 'Development Files', 'File', 'development and source code files only', 1);
 insert Into ServiceTypes (TypeID, TypeName, MetadataClass, Description, MainService) values (8, 'Other Files', 'File', 'all other uncategorized files', 1);
@@ -305,6 +305,16 @@ insert Into MetaDataTypes (MetaName, Dat
 insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values  ('Image.MeteringMode', 1, 1, 0, 0);
 insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values  ('Image.WhiteBalance', 1, 1, 0, 0);
 insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values  ('Image.Copyright', 4, 1, 0, 1);
+
+insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values  ('Video.Title', 0, 1, 0, 1);
+insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values  ('Video.Author', 0, 1, 0, 1);
+insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values  ('Video.Comment', 0, 1, 0, 1);
+insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values  ('Video.Copyright', 0, 1, 0, 1);
+insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values  ('Video.Height', 2, 1, 0, 100);
+insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values  ('Video.Width', 2, 1, 0, 100);
+insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values  ('Video.FrameRate', 2, 1, 0, 100);
+insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values  ('Video.Codec', 0, 1, 0, 10);
+insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values  ('Video.Bitrate', 2, 1, 0, 100);
 
 insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values  ('Email.Date', 3, 1, 0, 0);
 insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values  ('Email.Sender', 4, 1, 0, 10);
_______________________________________________
tracker-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/tracker-list

Reply via email to