opus: include streams count in caps
authorVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Thu, 8 Dec 2011 19:47:55 +0000 (19:47 +0000)
committerVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Fri, 9 Dec 2011 15:04:20 +0000 (15:04 +0000)
https://bugzilla.gnome.org/show_bug.cgi?id=665078

ext/opus/gstopusenc.c
ext/opus/gstopusheader.c
ext/opus/gstopusparse.c

index e7d6842..502f4a9 100644 (file)
@@ -126,7 +126,7 @@ static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
 static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
     GST_PAD_SRC,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-opus")
+    GST_STATIC_CAPS ("audio/x-opus, streams = (int) [1, 255 ]")
     );
 
 #define DEFAULT_AUDIO           TRUE
index 7f49e47..185c85e 100644 (file)
@@ -150,11 +150,26 @@ void
 gst_opus_header_create_caps_from_headers (GstCaps ** caps, GSList ** headers,
     GstBuffer * buf1, GstBuffer * buf2)
 {
+  int n_streams, family;
+
   g_return_if_fail (caps);
   g_return_if_fail (headers && !*headers);
+  g_return_if_fail (GST_BUFFER_SIZE (buf1) >= 19);
+
+  /* work out the number of streams */
+  family = GST_BUFFER_DATA (buf1)[18];
+  if (family == 0) {
+    n_streams = 1;
+  } else {
+    /* only included in the header for family > 0 */
+    g_return_if_fail (GST_BUFFER_SIZE (buf1) >= 20);
+    n_streams = GST_BUFFER_DATA (buf1)[19];
+  }
 
   /* mark and put on caps */
-  *caps = gst_caps_from_string ("audio/x-opus");
+  *caps =
+      gst_caps_new_simple ("audio/x-opus", "streams", G_TYPE_INT, n_streams,
+      NULL);
   *caps = _gst_caps_set_buffer_array (*caps, "streamheader", buf1, buf2, NULL);
 
   *headers = g_slist_prepend (*headers, buf2);
index f3706cb..542031f 100644 (file)
@@ -58,7 +58,7 @@ static GstStaticPadTemplate opus_parse_sink_factory =
 GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-opus")
+    GST_STATIC_CAPS ("audio/x-opus, streams = (int) [ 1, 255 ]")
     );
 
 G_DEFINE_TYPE (GstOpusParse, gst_opus_parse, GST_TYPE_BASE_PARSE);