[tracker-miners/tracker-miners-2.3: 3/4] tracker-extract-libav: Get metadata from audio stream if not found in format context.



commit 9b917f5def73eb77916d3cc22c931cf5864a2c85
Author: Mohammed Hassan <mohammed hassan jolla com>
Date:   Tue Jun 16 09:02:14 2020 +0200

    tracker-extract-libav: Get metadata from audio stream if not found in format context.
    
    It does seem that the audio stream metadata contains the actual beef.
    Check format metadata for tags and fallback to audio stream metadata

 src/tracker-extract/tracker-extract-libav.c | 23 ++++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)
---
diff --git a/src/tracker-extract/tracker-extract-libav.c b/src/tracker-extract/tracker-extract-libav.c
index 0249ed1b7..e1ab54e01 100644
--- a/src/tracker-extract/tracker-extract-libav.c
+++ b/src/tracker-extract/tracker-extract-libav.c
@@ -30,6 +30,15 @@
 #include <libavformat/avformat.h>
 #include <libavutil/mathematics.h>
 
+static AVDictionaryEntry *find_tag (AVFormatContext *format, AVStream *stream, const gchar *name)
+{
+       AVDictionaryEntry *tag = av_dict_get(format->metadata, name, NULL, 0);
+       if (!tag) {
+               tag = av_dict_get(stream->metadata, name, NULL, 0);
+       }
+
+       return tag;
+}
 
 G_MODULE_EXPORT gboolean
 tracker_extract_get_metadata (TrackerExtractInfo *info)
@@ -153,27 +162,27 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
                        tracker_resource_set_int64 (metadata, "nfo:duration", duration);
                }
 
-               if ((tag = av_dict_get (format->metadata, "track", NULL, 0))) {
+               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 = av_dict_get (format->metadata, "album", NULL, 0))) {
+               if ((tag = find_tag (format, audio_stream, "album"))) {
                        album_title = tag->value;
                }
 
-               if (album_title && (tag = av_dict_get (format->metadata, "album_artist", NULL, 0))) {
+               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 = av_dict_get (format->metadata, "artist", tag, 0))) {
+               if ((tag = find_tag (format, audio_stream, "artist"))) {
                        performer = tracker_extract_new_artist (tag->value);
                }
 
-               if (!performer && (tag = av_dict_get (format->metadata, "performer", tag, 0))) {
+               if (!performer && (tag = find_tag (format, audio_stream, "performer"))) {
                        performer = tracker_extract_new_artist (tag->value);
                }
 
@@ -188,7 +197,7 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
                        tracker_resource_set_relation (metadata, "nmm:performer", performer);
                }
 
-               if ((tag = av_dict_get (format->metadata, "composer", tag, 0))) {
+               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);
@@ -198,7 +207,7 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
                        int disc_number = 1;
                        TrackerResource *album_disc;
 
-                       if ((tag = av_dict_get (format->metadata, "disc", NULL, 0))) {
+                       if ((tag = find_tag (format, audio_stream, "disc"))) {
                                disc_number = atoi (tag->value);
                        }
 


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