From 554c64ae95dbd86713bab48a5059ba59c6346c85 Mon Sep 17 00:00:00 2001 From: Vincent Penquerc'h Date: Thu, 8 Dec 2011 19:47:55 +0000 Subject: [PATCH] opus: include streams count in caps https://bugzilla.gnome.org/show_bug.cgi?id=665078 --- ext/opus/gstopusenc.c | 2 +- ext/opus/gstopusheader.c | 17 ++++++++++++++++- ext/opus/gstopusparse.c | 2 +- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/ext/opus/gstopusenc.c b/ext/opus/gstopusenc.c index e7d6842a12..502f4a9d94 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 7f49e47113..185c85ef18 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 f3706cb72e..542031f3b8 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);