aiffparse: Add tags for container format and bitrate
authorCarlos Rafael Giani <dv@pseudoterminal.org>
Tue, 2 Aug 2016 11:48:43 +0000 (13:48 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Tue, 2 Aug 2016 12:21:38 +0000 (15:21 +0300)
The bitrate is added to help downstream elements (like uridecodebin)
figure out a proper network buffer size

https://bugzilla.gnome.org/show_bug.cgi?id=769389

gst/aiff/Makefile.am
gst/aiff/aiffparse.c

index ebe42305c26aef75a934b58b4e5d82fb47e9f5d2..ee13fcf721754a2cad870f1f6d8daf1c409482ec 100644 (file)
@@ -9,7 +9,7 @@ libgstaiff_la_CFLAGS = \
        $(GST_BASE_CFLAGS) \
        $(GST_CFLAGS)
 libgstaiff_la_LIBADD = \
-       $(GST_PLUGINS_BASE_LIBS) -lgsttag-$(GST_API_VERSION) -lgstaudio-$(GST_API_VERSION)\
+       $(GST_PLUGINS_BASE_LIBS) -lgsttag-$(GST_API_VERSION) -lgstaudio-$(GST_API_VERSION) -lgstpbutils-$(GST_API_VERSION) \
        $(GST_BASE_LIBS) \
        $(LIBM)
 libgstaiff_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
index 27c8313d34a63d4f56d82d5df7980c3583e1ef93..bde90fcd5d2e60fcb69394de69edfe090f08babc 100644 (file)
@@ -59,6 +59,7 @@
 #include "aiffparse.h"
 #include <gst/audio/audio.h>
 #include <gst/tag/tag.h>
+#include <gst/pbutils/descriptions.h>
 #include <gst/gst-i18n-plugin.h>
 
 GST_DEBUG_CATEGORY (aiffparse_debug);
@@ -995,6 +996,32 @@ gst_aiff_parse_stream_headers (GstAiffParse * aiff)
         aiff->bytes_per_sample = aiff->channels * aiff->width / 8;
         aiff->bps = aiff->bytes_per_sample * aiff->rate;
 
+        if (!aiff->tags)
+          aiff->tags = gst_tag_list_new_empty ();
+
+        {
+          GstCaps *templ_caps = gst_pad_get_pad_template_caps (aiff->sinkpad);
+          gst_pb_utils_add_codec_description_to_tag_list (aiff->tags,
+              GST_TAG_CONTAINER_FORMAT, templ_caps);
+          gst_caps_unref (templ_caps);
+        }
+
+        if (aiff->bps) {
+          guint bitrate = aiff->bps * 8;
+
+          GST_DEBUG_OBJECT (aiff, "adding bitrate of %u bps to tag list",
+              bitrate);
+
+          /* At the moment, aiffparse only supports uncompressed PCM data.
+           * Therefore, nominal, actual, minimum, maximum bitrate are the same.
+           * XXX: If AIFF-C support is extended to include compression,
+           * make sure that aiff->bps is set properly. */
+          gst_tag_list_add (aiff->tags, GST_TAG_MERGE_REPLACE,
+              GST_TAG_BITRATE, bitrate, GST_TAG_NOMINAL_BITRATE, bitrate,
+              GST_TAG_MINIMUM_BITRATE, bitrate, GST_TAG_MAXIMUM_BITRATE,
+              bitrate, NULL);
+        }
+
         if (aiff->bytes_per_sample <= 0)
           goto no_bytes_per_sample;