[tracker-miners/sam/libav-testing: 6/12] tracker-extract-libav: Split into multiple functions




commit fd59cabe9865f43c7cc835a118f44b7dc2e0fe72
Author: Sam Thursfield <sam thursfield codethink co uk>
Date:   Wed Aug 31 11:24:57 2022 +0200

    tracker-extract-libav: Split into multiple functions
    
    This commit should have no functional changes.

 src/tracker-extract/tracker-extract-libav.c | 288 +++++++++++++++-------------
 1 file changed, 153 insertions(+), 135 deletions(-)
---
diff --git a/src/tracker-extract/tracker-extract-libav.c b/src/tracker-extract/tracker-extract-libav.c
index b76c67e7f..61db416e5 100644
--- a/src/tracker-extract/tracker-extract-libav.c
+++ b/src/tracker-extract/tracker-extract-libav.c
@@ -40,6 +40,156 @@ static AVDictionaryEntry *find_tag (AVFormatContext *format, AVStream *stream, c
        return tag;
 }
 
+static void
+extract_audio_info(TrackerResource *metadata,
+                   AVFormatContext *format,
+                   AVStream        *audio_stream)
+{
+       if (audio_stream->codecpar->sample_rate > 0) {
+               tracker_resource_set_int64 (metadata, "nfo:sampleRate", audio_stream->codecpar->sample_rate);
+       }
+       if (audio_stream->codecpar->channels > 0) {
+               tracker_resource_set_int64 (metadata, "nfo:channels", audio_stream->codecpar->channels);
+       }
+}
+
+static void
+extract_video_info(TrackerResource *metadata,
+                   AVFormatContext *format,
+                   AVStream        *video_stream)
+{
+       g_autofree char *content_created = NULL;
+       AVDictionaryEntry *tag = NULL;
+
+       tracker_resource_add_uri(metadata, "rdf:type", "nmm:Video");
+
+       if (video_stream->codecpar->width > 0 && video_stream->codecpar->height > 0) {
+               tracker_resource_set_int64 (metadata, "nfo:width", video_stream->codecpar->width);
+               tracker_resource_set_int64 (metadata, "nfo:height", video_stream->codecpar->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;
+               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);
+               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;
+               tracker_resource_set_double (metadata, "nfo:aspectRatio", aspect_ratio);
+       }
+
+       if (video_stream->nb_frames > 0) {
+               tracker_resource_set_int64 (metadata, "nfo:frameCount", video_stream->nb_frames);
+       }
+
+       if ((tag = av_dict_get (format->metadata, "synopsis", NULL, 0))) {
+               tracker_resource_set_string (metadata, "nmm:synopsis", tag->value);
+       }
+
+       if ((tag = av_dict_get (format->metadata, "episode_sort", NULL, 0))) {
+               tracker_resource_set_int64 (metadata, "nmm:episodeNumber", atoi(tag->value));
+       }
+
+       if ((tag = av_dict_get (format->metadata, "season_number", NULL, 0))) {
+               tracker_resource_set_int64 (metadata, "nmm:season", atoi(tag->value));
+       }
+
+       if ((tag = av_dict_get (format->metadata, "creation_time", NULL, 0))) {
+               content_created = tracker_date_guess (tag->value);
+               if (content_created) {
+                       tracker_resource_set_string (metadata, "nie:contentCreated", content_created);
+               }
+       }
+}
+
+static void
+extract_music_piece_info(TrackerResource *metadata,
+                         AVFormatContext *format,
+                         AVStream        *audio_stream)
+{
+       g_autoptr(TrackerResource) album_artist = NULL, artist = NULL, performer = NULL;
+       char *album_artist_name = NULL;
+       char *album_title = NULL;
+       g_autofree char *content_created = NULL;
+       AVDictionaryEntry *tag = NULL;
+
+       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);
+               tracker_resource_set_int64 (metadata, "nfo:duration", duration);
+       }
+
+       if ((tag = find_tag (format, audio_stream, "track"))) {
+               int track = atoi(tag->value);
+               if (track > 0) {
+                       tracker_resource_set_int64 (metadata, "nmm:trackNumber", track);
+               }
+       }
+
+       if ((tag = find_tag (format, audio_stream, "album"))) {
+               album_title = tag->value;
+       }
+
+       if (album_title && (tag = find_tag (format, audio_stream, "album_artist"))) {
+               album_artist_name = tag->value;
+               album_artist = tracker_extract_new_artist (album_artist_name);
+       }
+
+       if ((tag = find_tag (format, audio_stream, "artist"))) {
+               artist = tracker_extract_new_artist (tag->value);
+       }
+
+       if ((tag = find_tag (format, audio_stream, "performer"))) {
+               performer = tracker_extract_new_artist (tag->value);
+       }
+
+       if ((tag = av_dict_get (format->metadata, "date", NULL, 0))) {
+               content_created = tracker_date_guess (tag->value);
+               if (content_created) {
+                       tracker_resource_set_string (metadata, "nie:contentCreated", content_created);
+               }
+       }
+
+       if (artist) {
+               tracker_resource_set_relation (metadata, "nmm:artist", artist);
+       }
+
+       if (performer) {
+               tracker_resource_set_relation (metadata, "nmm:performer", performer);
+       }
+
+       if ((tag = find_tag (format, audio_stream, "composer"))) {
+               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_number = 1;
+               TrackerResource *album_disc;
+
+               if ((tag = find_tag (format, audio_stream, "disc"))) {
+                       disc_number = atoi (tag->value);
+               }
+
+               album_disc = tracker_extract_new_music_album_disc (album_title, album_artist, disc_number, 
content_created);
+
+               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"));
+       }
+}
+
 G_MODULE_EXPORT gboolean
 tracker_extract_get_metadata (TrackerExtractInfo  *info,
                               GError             **error)
@@ -47,7 +197,6 @@ tracker_extract_get_metadata (TrackerExtractInfo  *info,
        GFile *file;
        TrackerResource *metadata;
        gchar *absolute_file_path;
-       gchar *content_created = NULL;
        gchar *uri, *resource_uri;
        AVFormatContext *format = NULL;
        AVStream *audio_stream = NULL;
@@ -92,143 +241,13 @@ tracker_extract_get_metadata (TrackerExtractInfo  *info,
        g_free (resource_uri);
 
        if (audio_stream) {
-               if (audio_stream->codecpar->sample_rate > 0) {
-                       tracker_resource_set_int64 (metadata, "nfo:sampleRate", 
audio_stream->codecpar->sample_rate);
-               }
-               if (audio_stream->codecpar->channels > 0) {
-                       tracker_resource_set_int64 (metadata, "nfo:channels", 
audio_stream->codecpar->channels);
-               }
+               extract_audio_info (metadata, format, audio_stream);
        }
 
        if (video_stream && !(video_stream->disposition & AV_DISPOSITION_ATTACHED_PIC)) {
-               tracker_resource_add_uri(metadata, "rdf:type", "nmm:Video");
-
-               if (video_stream->codecpar->width > 0 && video_stream->codecpar->height > 0) {
-                       tracker_resource_set_int64 (metadata, "nfo:width", video_stream->codecpar->width);
-                       tracker_resource_set_int64 (metadata, "nfo:height", video_stream->codecpar->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;
-                       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);
-                       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;
-                       tracker_resource_set_double (metadata, "nfo:aspectRatio", aspect_ratio);
-               }
-
-               if (video_stream->nb_frames > 0) {
-                       tracker_resource_set_int64 (metadata, "nfo:frameCount", video_stream->nb_frames);
-               }
-
-               if ((tag = av_dict_get (format->metadata, "synopsis", NULL, 0))) {
-                       tracker_resource_set_string (metadata, "nmm:synopsis", tag->value);
-               }
-
-               if ((tag = av_dict_get (format->metadata, "episode_sort", NULL, 0))) {
-                       tracker_resource_set_int64 (metadata, "nmm:episodeNumber", atoi(tag->value));
-               }
-
-               if ((tag = av_dict_get (format->metadata, "season_number", NULL, 0))) {
-                       tracker_resource_set_int64 (metadata, "nmm:season", atoi(tag->value));
-               }
-
-               if ((tag = av_dict_get (format->metadata, "creation_time", NULL, 0))) {
-                       content_created = tracker_date_guess (tag->value);
-                       if (content_created) {
-                               tracker_resource_set_string (metadata, "nie:contentCreated", content_created);
-                       }
-               }
-
+               extract_video_info (metadata, format, video_stream);
        } else if (audio_stream) {
-               TrackerResource *album_artist = NULL, *artist = NULL, *performer = NULL;
-               char *album_artist_name = NULL;
-               char *album_title = NULL;
-
-               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);
-                       tracker_resource_set_int64 (metadata, "nfo:duration", duration);
-               }
-
-               if ((tag = find_tag (format, audio_stream, "track"))) {
-                       int track = atoi(tag->value);
-                       if (track > 0) {
-                               tracker_resource_set_int64 (metadata, "nmm:trackNumber", track);
-                       }
-               }
-
-               if ((tag = find_tag (format, audio_stream, "album"))) {
-                       album_title = tag->value;
-               }
-
-               if (album_title && (tag = find_tag (format, audio_stream, "album_artist"))) {
-                       album_artist_name = tag->value;
-                       album_artist = tracker_extract_new_artist (album_artist_name);
-               }
-
-               if ((tag = find_tag (format, audio_stream, "artist"))) {
-                       artist = tracker_extract_new_artist (tag->value);
-               }
-
-               if ((tag = find_tag (format, audio_stream, "performer"))) {
-                       performer = tracker_extract_new_artist (tag->value);
-               }
-
-               if ((tag = av_dict_get (format->metadata, "date", NULL, 0))) {
-                       content_created = tracker_date_guess (tag->value);
-                       if (content_created) {
-                               tracker_resource_set_string (metadata, "nie:contentCreated", content_created);
-                       }
-               }
-
-               if (artist) {
-                       tracker_resource_set_relation (metadata, "nmm:artist", artist);
-               }
-
-               if (performer) {
-                       tracker_resource_set_relation (metadata, "nmm:performer", performer);
-               }
-
-               if ((tag = find_tag (format, audio_stream, "composer"))) {
-                       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_number = 1;
-                       TrackerResource *album_disc;
-
-                       if ((tag = find_tag (format, audio_stream, "disc"))) {
-                               disc_number = atoi (tag->value);
-                       }
-
-                       album_disc = tracker_extract_new_music_album_disc (album_title, album_artist, 
disc_number, content_created);
-
-                       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"));
-
-                       g_object_unref (album_disc);
-               }
-
-               if (artist)
-                       g_object_unref (artist);
-
-               if (performer)
-                       g_object_unref (performer);
+               extract_music_piece_info (metadata, format, audio_stream);
        }
 
        if (format->bit_rate > 0) {
@@ -257,7 +276,6 @@ tracker_extract_get_metadata (TrackerExtractInfo  *info,
 
        tracker_guarantee_resource_title_from_file (metadata, "nie:title", title, uri, NULL);
 
-       g_free (content_created);
        g_free (uri);
 
        avformat_close_input (&format);


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