From 921b92ce0603bb0341fabea5712f4b0da9a5f518 Mon Sep 17 00:00:00 2001 From: Vincent Penquerc'h Date: Wed, 24 Aug 2011 16:29:08 +0100 Subject: [PATCH] discoverer: retrieve audio track language from tags too https://bugzilla.gnome.org/show_bug.cgi?id=657257 --- gst-libs/gst/pbutils/gstdiscoverer-types.c | 23 +++++++++++++++++++++-- gst-libs/gst/pbutils/gstdiscoverer.c | 8 ++++++++ gst-libs/gst/pbutils/gstdiscoverer.h | 1 + gst-libs/gst/pbutils/pbutils-private.h | 2 ++ tools/gst-discoverer.c | 3 +++ 5 files changed, 35 insertions(+), 2 deletions(-) diff --git a/gst-libs/gst/pbutils/gstdiscoverer-types.c b/gst-libs/gst/pbutils/gstdiscoverer-types.c index f705a94..ee357ba 100644 --- a/gst-libs/gst/pbutils/gstdiscoverer-types.c +++ b/gst-libs/gst/pbutils/gstdiscoverer-types.c @@ -207,15 +207,22 @@ G_DEFINE_TYPE (GstDiscovererAudioInfo, gst_discoverer_audio_info, GST_TYPE_DISCOVERER_STREAM_INFO); static void +gst_discoverer_audio_info_finalize (GstDiscovererAudioInfo * info) +{ + g_free (info->language); +} + +static void gst_discoverer_audio_info_class_init (GstDiscovererAudioInfoClass * klass) { - /* Nothing to initialize */ + klass->finalize = + (GstMiniObjectFinalizeFunction) gst_discoverer_audio_info_finalize; } static void gst_discoverer_audio_info_init (GstDiscovererAudioInfo * info) { - /* Nothing to initialize */ + info->language = NULL; } static GstDiscovererAudioInfo * @@ -237,6 +244,7 @@ gst_discoverer_audio_info_copy_int (GstDiscovererAudioInfo * ptr) ret->depth = ptr->depth; ret->bitrate = ptr->bitrate; ret->max_bitrate = ptr->max_bitrate; + ret->language = g_strdup (ptr->language); return ret; } @@ -750,6 +758,17 @@ AUDIO_INFO_ACCESSOR_CODE (bitrate, guint, 0); AUDIO_INFO_ACCESSOR_CODE (max_bitrate, guint, 0); +/** + * gst_discoverer_audio_info_get_language: + * @info: a #GstDiscovererAudioInfo + * + * Returns: the language of the stream, or NULL if unknown. + * + * Since: 0.10.36 + */ + +AUDIO_INFO_ACCESSOR_CODE (language, const gchar *, NULL); + /* GstDiscovererVideoInfo */ #define VIDEO_INFO_ACCESSOR_CODE(fieldname, type, failval) \ diff --git a/gst-libs/gst/pbutils/gstdiscoverer.c b/gst-libs/gst/pbutils/gstdiscoverer.c index 1b90310..21e4f52 100644 --- a/gst-libs/gst/pbutils/gstdiscoverer.c +++ b/gst-libs/gst/pbutils/gstdiscoverer.c @@ -667,6 +667,14 @@ collect_information (GstDiscoverer * dc, const GstStructure * st, gst_structure_free (tags_st); } + if (!info->language && ((GstDiscovererStreamInfo *) info)->tags) { + gchar *language; + if (gst_tag_list_get_string (((GstDiscovererStreamInfo *) info)->tags, + GST_TAG_LANGUAGE_CODE, &language)) { + info->language = language; + } + } + return (GstDiscovererStreamInfo *) info; } else if (g_str_has_prefix (name, "video/") || diff --git a/gst-libs/gst/pbutils/gstdiscoverer.h b/gst-libs/gst/pbutils/gstdiscoverer.h index f0100b6..61236fd 100644 --- a/gst-libs/gst/pbutils/gstdiscoverer.h +++ b/gst-libs/gst/pbutils/gstdiscoverer.h @@ -110,6 +110,7 @@ guint gst_discoverer_audio_info_get_sample_rate(const GstDiscovererAudioInfo* in guint gst_discoverer_audio_info_get_depth(const GstDiscovererAudioInfo* info); guint gst_discoverer_audio_info_get_bitrate(const GstDiscovererAudioInfo* info); guint gst_discoverer_audio_info_get_max_bitrate(const GstDiscovererAudioInfo* info); +const gchar * gst_discoverer_audio_info_get_language(const GstDiscovererAudioInfo* info); /** * GstDiscovererVideoInfo: diff --git a/gst-libs/gst/pbutils/pbutils-private.h b/gst-libs/gst/pbutils/pbutils-private.h index 99606bc..2efaa17 100644 --- a/gst-libs/gst/pbutils/pbutils-private.h +++ b/gst-libs/gst/pbutils/pbutils-private.h @@ -44,6 +44,8 @@ struct _GstDiscovererAudioInfo { guint bitrate; guint max_bitrate; + + gchar *language; }; struct _GstDiscovererVideoInfo { diff --git a/tools/gst-discoverer.c b/tools/gst-discoverer.c index 19aef90..210c1ed 100644 --- a/tools/gst-discoverer.c +++ b/tools/gst-discoverer.c @@ -47,6 +47,7 @@ gst_stream_audio_information_to_string (GstDiscovererStreamInfo * info, GstDiscovererAudioInfo *audio_info; GString *s; gchar *tmp; + const gchar *ctmp; int len = 400; const GstTagList *tags; GstCaps *caps; @@ -72,6 +73,8 @@ gst_stream_audio_information_to_string (GstDiscovererStreamInfo * info, } audio_info = (GstDiscovererAudioInfo *) info; + ctmp = gst_discoverer_audio_info_get_language (audio_info); + my_g_string_append_printf (s, "Language: %s\n", ctmp ? ctmp : ""); my_g_string_append_printf (s, "Channels: %u\n", gst_discoverer_audio_info_get_channels (audio_info)); my_g_string_append_printf (s, "Sample rate: %u\n", -- 2.7.4