API: gst_discoverer_audio_info_get_channel_mask
authorMathieu Duponchelle <mathieu.duponchelle@opencreed.com>
Mon, 12 Jun 2017 23:40:44 +0000 (01:40 +0200)
committerMathieu Duponchelle <mathieu@centricular.com>
Wed, 11 Oct 2017 17:46:29 +0000 (19:46 +0200)
https://bugzilla.gnome.org/show_bug.cgi?id=783722

docs/libs/gst-plugins-base-libs-sections.txt
gst-libs/gst/pbutils/gstdiscoverer-types.c
gst-libs/gst/pbutils/gstdiscoverer.c
gst-libs/gst/pbutils/gstdiscoverer.h
gst-libs/gst/pbutils/pbutils-private.h
win32/common/libgstpbutils.def

index 1816082..1e5575d 100644 (file)
@@ -3279,6 +3279,7 @@ gst_discoverer_info_get_subtitle_streams
 gst_discoverer_info_get_video_streams
 gst_discoverer_audio_info_get_bitrate
 gst_discoverer_audio_info_get_channels
+gst_discoverer_audio_info_get_channel_mask
 gst_discoverer_audio_info_get_depth
 gst_discoverer_audio_info_get_language
 gst_discoverer_audio_info_get_max_bitrate
index 171ed6d..d450241 100644 (file)
@@ -248,6 +248,7 @@ gst_discoverer_audio_info_copy_int (GstDiscovererAudioInfo * ptr)
   ret = gst_discoverer_audio_info_new ();
 
   ret->channels = ptr->channels;
+  ret->channel_mask = ptr->channel_mask;
   ret->sample_rate = ptr->sample_rate;
   ret->depth = ptr->depth;
   ret->bitrate = ptr->bitrate;
@@ -749,6 +750,19 @@ gst_discoverer_container_info_get_streams (GstDiscovererContainerInfo * info)
 AUDIO_INFO_ACCESSOR_CODE (channels, guint, 0);
 
 /**
+ * gst_discoverer_audio_info_get_channel_mask:
+ * @info: a #GstDiscovererAudioInfo
+ *
+ * Returns: the channel-mask of the stream, refer to
+ * gst_audio_channel_positions_from_mask() for more
+ * information.
+ *
+ * Since: 1.14
+ */
+
+AUDIO_INFO_ACCESSOR_CODE (channel_mask, guint64, G_MAXUINT64);
+
+/**
  * gst_discoverer_audio_info_get_sample_rate:
  * @info: a #GstDiscovererAudioInfo
  *
index 7ac5b9a..b7f5c13 100644 (file)
@@ -868,6 +868,7 @@ collect_information (GstDiscoverer * dc, const GstStructure * st,
   if (g_str_has_prefix (name, "audio/")) {
     GstDiscovererAudioInfo *info;
     const gchar *format_str;
+    guint64 channel_mask;
 
     info = (GstDiscovererAudioInfo *) make_info (parent,
         GST_TYPE_DISCOVERER_AUDIO_INFO, caps);
@@ -878,6 +879,13 @@ collect_information (GstDiscoverer * dc, const GstStructure * st,
     if (gst_structure_get_int (caps_st, "channels", &tmp))
       info->channels = (guint) tmp;
 
+    if (gst_structure_get (caps_st, "channel-mask", GST_TYPE_BITMASK,
+            &channel_mask, NULL)) {
+      info->channel_mask = channel_mask;
+    } else if (info->channels) {
+      info->channel_mask = gst_audio_channel_get_fallback_mask (info->channels);
+    }
+
     /* FIXME: we only want to extract depth if raw audio is what's in the
      * container (i.e. not if there is a decoder involved) */
     format_str = gst_structure_get_string (caps_st, "format");
@@ -1836,10 +1844,11 @@ _serialize_info (GstDiscovererInfo * info, GstDiscovererSerializeFlags flags)
 static GVariant *
 _serialize_audio_stream_info (GstDiscovererAudioInfo * ainfo)
 {
-  return g_variant_new ("(uuuuums)",
+  return g_variant_new ("(uuuuumst)",
       ainfo->channels,
       ainfo->sample_rate,
-      ainfo->bitrate, ainfo->max_bitrate, ainfo->depth, ainfo->language);
+      ainfo->bitrate, ainfo->max_bitrate, ainfo->depth, ainfo->language,
+      ainfo->channel_mask);
 }
 
 static GVariant *
@@ -1994,6 +2003,8 @@ _parse_audio_stream_info (GstDiscovererAudioInfo * ainfo, GVariant * specific)
   if (str)
     ainfo->language = g_strdup (str);
 
+  GET_FROM_TUPLE (specific, uint64, 6, &ainfo->channel_mask);
+
   g_variant_unref (specific);
 }
 
index ce4c3ac..b4505ed 100644 (file)
@@ -125,6 +125,9 @@ GST_EXPORT
 guint gst_discoverer_audio_info_get_channels(const GstDiscovererAudioInfo* info);
 
 GST_EXPORT
+guint64 gst_discoverer_audio_info_get_channel_mask(const GstDiscovererAudioInfo* info);
+
+GST_EXPORT
 guint gst_discoverer_audio_info_get_sample_rate(const GstDiscovererAudioInfo* info);
 
 GST_EXPORT
index ceaae4b..08d53ae 100644 (file)
@@ -18,6 +18,8 @@
  * Boston, MA 02110-1301, USA.
  */
 
+#include "gstdiscoverer.h"
+
 struct _GstDiscovererStreamInfo {
   GObject                parent;
 
@@ -44,6 +46,7 @@ struct _GstDiscovererContainerInfo {
 struct _GstDiscovererAudioInfo {
   GstDiscovererStreamInfo parent;
 
+  guint64 channel_mask;
   guint channels;
   guint sample_rate;
   guint depth;
index bc0c1e0..f1fc203 100644 (file)
@@ -27,6 +27,7 @@ EXPORTS
        gst_codec_utils_opus_parse_header
        gst_discoverer_audio_info_get_bitrate
        gst_discoverer_audio_info_get_channels
+       gst_discoverer_audio_info_get_channel_mask
        gst_discoverer_audio_info_get_depth
        gst_discoverer_audio_info_get_language
        gst_discoverer_audio_info_get_max_bitrate