diff --git a/gst-libs/gst/pbutils/gstdiscoverer-types.c b/gst-libs/gst/pbutils/gstdiscoverer-types.c index f705a94c6b..ee357bab06 100644 --- a/gst-libs/gst/pbutils/gstdiscoverer-types.c +++ b/gst-libs/gst/pbutils/gstdiscoverer-types.c @@ -206,16 +206,23 @@ gst_stream_container_info_copy_int (GstDiscovererContainerInfo * ptr, 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 1b903108f0..21e4f52f3a 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 f0100b6ed0..61236fd1d5 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 99606bc63a..2efaa17110 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 19aef907ff..210c1ed752 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",