summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorVincent Penquerc'h <vincent.penquerch@collabora.co.uk>2011-12-08 19:47:55 +0000
committerVincent Penquerc'h <vincent.penquerch@collabora.co.uk>2011-12-09 15:04:20 +0000
commit554c64ae95dbd86713bab48a5059ba59c6346c85 (patch)
tree1329e4625e53401bdf5d33e226e0ada59f14cbdb /ext
parentb48b3c2c86b5017502c14e32822bd19987139a07 (diff)
downloadgstreamer-plugins-bad-554c64ae95dbd86713bab48a5059ba59c6346c85.tar.gz
opus: include streams count in caps
https://bugzilla.gnome.org/show_bug.cgi?id=665078
Diffstat (limited to 'ext')
-rw-r--r--ext/opus/gstopusenc.c2
-rw-r--r--ext/opus/gstopusheader.c17
-rw-r--r--ext/opus/gstopusparse.c2
3 files changed, 18 insertions, 3 deletions
diff --git a/ext/opus/gstopusenc.c b/ext/opus/gstopusenc.c
index e7d6842a1..502f4a9d9 100644
--- a/ext/opus/gstopusenc.c
+++ b/ext/opus/gstopusenc.c
@@ -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
diff --git a/ext/opus/gstopusheader.c b/ext/opus/gstopusheader.c
index 7f49e4711..185c85ef1 100644
--- a/ext/opus/gstopusheader.c
+++ b/ext/opus/gstopusheader.c
@@ -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);
diff --git a/ext/opus/gstopusparse.c b/ext/opus/gstopusparse.c
index f3706cb72..542031f3b 100644
--- a/ext/opus/gstopusparse.c
+++ b/ext/opus/gstopusparse.c
@@ -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);