summaryrefslogtreecommitdiff
path: root/src/tracker-extract/tracker-extract-libav.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tracker-extract/tracker-extract-libav.c')
-rw-r--r--src/tracker-extract/tracker-extract-libav.c232
1 files changed, 58 insertions, 174 deletions
diff --git a/src/tracker-extract/tracker-extract-libav.c b/src/tracker-extract/tracker-extract-libav.c
index 500d7d8d4..cd8147bf8 100644
--- a/src/tracker-extract/tracker-extract-libav.c
+++ b/src/tracker-extract/tracker-extract-libav.c
@@ -34,107 +34,12 @@
#include <libavformat/avformat.h>
#include <libavutil/mathematics.h>
-static void
-open_insert (TrackerSparqlBuilder *preupdate,
- const char *graph,
- const gchar *iri,
- const gchar *type)
-{
- tracker_sparql_builder_insert_open (preupdate, NULL);
- if (graph) {
- tracker_sparql_builder_graph_open (preupdate, graph);
- }
-
- tracker_sparql_builder_subject_iri (preupdate, iri);
- tracker_sparql_builder_predicate (preupdate, "a");
- tracker_sparql_builder_object (preupdate, type);
-}
-
-static void
-close_insert (TrackerSparqlBuilder *preupdate, const char *graph)
-{
- if (graph) {
- tracker_sparql_builder_graph_close (preupdate);
- }
- tracker_sparql_builder_insert_close (preupdate);
-}
-
-static void
-delete_value (TrackerSparqlBuilder *preupdate,
- const gchar *iri,
- const gchar *predicate,
- const char *value)
-{
- tracker_sparql_builder_delete_open (preupdate, NULL);
- tracker_sparql_builder_subject_iri (preupdate, iri);
- tracker_sparql_builder_predicate (preupdate, predicate);
- tracker_sparql_builder_object_variable (preupdate, value);
- tracker_sparql_builder_delete_close (preupdate);
-
- tracker_sparql_builder_where_open (preupdate);
- tracker_sparql_builder_subject_iri (preupdate, iri);
- tracker_sparql_builder_predicate (preupdate, predicate);
- tracker_sparql_builder_object_variable (preupdate, value);
- tracker_sparql_builder_where_close (preupdate);
-}
-
-static void
-set_value_iri (TrackerSparqlBuilder *metadata,
- const gchar *predicate,
- const gchar *iri)
-{
- tracker_sparql_builder_predicate (metadata, predicate);
- tracker_sparql_builder_object_iri (metadata, iri);
-}
-
-static void
-set_value_double (TrackerSparqlBuilder *metadata,
- const gchar *predicate,
- gdouble value)
-{
- tracker_sparql_builder_predicate (metadata, predicate);
- tracker_sparql_builder_object_double (metadata, value);
-}
-
-static void
-set_value_int64 (TrackerSparqlBuilder *metadata,
- const gchar *predicate,
- gint64 value)
-{
- tracker_sparql_builder_predicate (metadata, predicate);
- tracker_sparql_builder_object_int64 (metadata, value);
-}
-
-static void
-set_value_string (TrackerSparqlBuilder *metadata,
- const gchar *predicate,
- const gchar *value)
-{
- tracker_sparql_builder_predicate (metadata, predicate);
- tracker_sparql_builder_object_unvalidated (metadata, value);
-}
-
-static gchar *
-create_artist (TrackerSparqlBuilder *preupdate,
- const gchar *graph,
- const char *name)
-{
- gchar *uri = tracker_sparql_escape_uri_printf ("urn:artist:%s", name);
-
- open_insert (preupdate, graph, uri, "nmm:Artist");
- set_value_string (preupdate, "nmm:artistName", name);
- close_insert (preupdate, graph);
-
- return uri;
-}
G_MODULE_EXPORT gboolean
tracker_extract_get_metadata (TrackerExtractInfo *info)
{
GFile *file;
- TrackerSparqlBuilder *metadata;
- TrackerSparqlBuilder *preupdate;
- const gchar *graph;
+ TrackerResource *metadata;
gchar *absolute_file_path;
gchar *uri;
AVFormatContext *format = NULL;
@@ -148,9 +53,6 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
av_register_all ();
file = tracker_extract_info_get_file (info);
- metadata = tracker_extract_info_get_metadata_builder (info);
- preupdate = tracker_extract_info_get_preupdate_builder (info);
- graph = tracker_extract_info_get_graph (info);
uri = g_file_get_uri (file);
@@ -180,78 +82,77 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
return FALSE;
}
+ metadata = tracker_resource_new (NULL);
+
if (audio_stream) {
if (audio_stream->codec->sample_rate > 0) {
- set_value_int64 (metadata, "nfo:sampleRate", audio_stream->codec->sample_rate);
+ tracker_resource_set_int64 (metadata, "nfo:sampleRate", audio_stream->codec->sample_rate);
}
if (audio_stream->codec->channels > 0) {
- set_value_int64 (metadata, "nfo:channels", audio_stream->codec->channels);
+ tracker_resource_set_int64 (metadata, "nfo:channels", audio_stream->codec->channels);
}
}
if (video_stream) {
- tracker_sparql_builder_predicate (metadata, "a");
- tracker_sparql_builder_object (metadata, "nmm:Video");
+ tracker_resource_add_uri(metadata, "rdf:type", "nmm:Video");
if (video_stream->codec->width > 0 && video_stream->codec->height > 0) {
- set_value_int64 (metadata, "nfo:width", video_stream->codec->width);
- set_value_int64 (metadata, "nfo:height", video_stream->codec->height);
+ tracker_resource_set_int64 (metadata, "nfo:width", video_stream->codec->width);
+ tracker_resource_set_int64 (metadata, "nfo:height", video_stream->codec->height);
}
if (video_stream->avg_frame_rate.num > 0) {
gdouble frame_rate = (gdouble) video_stream->avg_frame_rate.num
/ video_stream->avg_frame_rate.den;
- set_value_double (metadata, "nfo:frameRate", frame_rate);
+ tracker_resource_set_double (metadata, "nfo:frameRate", frame_rate);
}
if (video_stream->duration > 0) {
gint64 duration = av_rescale(video_stream->duration, video_stream->time_base.num,
video_stream->time_base.den);
- set_value_int64 (metadata, "nfo:duration", duration);
+ tracker_resource_set_int64 (metadata, "nfo:duration", duration);
}
if (video_stream->sample_aspect_ratio.num > 0) {
gdouble aspect_ratio = (gdouble) video_stream->sample_aspect_ratio.num
/ video_stream->sample_aspect_ratio.den;
- set_value_double (metadata, "nfo:aspectRatio", aspect_ratio);
+ tracker_resource_set_double (metadata, "nfo:aspectRatio", aspect_ratio);
}
if (video_stream->nb_frames > 0) {
- set_value_int64 (metadata, "nfo:frameCount", video_stream->nb_frames);
+ tracker_resource_set_int64 (metadata, "nfo:frameCount", video_stream->nb_frames);
}
if ((tag = av_dict_get (format->metadata, "synopsis", NULL, 0))) {
- set_value_string (metadata, "nmm:synopsis", tag->value);
+ tracker_resource_set_string (metadata, "nmm:synopsis", tag->value);
}
if ((tag = av_dict_get (format->metadata, "episode_sort", NULL, 0))) {
- set_value_int64 (metadata, "nmm:episodeNumber", atoi(tag->value));
+ tracker_resource_set_int64 (metadata, "nmm:episodeNumber", atoi(tag->value));
}
if ((tag = av_dict_get (format->metadata, "season_number", NULL, 0))) {
- set_value_int64 (metadata, "nmm:season", atoi(tag->value));
+ tracker_resource_set_int64 (metadata, "nmm:season", atoi(tag->value));
}
} else if (audio_stream) {
- const char *album_title = NULL;
- const char *album_artist = NULL;
- gchar *album_artist_uri = NULL;
- gchar *performer_uri = NULL;
+ TrackerResource *album_artist = NULL, *performer = NULL;
+ char *album_artist_name = NULL;
+ char *album_title = NULL;
- tracker_sparql_builder_predicate (metadata, "a");
- tracker_sparql_builder_object (metadata, "nmm:MusicPiece");
- tracker_sparql_builder_object (metadata, "nfo:Audio");
+ tracker_resource_add_uri (metadata, "rdf:type", "nmm:MusicPiece");
+ tracker_resource_add_uri (metadata, "rdf:type", "nfo:Audio");
if (audio_stream->duration > 0) {
gint64 duration = av_rescale(audio_stream->duration, audio_stream->time_base.num,
audio_stream->time_base.den);
- set_value_int64 (metadata, "nfo:duration", duration);
+ tracker_resource_set_int64 (metadata, "nfo:duration", duration);
}
if ((tag = av_dict_get (format->metadata, "track", NULL, 0))) {
int track = atoi(tag->value);
if (track > 0) {
- set_value_int64 (metadata, "nmm:trackNumber", track);
+ tracker_resource_set_int64 (metadata, "nmm:trackNumber", track);
}
}
@@ -260,73 +161,52 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
}
if (album_title && (tag = av_dict_get (format->metadata, "album_artist", NULL, 0))) {
- album_artist_uri = create_artist (preupdate, graph, tag->value);
- album_artist = tag->value;
+ album_artist_name = tag->value;
+ album_artist = tracker_extract_new_artist (album_artist_name);
}
if ((tag = av_dict_get (format->metadata, "artist", tag, 0))) {
- performer_uri = create_artist (preupdate, graph, tag->value);
+ performer = tracker_extract_new_artist (tag->value);
if (!album_artist) {
- album_artist = tag->value;
+ album_artist_name = tag->value;
+ album_artist = performer;
}
}
- if (!performer_uri && (tag = av_dict_get (format->metadata, "performer", tag, 0))) {
- performer_uri = create_artist (preupdate, graph, tag->value);
+ if (!performer && (tag = av_dict_get (format->metadata, "performer", tag, 0))) {
+ performer = tracker_extract_new_artist (tag->value);
if (!album_artist) {
- album_artist = tag->value;
+ album_artist_name = tag->value;
+ album_artist = performer;
}
}
- if (performer_uri) {
- set_value_iri (metadata, "nmm:performer", performer_uri);
- } else if (album_artist_uri) {
- set_value_iri (metadata, "nmm:performer", album_artist_uri);
+ if (performer) {
+ tracker_resource_set_relation (metadata, "nmm:performer", performer);
+ } else if (album_artist) {
+ tracker_resource_set_relation (metadata, "nmm:performer", album_artist);
}
if ((tag = av_dict_get (format->metadata, "composer", tag, 0))) {
- gchar *composer_uri = create_artist (preupdate, graph, tag->value);
- set_value_iri (metadata, "nmm:composer", composer_uri);
- g_free(composer_uri);
+ TrackerResource *composer = tracker_extract_new_artist (tag->value);
+ tracker_resource_set_relation (metadata, "nmm:composer", composer);
+ g_object_unref (composer);
}
-
if (album_title) {
- int disc = 1;
- gchar *disc_uri;
- gchar *album_uri = tracker_sparql_escape_uri_printf ("urn:album:%s", album_title);
-
- open_insert (preupdate, graph, album_uri, "nmm:MusicAlbum");
- set_value_string (preupdate, "nmm:albumTitle", album_title);
- if (album_artist_uri) {
- set_value_iri (preupdate, "nmm:albumArtist", album_artist_uri);
- } else if (performer_uri) {
- set_value_iri (preupdate, "nmm:albumArtist", performer_uri);
- }
- close_insert (preupdate, graph);
-
+ int disc_number = 1;
+ TrackerResource *album_disc;
if ((tag = av_dict_get (format->metadata, "disc", NULL, 0))) {
- disc = atoi (tag->value);
+ disc_number = atoi (tag->value);
}
- disc_uri = tracker_sparql_escape_uri_printf ("urn:album-disc:%s:Disc%d",
- album_title,
- disc);
-
- delete_value (preupdate, disc_uri, "nmm:setNumber", "unknown");
- delete_value (preupdate, disc_uri, "nmm:albumDiscAlbum", "unknown");
+ album_disc = tracker_extract_new_music_album_disc (album_title, album_artist, disc_number);
- open_insert (preupdate, graph, disc_uri, "nmm:MusicAlbumDisc");
- set_value_int64 (preupdate, "nmm:setNumber", disc);
- set_value_iri (preupdate, "nmm:albumDiscAlbum", album_uri);
- close_insert (preupdate, graph);
+ tracker_resource_set_relation (metadata, "nmm:musicAlbumDisc", album_disc);
+ tracker_resource_set_relation (metadata, "nmm:musicAlbum", tracker_resource_get_first_relation (album_disc, "nmm:albumDiscAlbum"));
- set_value_iri (metadata, "nmm:musicAlbumDisc", disc_uri);
- set_value_iri (metadata, "nmm:musicAlbum", album_uri);
-
- g_free (disc_uri);
- g_free (album_uri);
+ g_object_unref (album_disc);
}
#ifdef HAVE_LIBMEDIAART
@@ -353,51 +233,55 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
}
#endif
- g_free(performer_uri);
+ if (performer)
+ g_object_unref (performer);
}
if (format->bit_rate > 0) {
- set_value_int64 (metadata, "nfo:averageBitrate", format->bit_rate);
+ tracker_resource_set_int64 (metadata, "nfo:averageBitrate", format->bit_rate);
}
if ((tag = av_dict_get (format->metadata, "comment", NULL, 0))) {
- set_value_string (metadata, "nie:comment", tag->value);
+ tracker_resource_set_string (metadata, "nie:comment", tag->value);
}
if ((tag = av_dict_get (format->metadata, "copyright", NULL, 0))) {
- set_value_string (metadata, "nie:copyright", tag->value);
+ tracker_resource_set_string (metadata, "nie:copyright", tag->value);
}
if ((tag = av_dict_get (format->metadata, "creation_time", NULL, 0))) {
gchar *content_created = tracker_date_guess (tag->value);
if (content_created) {
- set_value_string (metadata, "nie:contentCreated", content_created);
+ tracker_resource_set_string (metadata, "nie:contentCreated", content_created);
g_free (content_created);
}
}
if ((tag = av_dict_get (format->metadata, "description", NULL, 0))) {
- set_value_string (metadata, "nie:description", tag->value);
+ tracker_resource_set_string (metadata, "nie:description", tag->value);
}
if ((tag = av_dict_get (format->metadata, "genre", NULL, 0))) {
- set_value_string (metadata, "nfo:genre", tag->value);
+ tracker_resource_set_string (metadata, "nfo:genre", tag->value);
}
if ((tag = av_dict_get (format->metadata, "language", NULL, 0))) {
- set_value_string (metadata, "nfo:language", tag->value);
+ tracker_resource_set_string (metadata, "nfo:language", tag->value);
}
if ((tag = av_dict_get (format->metadata, "title", NULL, 0))) {
title = tag->value;
}
- tracker_guarantee_title_from_file (metadata, "nie:title", title, uri, NULL);
+ tracker_guarantee_resource_title_from_file (metadata, "nie:title", title, uri, NULL);
g_free (uri);
avformat_free_context (format);
+ tracker_extract_info_set_resource (info, metadata);
+ g_object_unref (metadata);
+
return TRUE;
}