diff options
author | Tim-Philipp Müller <tim@centricular.com> | 2016-02-17 15:20:47 +0000 |
---|---|---|
committer | Tim-Philipp Müller <tim@centricular.com> | 2016-02-25 22:56:38 +0000 |
commit | a50e4bcadffe4b815d0754f68e240a3aa20556eb (patch) | |
tree | 28da79544d0b56677a2f6db21b8bc0b7290948d0 | |
parent | 35e00becfe63f2d726e66f92145cbf6a2f3cae87 (diff) | |
download | gstreamer-plugins-bad-a50e4bcadffe4b815d0754f68e240a3aa20556eb.tar.gz |
opus: remove Opus RTP elements, they have moved to -good
https://bugzilla.gnome.org/show_bug.cgi?id=756282
-rw-r--r-- | docs/plugins/gst-plugins-bad-plugins-docs.sgml | 2 | ||||
-rw-r--r-- | docs/plugins/gst-plugins-bad-plugins-sections.txt | 26 | ||||
-rw-r--r-- | docs/plugins/gst-plugins-bad-plugins.hierarchy | 3 | ||||
-rw-r--r-- | docs/plugins/inspect/plugin-opus.xml | 48 | ||||
-rw-r--r-- | ext/opus/Makefile.am | 6 | ||||
-rw-r--r-- | ext/opus/gstopus.c | 11 | ||||
-rw-r--r-- | ext/opus/gstrtpopusdepay.c | 175 | ||||
-rw-r--r-- | ext/opus/gstrtpopusdepay.h | 57 | ||||
-rw-r--r-- | ext/opus/gstrtpopuspay.c | 278 | ||||
-rw-r--r-- | ext/opus/gstrtpopuspay.h | 58 |
10 files changed, 6 insertions, 658 deletions
diff --git a/docs/plugins/gst-plugins-bad-plugins-docs.sgml b/docs/plugins/gst-plugins-bad-plugins-docs.sgml index 4d7fc353a..57dac6418 100644 --- a/docs/plugins/gst-plugins-bad-plugins-docs.sgml +++ b/docs/plugins/gst-plugins-bad-plugins-docs.sgml @@ -76,8 +76,6 @@ <xi:include href="xml/element-opusdec.xml" /> <xi:include href="xml/element-opusenc.xml" /> <xi:include href="xml/element-opusparse.xml" /> - <xi:include href="xml/element-rtpopuspay.xml" /> - <xi:include href="xml/element-rtpopusdepay.xml" /> <xi:include href="xml/element-pcapparse.xml" /> <xi:include href="xml/element-pinch.xml" /> <xi:include href="xml/element-pyramidsegment.xml" /> diff --git a/docs/plugins/gst-plugins-bad-plugins-sections.txt b/docs/plugins/gst-plugins-bad-plugins-sections.txt index 17f74a612..3b47c167f 100644 --- a/docs/plugins/gst-plugins-bad-plugins-sections.txt +++ b/docs/plugins/gst-plugins-bad-plugins-sections.txt @@ -1141,32 +1141,6 @@ GST_IS_OPUS_PARSE GST_IS_OPUS_PARSE_CLASS </SECTION> -<FILE>element-rtpopusdepay</FILE> -<TITLE>rtpopusdepay</TITLE> -GstRTPOpusDepay -<SUBSECTION Standard> -GstRTPOpusDepayClass -gst_rtp_opus_depay_get_type -GST_TYPE_RTP_OPUS_DEPAY -GST_RTP_OPUS_DEPAY -GST_RTP_OPUS_DEPAY_CLASS -GST_IS_RTP_OPUS_DEPAY -GST_IS_RTP_OPUS_DEPAY_CLASS -</SECTION> - -<FILE>element-rtpopuspay</FILE> -<TITLE>rtpopuspay</TITLE> -GstRtpOPUSPay -<SUBSECTION Standard> -GstRtpOPUSPayClass -gst_rtp_opus_pay_get_type -GST_TYPE_RTP_OPUS_PAY -GST_RTP_OPUS_PAY -GST_RTP_OPUS_PAY_CLASS -GST_IS_RTP_OPUS_PAY -GST_IS_RTP_OPUS_PAY_CLASS -</SECTION> - <SECTION> <FILE>element-pcapparse</FILE> <TITLE>pcapparse</TITLE> diff --git a/docs/plugins/gst-plugins-bad-plugins.hierarchy b/docs/plugins/gst-plugins-bad-plugins.hierarchy index c43c7b792..2350f52a5 100644 --- a/docs/plugins/gst-plugins-bad-plugins.hierarchy +++ b/docs/plugins/gst-plugins-bad-plugins.hierarchy @@ -303,11 +303,8 @@ GObject GstNetSim GstPcapParse GstPitch - GstRTPBaseDepayload - GstRTPOpusDepay GstRTPBasePayload GstRtpAsfPay - GstRtpOPUSPay GstRawParse GstAudioParse GstVideoParse diff --git a/docs/plugins/inspect/plugin-opus.xml b/docs/plugins/inspect/plugin-opus.xml index 36542b430..7f9053a87 100644 --- a/docs/plugins/inspect/plugin-opus.xml +++ b/docs/plugins/inspect/plugin-opus.xml @@ -3,10 +3,10 @@ <description>OPUS plugin library</description> <filename>../../ext/opus/.libs/libgstopus.so</filename> <basename>libgstopus.so</basename> - <version>1.7.2</version> + <version>1.7.2.1</version> <license>LGPL</license> <source>gst-plugins-bad</source> - <package>GStreamer Bad Plug-ins source release</package> + <package>GStreamer Bad Plug-ins git</package> <origin>Unknown package origin</origin> <elements> <element> @@ -68,49 +68,7 @@ <name>src</name> <direction>source</direction> <presence>always</presence> - <details>audio/x-opus, framed=(boolean)true</details> - </caps> - </pads> - </element> - <element> - <name>rtpopusdepay</name> - <longname>RTP Opus packet depayloader</longname> - <class>Codec/Depayloader/Network/RTP</class> - <description>Extracts Opus audio from RTP packets</description> - <author>Danilo Cesar Lemes de Paula <danilo.cesar@collabora.co.uk></author> - <pads> - <caps> - <name>sink</name> - <direction>sink</direction> - <presence>always</presence> - <details>application/x-rtp, media=(string)audio, payload=(int)[ 96, 127 ], clock-rate=(int)48000, encoding-name=(string){ OPUS, X-GST-OPUS-DRAFT-SPITTKA-00 }</details> - </caps> - <caps> - <name>src</name> - <direction>source</direction> - <presence>always</presence> - <details>audio/x-opus, channel-mapping-family=(int)0</details> - </caps> - </pads> - </element> - <element> - <name>rtpopuspay</name> - <longname>RTP Opus payloader</longname> - <class>Codec/Payloader/Network/RTP</class> - <description>Puts Opus audio in RTP packets</description> - <author>Danilo Cesar Lemes de Paula <danilo.cesar@collabora.co.uk></author> - <pads> - <caps> - <name>sink</name> - <direction>sink</direction> - <presence>always</presence> - <details>audio/x-opus, channels=(int)[ 1, 2 ], channel-mapping-family=(int)0</details> - </caps> - <caps> - <name>src</name> - <direction>source</direction> - <presence>always</presence> - <details>application/x-rtp, media=(string)audio, payload=(int)[ 96, 127 ], clock-rate=(int)48000, encoding-params=(string)2, encoding-name=(string){ OPUS, X-GST-OPUS-DRAFT-SPITTKA-00 }</details> + <details>audio/x-opus</details> </caps> </pads> </element> diff --git a/ext/opus/Makefile.am b/ext/opus/Makefile.am index c64369252..aa0d4388e 100644 --- a/ext/opus/Makefile.am +++ b/ext/opus/Makefile.am @@ -1,6 +1,6 @@ plugin_LTLIBRARIES = libgstopus.la -libgstopus_la_SOURCES = gstopus.c gstopusdec.c gstopusenc.c gstopusparse.c gstopusheader.c gstopuscommon.c gstrtpopuspay.c gstrtpopusdepay.c +libgstopus_la_SOURCES = gstopus.c gstopusdec.c gstopusenc.c gstopusparse.c gstopusheader.c gstopuscommon.c libgstopus_la_CFLAGS = \ -DGST_USE_UNSTABLE_API \ $(GST_PLUGINS_BAD_CFLAGS) \ @@ -9,7 +9,7 @@ libgstopus_la_CFLAGS = \ $(OPUS_CFLAGS) libgstopus_la_LIBADD = \ $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) \ - -lgsttag-$(GST_API_VERSION) -lgstrtp-$(GST_API_VERSION) \ + -lgsttag-$(GST_API_VERSION) \ -lgstpbutils-$(GST_API_VERSION) \ $(GST_BASE_LIBS) \ $(GST_LIBS) \ @@ -17,4 +17,4 @@ libgstopus_la_LIBADD = \ libgstopus_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) $(LIBM) libgstopus_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) -noinst_HEADERS = gstopusenc.h gstopusdec.h gstopusparse.h gstopusheader.h gstopuscommon.h gstrtpopuspay.h gstrtpopusdepay.h +noinst_HEADERS = gstopusenc.h gstopusdec.h gstopusparse.h gstopusheader.h gstopuscommon.h diff --git a/ext/opus/gstopus.c b/ext/opus/gstopus.c index a3427b284..63d50ef3e 100644 --- a/ext/opus/gstopus.c +++ b/ext/opus/gstopus.c @@ -25,9 +25,6 @@ #include "gstopusenc.h" #include "gstopusparse.h" -#include "gstrtpopuspay.h" -#include "gstrtpopusdepay.h" - #include <gst/tag/tag.h> static gboolean @@ -46,14 +43,6 @@ plugin_init (GstPlugin * plugin) GST_TYPE_OPUS_PARSE)) return FALSE; - if (!gst_element_register (plugin, "rtpopusdepay", GST_RANK_SECONDARY, - GST_TYPE_RTP_OPUS_DEPAY)) - return FALSE; - - if (!gst_element_register (plugin, "rtpopuspay", GST_RANK_SECONDARY, - GST_TYPE_RTP_OPUS_PAY)) - return FALSE; - gst_tag_register_musicbrainz_tags (); return TRUE; diff --git a/ext/opus/gstrtpopusdepay.c b/ext/opus/gstrtpopusdepay.c deleted file mode 100644 index 8152cd57f..000000000 --- a/ext/opus/gstrtpopusdepay.c +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Opus Depayloader Gst Element - * - * @author: Danilo Cesar Lemes de Paula <danilo.cesar@collabora.co.uk> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include <string.h> -#include <stdlib.h> -#include <gst/rtp/gstrtpbuffer.h> -#include <gst/audio/audio.h> -#include "gstrtpopusdepay.h" - -GST_DEBUG_CATEGORY_STATIC (rtpopusdepay_debug); -#define GST_CAT_DEFAULT (rtpopusdepay_debug) - -static GstStaticPadTemplate gst_rtp_opus_depay_sink_template = -GST_STATIC_PAD_TEMPLATE ("sink", - GST_PAD_SINK, - GST_PAD_ALWAYS, - GST_STATIC_CAPS ("application/x-rtp, " - "media = (string) \"audio\", " - "payload = (int) " GST_RTP_PAYLOAD_DYNAMIC_STRING "," - "clock-rate = (int) 48000, " - "encoding-name = (string) { \"OPUS\", \"X-GST-OPUS-DRAFT-SPITTKA-00\" }") - ); - -static GstStaticPadTemplate gst_rtp_opus_depay_src_template = -GST_STATIC_PAD_TEMPLATE ("src", - GST_PAD_SRC, - GST_PAD_ALWAYS, - GST_STATIC_CAPS ("audio/x-opus, channel-mapping-family = (int) 0") - ); - -static GstBuffer *gst_rtp_opus_depay_process (GstRTPBaseDepayload * depayload, - GstBuffer * buf); -static gboolean gst_rtp_opus_depay_setcaps (GstRTPBaseDepayload * depayload, - GstCaps * caps); - -G_DEFINE_TYPE (GstRTPOpusDepay, gst_rtp_opus_depay, - GST_TYPE_RTP_BASE_DEPAYLOAD); - -static void -gst_rtp_opus_depay_class_init (GstRTPOpusDepayClass * klass) -{ - GstRTPBaseDepayloadClass *gstbasertpdepayload_class; - GstElementClass *element_class; - - element_class = GST_ELEMENT_CLASS (klass); - gstbasertpdepayload_class = (GstRTPBaseDepayloadClass *) klass; - - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&gst_rtp_opus_depay_src_template)); - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&gst_rtp_opus_depay_sink_template)); - gst_element_class_set_static_metadata (element_class, - "RTP Opus packet depayloader", "Codec/Depayloader/Network/RTP", - "Extracts Opus audio from RTP packets", - "Danilo Cesar Lemes de Paula <danilo.cesar@collabora.co.uk>"); - - gstbasertpdepayload_class->process = gst_rtp_opus_depay_process; - gstbasertpdepayload_class->set_caps = gst_rtp_opus_depay_setcaps; - - GST_DEBUG_CATEGORY_INIT (rtpopusdepay_debug, "rtpopusdepay", 0, - "Opus RTP Depayloader"); -} - -static void -gst_rtp_opus_depay_init (GstRTPOpusDepay * rtpopusdepay) -{ - -} - -static gboolean -gst_rtp_opus_depay_setcaps (GstRTPBaseDepayload * depayload, GstCaps * caps) -{ - GstCaps *srccaps; - GstStructure *s; - gboolean ret; - const gchar *sprop_stereo, *sprop_maxcapturerate; - - srccaps = - gst_caps_new_simple ("audio/x-opus", "channel-mapping-family", G_TYPE_INT, - 0, NULL); - - s = gst_caps_get_structure (caps, 0); - if ((sprop_stereo = gst_structure_get_string (s, "sprop-stereo"))) { - if (strcmp (sprop_stereo, "0") == 0) - gst_caps_set_simple (srccaps, "channels", G_TYPE_INT, 1, NULL); - else if (strcmp (sprop_stereo, "1") == 0) - gst_caps_set_simple (srccaps, "channels", G_TYPE_INT, 2, NULL); - else - GST_WARNING_OBJECT (depayload, "Unknown sprop-stereo value '%s'", - sprop_stereo); - } - - if ((sprop_maxcapturerate = - gst_structure_get_string (s, "sprop-maxcapturerate"))) { - gulong rate; - gchar *tailptr; - - rate = strtoul (sprop_maxcapturerate, &tailptr, 10); - if (rate > INT_MAX || *tailptr != '\0') { - GST_WARNING_OBJECT (depayload, - "Failed to parse sprop-maxcapturerate value '%s'", - sprop_maxcapturerate); - } else { - gst_caps_set_simple (srccaps, "rate", G_TYPE_INT, rate, NULL); - } - } - - ret = gst_pad_set_caps (GST_RTP_BASE_DEPAYLOAD_SRCPAD (depayload), srccaps); - - GST_DEBUG_OBJECT (depayload, - "set caps on source: %" GST_PTR_FORMAT " (ret=%d)", srccaps, ret); - gst_caps_unref (srccaps); - - depayload->clock_rate = 48000; - - return ret; -} - -static gboolean -foreach_metadata (GstBuffer * inbuf, GstMeta ** meta, gpointer user_data) -{ - GstRTPOpusDepay *depay = user_data; - const GstMetaInfo *info = (*meta)->info; - const gchar *const *tags = gst_meta_api_type_get_tags (info->api); - - if (!tags || (g_strv_length ((gchar **) tags) == 1 - && gst_meta_api_type_has_tag (info->api, - g_quark_from_string (GST_META_TAG_AUDIO_STR)))) { - GST_DEBUG_OBJECT (depay, "keeping metadata %s", g_type_name (info->api)); - } else { - GST_DEBUG_OBJECT (depay, "dropping metadata %s", g_type_name (info->api)); - *meta = NULL; - } - - return TRUE; -} - -static GstBuffer * -gst_rtp_opus_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf) -{ - GstBuffer *outbuf; - GstRTPBuffer rtpbuf = { NULL, }; - - gst_rtp_buffer_map (buf, GST_MAP_READ, &rtpbuf); - outbuf = gst_rtp_buffer_get_payload_buffer (&rtpbuf); - gst_rtp_buffer_unmap (&rtpbuf); - - outbuf = gst_buffer_make_writable (outbuf); - /* Filter away all metas that are not sensible to copy */ - gst_buffer_foreach_meta (outbuf, foreach_metadata, depayload); - - return outbuf; -} diff --git a/ext/opus/gstrtpopusdepay.h b/ext/opus/gstrtpopusdepay.h deleted file mode 100644 index 7890eb19d..000000000 --- a/ext/opus/gstrtpopusdepay.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Opus Depayloader Gst Element - * - * @author: Danilo Cesar Lemes de Paula <danilo.eu@gmail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#ifndef __GST_RTP_OPUS_DEPAY_H__ -#define __GST_RTP_OPUS_DEPAY_H__ - -#include <gst/gst.h> -#include <gst/rtp/gstrtpbasedepayload.h> - -G_BEGIN_DECLS typedef struct _GstRTPOpusDepay GstRTPOpusDepay; -typedef struct _GstRTPOpusDepayClass GstRTPOpusDepayClass; - -#define GST_TYPE_RTP_OPUS_DEPAY \ - (gst_rtp_opus_depay_get_type()) -#define GST_RTP_OPUS_DEPAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTP_OPUS_DEPAY,GstRTPOpusDepay)) -#define GST_RTP_OPUS_DEPAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTP_OPUS_DEPAY,GstRTPOpusDepayClass)) -#define GST_IS_RTP_OPUS_DEPAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTP_OPUS_DEPAY)) -#define GST_IS_RTP_OPUS_DEPAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTP_OPUS_DEPAY)) - - -struct _GstRTPOpusDepay -{ - GstRTPBaseDepayload depayload; - -}; - -struct _GstRTPOpusDepayClass -{ - GstRTPBaseDepayloadClass parent_class; -}; - -GType gst_rtp_opus_depay_get_type (void); - -G_END_DECLS -#endif /* __GST_RTP_OPUS_DEPAY_H__ */ diff --git a/ext/opus/gstrtpopuspay.c b/ext/opus/gstrtpopuspay.c deleted file mode 100644 index 5038028b1..000000000 --- a/ext/opus/gstrtpopuspay.c +++ /dev/null @@ -1,278 +0,0 @@ -/* - * Opus Payloader Gst Element - * - * @author: Danilo Cesar Lemes de Paula <danilo.cesar@collabora.co.uk> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include <string.h> - -#include <gst/rtp/gstrtpbuffer.h> -#include <gst/audio/audio.h> - -#include "gstrtpopuspay.h" - -GST_DEBUG_CATEGORY_STATIC (rtpopuspay_debug); -#define GST_CAT_DEFAULT (rtpopuspay_debug) - - -static GstStaticPadTemplate gst_rtp_opus_pay_sink_template = -GST_STATIC_PAD_TEMPLATE ("sink", - GST_PAD_SINK, - GST_PAD_ALWAYS, - GST_STATIC_CAPS - ("audio/x-opus, channels = (int) [1, 2], channel-mapping-family = (int) 0") - ); - -static GstStaticPadTemplate gst_rtp_opus_pay_src_template = -GST_STATIC_PAD_TEMPLATE ("src", - GST_PAD_SRC, - GST_PAD_ALWAYS, - GST_STATIC_CAPS ("application/x-rtp, " - "media = (string) \"audio\", " - "payload = (int) " GST_RTP_PAYLOAD_DYNAMIC_STRING ", " - "clock-rate = (int) 48000, " - "encoding-params = (string) \"2\", " - "encoding-name = (string) { \"OPUS\", \"X-GST-OPUS-DRAFT-SPITTKA-00\" }") - ); - -static gboolean gst_rtp_opus_pay_setcaps (GstRTPBasePayload * payload, - GstCaps * caps); -static GstCaps *gst_rtp_opus_pay_getcaps (GstRTPBasePayload * payload, - GstPad * pad, GstCaps * filter); -static GstFlowReturn gst_rtp_opus_pay_handle_buffer (GstRTPBasePayload * - payload, GstBuffer * buffer); - -G_DEFINE_TYPE (GstRtpOPUSPay, gst_rtp_opus_pay, GST_TYPE_RTP_BASE_PAYLOAD); - -static void -gst_rtp_opus_pay_class_init (GstRtpOPUSPayClass * klass) -{ - GstRTPBasePayloadClass *gstbasertppayload_class; - GstElementClass *element_class; - - gstbasertppayload_class = (GstRTPBasePayloadClass *) klass; - element_class = GST_ELEMENT_CLASS (klass); - - gstbasertppayload_class->set_caps = gst_rtp_opus_pay_setcaps; - gstbasertppayload_class->get_caps = gst_rtp_opus_pay_getcaps; - gstbasertppayload_class->handle_buffer = gst_rtp_opus_pay_handle_buffer; - - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&gst_rtp_opus_pay_src_template)); - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&gst_rtp_opus_pay_sink_template)); - - gst_element_class_set_static_metadata (element_class, - "RTP Opus payloader", - "Codec/Payloader/Network/RTP", - "Puts Opus audio in RTP packets", - "Danilo Cesar Lemes de Paula <danilo.cesar@collabora.co.uk>"); - - GST_DEBUG_CATEGORY_INIT (rtpopuspay_debug, "rtpopuspay", 0, - "Opus RTP Payloader"); -} - -static void -gst_rtp_opus_pay_init (GstRtpOPUSPay * rtpopuspay) -{ -} - -static gboolean -gst_rtp_opus_pay_setcaps (GstRTPBasePayload * payload, GstCaps * caps) -{ - gboolean res; - GstCaps *src_caps; - GstStructure *s; - char *encoding_name; - gint channels, rate; - const char *sprop_stereo = NULL; - char *sprop_maxcapturerate = NULL; - - src_caps = gst_pad_get_allowed_caps (GST_RTP_BASE_PAYLOAD_SRCPAD (payload)); - if (src_caps) { - src_caps = gst_caps_make_writable (src_caps); - src_caps = gst_caps_truncate (src_caps); - s = gst_caps_get_structure (src_caps, 0); - gst_structure_fixate_field_string (s, "encoding-name", "OPUS"); - encoding_name = g_strdup (gst_structure_get_string (s, "encoding-name")); - gst_caps_unref (src_caps); - } else { - encoding_name = g_strdup ("X-GST-OPUS-DRAFT-SPITTKA-00"); - } - - s = gst_caps_get_structure (caps, 0); - if (gst_structure_get_int (s, "channels", &channels)) { - if (channels > 2) { - GST_ERROR_OBJECT (payload, - "More than 2 channels with channel-mapping-family=0 is invalid"); - return FALSE; - } else if (channels == 2) { - sprop_stereo = "1"; - } else { - sprop_stereo = "0"; - } - } - - if (gst_structure_get_int (s, "rate", &rate)) { - sprop_maxcapturerate = g_strdup_printf ("%d", rate); - } - - gst_rtp_base_payload_set_options (payload, "audio", FALSE, - encoding_name, 48000); - g_free (encoding_name); - - if (sprop_maxcapturerate && sprop_stereo) { - res = - gst_rtp_base_payload_set_outcaps (payload, "sprop-maxcapturerate", - G_TYPE_STRING, sprop_maxcapturerate, "sprop-stereo", G_TYPE_STRING, - sprop_stereo, NULL); - } else if (sprop_maxcapturerate) { - res = - gst_rtp_base_payload_set_outcaps (payload, "sprop-maxcapturerate", - G_TYPE_STRING, sprop_maxcapturerate, NULL); - } else if (sprop_stereo) { - res = - gst_rtp_base_payload_set_outcaps (payload, "sprop-stereo", - G_TYPE_STRING, sprop_stereo, NULL); - } else { - res = gst_rtp_base_payload_set_outcaps (payload, NULL); - } - - g_free (sprop_maxcapturerate); - - return res; -} - -typedef struct -{ - GstRtpOPUSPay *pay; - GstBuffer *outbuf; -} CopyMetaData; - -static gboolean -foreach_metadata (GstBuffer * inbuf, GstMeta ** meta, gpointer user_data) -{ - CopyMetaData *data = user_data; - GstRtpOPUSPay *pay = data->pay; - GstBuffer *outbuf = data->outbuf; - const GstMetaInfo *info = (*meta)->info; - const gchar *const *tags = gst_meta_api_type_get_tags (info->api); - - if (!tags || (g_strv_length ((gchar **) tags) == 1 - && gst_meta_api_type_has_tag (info->api, - g_quark_from_string (GST_META_TAG_AUDIO_STR)))) { - GstMetaTransformCopy copy_data = { FALSE, 0, -1 }; - GST_DEBUG_OBJECT (pay, "copy metadata %s", g_type_name (info->api)); - /* simply copy then */ - info->transform_func (outbuf, *meta, inbuf, - _gst_meta_transform_copy, ©_data); - } else { - GST_DEBUG_OBJECT (pay, "not copying metadata %s", g_type_name (info->api)); - } - - return TRUE; -} - -static GstFlowReturn -gst_rtp_opus_pay_handle_buffer (GstRTPBasePayload * basepayload, - GstBuffer * buffer) -{ - GstBuffer *outbuf; - GstClockTime pts, dts, duration; - CopyMetaData data; - - pts = GST_BUFFER_PTS (buffer); - dts = GST_BUFFER_DTS (buffer); - duration = GST_BUFFER_DURATION (buffer); - - outbuf = gst_rtp_buffer_new_allocate (0, 0, 0); - data.pay = GST_RTP_OPUS_PAY (basepayload); - data.outbuf = outbuf; - gst_buffer_foreach_meta (buffer, foreach_metadata, &data); - outbuf = gst_buffer_append (outbuf, buffer); - - GST_BUFFER_PTS (outbuf) = pts; - GST_BUFFER_DTS (outbuf) = dts; - GST_BUFFER_DURATION (outbuf) = duration; - - /* Push out */ - return gst_rtp_base_payload_push (basepayload, outbuf); -} - -static GstCaps * -gst_rtp_opus_pay_getcaps (GstRTPBasePayload * payload, - GstPad * pad, GstCaps * filter) -{ - GstCaps *caps, *peercaps, *tcaps; - GstStructure *s; - const gchar *stereo; - - if (pad == GST_RTP_BASE_PAYLOAD_SRCPAD (payload)) - return - GST_RTP_BASE_PAYLOAD_CLASS (gst_rtp_opus_pay_parent_class)->get_caps - (payload, pad, filter); - - tcaps = gst_pad_get_pad_template_caps (GST_RTP_BASE_PAYLOAD_SRCPAD (payload)); - peercaps = gst_pad_peer_query_caps (GST_RTP_BASE_PAYLOAD_SRCPAD (payload), - tcaps); - gst_caps_unref (tcaps); - if (!peercaps) - return - GST_RTP_BASE_PAYLOAD_CLASS (gst_rtp_opus_pay_parent_class)->get_caps - (payload, pad, filter); - - if (gst_caps_is_empty (peercaps)) - return peercaps; - - caps = gst_pad_get_pad_template_caps (GST_RTP_BASE_PAYLOAD_SINKPAD (payload)); - - s = gst_caps_get_structure (peercaps, 0); - stereo = gst_structure_get_string (s, "stereo"); - if (stereo != NULL) { - caps = gst_caps_make_writable (caps); - - if (!strcmp (stereo, "1")) { - GstCaps *caps2 = gst_caps_copy (caps); - - gst_caps_set_simple (caps, "channels", G_TYPE_INT, 2, NULL); - gst_caps_set_simple (caps2, "channels", G_TYPE_INT, 1, NULL); - caps = gst_caps_merge (caps, caps2); - } else if (!strcmp (stereo, "0")) { - GstCaps *caps2 = gst_caps_copy (caps); - - gst_caps_set_simple (caps, "channels", G_TYPE_INT, 1, NULL); - gst_caps_set_simple (caps2, "channels", G_TYPE_INT, 2, NULL); - caps = gst_caps_merge (caps, caps2); - } - } - gst_caps_unref (peercaps); - - if (filter) { - GstCaps *tmp = gst_caps_intersect_full (caps, filter, - GST_CAPS_INTERSECT_FIRST); - gst_caps_unref (caps); - caps = tmp; - } - - GST_DEBUG_OBJECT (payload, "Returning caps: %" GST_PTR_FORMAT, caps); - return caps; -} diff --git a/ext/opus/gstrtpopuspay.h b/ext/opus/gstrtpopuspay.h deleted file mode 100644 index e21bbe3c3..000000000 --- a/ext/opus/gstrtpopuspay.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Opus Payloader Gst Element - * - * @author: Danilo Cesar Lemes de Paula <danilo.eu@gmail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#ifndef __GST_RTP_OPUS_PAY_H__ -#define __GST_RTP_OPUS_PAY_H__ - -#include <gst/gst.h> -#include <gst/rtp/gstrtpbasepayload.h> - -G_BEGIN_DECLS - -#define GST_TYPE_RTP_OPUS_PAY \ - (gst_rtp_opus_pay_get_type()) -#define GST_RTP_OPUS_PAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTP_OPUS_PAY,GstRtpOPUSPay)) -#define GST_RTP_OPUS_PAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTP_OPUS_PAY,GstRtpOPUSPayClass)) -#define GST_IS_RTP_OPUS_PAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTP_OPUS_PAY)) -#define GST_IS_RTP_OPUS_PAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTP_OPUS_PAY)) - -typedef struct _GstRtpOPUSPay GstRtpOPUSPay; -typedef struct _GstRtpOPUSPayClass GstRtpOPUSPayClass; - -struct _GstRtpOPUSPay -{ - GstRTPBasePayload payload; -}; - -struct _GstRtpOPUSPayClass -{ - GstRTPBasePayloadClass parent_class; -}; - -GType gst_rtp_opus_pay_get_type (void); - -G_END_DECLS - -#endif /* __GST_RTP_OPUS_PAY_H__ */ |