diff options
Diffstat (limited to 'ext')
-rw-r--r-- | ext/webrtc/gstwebrtcbin.c | 12 | ||||
-rw-r--r-- | ext/webrtc/gstwebrtcbin.h | 3 | ||||
-rw-r--r-- | ext/webrtc/meson.build | 2 | ||||
-rw-r--r-- | ext/webrtc/sctptransport.h | 70 | ||||
-rw-r--r-- | ext/webrtc/webrtcdatachannel.c | 6 | ||||
-rw-r--r-- | ext/webrtc/webrtcdatachannel.h | 6 | ||||
-rw-r--r-- | ext/webrtc/webrtcsctptransport.c (renamed from ext/webrtc/sctptransport.c) | 113 | ||||
-rw-r--r-- | ext/webrtc/webrtcsctptransport.h | 74 |
8 files changed, 128 insertions, 158 deletions
diff --git a/ext/webrtc/gstwebrtcbin.c b/ext/webrtc/gstwebrtcbin.c index c6855fc7f..0e585bb93 100644 --- a/ext/webrtc/gstwebrtcbin.c +++ b/ext/webrtc/gstwebrtcbin.c @@ -29,7 +29,7 @@ #include "webrtcsdp.h" #include "webrtctransceiver.h" #include "webrtcdatachannel.h" -#include "sctptransport.h" +#include "webrtcsctptransport.h" #include "gst/webrtc/webrtc-priv.h" @@ -1986,7 +1986,7 @@ gst_webrtc_bin_update_sctp_priority (GstWebRTCBin * webrtc) /* If one stream has a non-default priority, then everyone else does too */ gst_webrtc_bin_attach_tos (webrtc); - gst_webrtc_sctp_transport_set_priority (webrtc->priv->sctp_transport, + webrtc_sctp_transport_set_priority (webrtc->priv->sctp_transport, sctp_priority); } @@ -2201,7 +2201,7 @@ _on_sctpdec_pad_added (GstElement * sctpdec, GstPad * pad, } static void -_on_sctp_state_notify (GstWebRTCSCTPTransport * sctp, GParamSpec * pspec, +_on_sctp_state_notify (WebRTCSCTPTransport * sctp, GParamSpec * pspec, GstWebRTCBin * webrtc) { GstWebRTCSCTPTransportState state; @@ -2238,7 +2238,7 @@ _sctp_check_dtls_state_task (GstWebRTCBin * webrtc, gpointer unused) TransportStream *stream; GstWebRTCDTLSTransport *transport; GstWebRTCDTLSTransportState dtls_state; - GstWebRTCSCTPTransport *sctp_transport; + WebRTCSCTPTransport *sctp_transport; stream = webrtc->priv->data_channel_transport; transport = stream->transport; @@ -2326,7 +2326,7 @@ _get_or_create_data_channel_transports (GstWebRTCBin * webrtc, guint session_id) { if (!webrtc->priv->data_channel_transport) { TransportStream *stream; - GstWebRTCSCTPTransport *sctp_transport; + WebRTCSCTPTransport *sctp_transport; stream = _find_transport_for_session (webrtc, session_id); @@ -2336,7 +2336,7 @@ _get_or_create_data_channel_transports (GstWebRTCBin * webrtc, guint session_id) webrtc->priv->data_channel_transport = stream; if (!(sctp_transport = webrtc->priv->sctp_transport)) { - sctp_transport = gst_webrtc_sctp_transport_new (); + sctp_transport = webrtc_sctp_transport_new (); sctp_transport->transport = g_object_ref (webrtc->priv->data_channel_transport->transport); sctp_transport->webrtcbin = webrtc; diff --git a/ext/webrtc/gstwebrtcbin.h b/ext/webrtc/gstwebrtcbin.h index b180aa62f..e2ef991eb 100644 --- a/ext/webrtc/gstwebrtcbin.h +++ b/ext/webrtc/gstwebrtcbin.h @@ -24,6 +24,7 @@ #include "fwd.h" #include "gstwebrtcice.h" #include "transportstream.h" +#include "webrtcsctptransport.h" G_BEGIN_DECLS @@ -106,7 +107,7 @@ struct _GstWebRTCBinPrivate guint jb_latency; - GstWebRTCSCTPTransport *sctp_transport; + WebRTCSCTPTransport *sctp_transport; TransportStream *data_channel_transport; GstWebRTCICE *ice; diff --git a/ext/webrtc/meson.build b/ext/webrtc/meson.build index 05a3b97bd..1696d2aa6 100644 --- a/ext/webrtc/meson.build +++ b/ext/webrtc/meson.build @@ -4,7 +4,7 @@ webrtc_sources = [ 'gstwebrtcstats.c', 'icestream.c', 'nicetransport.c', - 'sctptransport.c', + 'webrtcsctptransport.c', 'gstwebrtcbin.c', 'transportreceivebin.c', 'transportsendbin.c', diff --git a/ext/webrtc/sctptransport.h b/ext/webrtc/sctptransport.h deleted file mode 100644 index 8a1466c18..000000000 --- a/ext/webrtc/sctptransport.h +++ /dev/null @@ -1,70 +0,0 @@ -/* GStreamer - * Copyright (C) 2018 Matthew Waters <matthew@centricular.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_WEBRTC_SCTP_TRANSPORT_H__ -#define __GST_WEBRTC_SCTP_TRANSPORT_H__ - -#include <gst/gst.h> -/* libnice */ -#include <agent.h> -#include <gst/webrtc/webrtc.h> -#include "gstwebrtcice.h" - -G_BEGIN_DECLS - -GType gst_webrtc_sctp_transport_get_type(void); -#define GST_TYPE_WEBRTC_SCTP_TRANSPORT (gst_webrtc_sctp_transport_get_type()) -#define GST_WEBRTC_SCTP_TRANSPORT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_WEBRTC_SCTP_TRANSPORT,GstWebRTCSCTPTransport)) -#define GST_IS_WEBRTC_SCTP_TRANSPORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_WEBRTC_SCTP_TRANSPORT)) -#define GST_WEBRTC_SCTP_TRANSPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass) ,GST_TYPE_WEBRTC_SCTP_TRANSPORT,GstWebRTCSCTPTransportClass)) -#define GST_IS_WEBRTC_SCTP_TRANSPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass) ,GST_TYPE_WEBRTC_SCTP_TRANSPORT)) -#define GST_WEBRTC_SCTP_TRANSPORT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj) ,GST_TYPE_WEBRTC_SCTP_TRANSPORT,GstWebRTCSCTPTransportClass)) - -struct _GstWebRTCSCTPTransport -{ - GstObject parent; - - GstWebRTCDTLSTransport *transport; - GstWebRTCSCTPTransportState state; - guint64 max_message_size; - guint max_channels; - - gboolean association_established; - - gulong sctpdec_block_id; - GstElement *sctpdec; - GstElement *sctpenc; - - GstWebRTCBin *webrtcbin; -}; - -struct _GstWebRTCSCTPTransportClass -{ - GstObjectClass parent_class; -}; - -GstWebRTCSCTPTransport * gst_webrtc_sctp_transport_new (void); - -void -gst_webrtc_sctp_transport_set_priority (GstWebRTCSCTPTransport *sctp, - GstWebRTCPriorityType priority); - -G_END_DECLS - -#endif /* __GST_WEBRTC_SCTP_TRANSPORT_H__ */ diff --git a/ext/webrtc/webrtcdatachannel.c b/ext/webrtc/webrtcdatachannel.c index 16b81d849..e3877f87b 100644 --- a/ext/webrtc/webrtcdatachannel.c +++ b/ext/webrtc/webrtcdatachannel.c @@ -356,7 +356,7 @@ _close_procedure (WebRTCDataChannel * channel, gpointer user_data) } static void -_on_sctp_stream_reset (GstWebRTCSCTPTransport * sctp, guint stream_id, +_on_sctp_stream_reset (WebRTCSCTPTransport * sctp, guint stream_id, WebRTCDataChannel * channel) { if (channel->parent.id == stream_id) { @@ -1003,7 +1003,7 @@ webrtc_data_channel_init (WebRTCDataChannel * channel) static void _data_channel_set_sctp_transport (WebRTCDataChannel * channel, - GstWebRTCSCTPTransport * sctp) + WebRTCSCTPTransport * sctp) { g_return_if_fail (GST_IS_WEBRTC_DATA_CHANNEL (channel)); g_return_if_fail (GST_IS_WEBRTC_SCTP_TRANSPORT (sctp)); @@ -1026,7 +1026,7 @@ _data_channel_set_sctp_transport (WebRTCDataChannel * channel, void webrtc_data_channel_link_to_sctp (WebRTCDataChannel * channel, - GstWebRTCSCTPTransport * sctp_transport) + WebRTCSCTPTransport * sctp_transport) { if (sctp_transport && !channel->sctp_transport) { gint id; diff --git a/ext/webrtc/webrtcdatachannel.h b/ext/webrtc/webrtcdatachannel.h index 463e6ce12..a0b38a7ad 100644 --- a/ext/webrtc/webrtcdatachannel.h +++ b/ext/webrtc/webrtcdatachannel.h @@ -24,7 +24,7 @@ #include <gst/webrtc/webrtc_fwd.h> #include <gst/webrtc/dtlstransport.h> #include <gst/webrtc/datachannel.h> -#include "sctptransport.h" +#include "webrtcsctptransport.h" #include "gst/webrtc/webrtc-priv.h" @@ -45,7 +45,7 @@ struct _WebRTCDataChannel { GstWebRTCDataChannel parent; - GstWebRTCSCTPTransport *sctp_transport; + WebRTCSCTPTransport *sctp_transport; GstElement *appsrc; GstElement *appsink; @@ -68,7 +68,7 @@ struct _WebRTCDataChannelClass void webrtc_data_channel_start_negotiation (WebRTCDataChannel *channel); G_GNUC_INTERNAL void webrtc_data_channel_link_to_sctp (WebRTCDataChannel *channel, - GstWebRTCSCTPTransport *sctp_transport); + WebRTCSCTPTransport *sctp_transport); G_END_DECLS diff --git a/ext/webrtc/sctptransport.c b/ext/webrtc/webrtcsctptransport.c index 845219800..c65dd1973 100644 --- a/ext/webrtc/sctptransport.c +++ b/ext/webrtc/webrtcsctptransport.c @@ -23,10 +23,10 @@ #include <stdio.h> -#include "sctptransport.h" +#include "webrtcsctptransport.h" #include "gstwebrtcbin.h" -#define GST_CAT_DEFAULT gst_webrtc_sctp_transport_debug +#define GST_CAT_DEFAULT webrtc_sctp_transport_debug GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT); enum @@ -45,18 +45,19 @@ enum PROP_MAX_CHANNELS, }; -static guint gst_webrtc_sctp_transport_signals[LAST_SIGNAL] = { 0 }; +static guint webrtc_sctp_transport_signals[LAST_SIGNAL] = { 0 }; -#define gst_webrtc_sctp_transport_parent_class parent_class -G_DEFINE_TYPE_WITH_CODE (GstWebRTCSCTPTransport, gst_webrtc_sctp_transport, - GST_TYPE_OBJECT, GST_DEBUG_CATEGORY_INIT (gst_webrtc_sctp_transport_debug, +#define webrtc_sctp_transport_parent_class parent_class +G_DEFINE_TYPE_WITH_CODE (WebRTCSCTPTransport, webrtc_sctp_transport, + GST_TYPE_WEBRTC_SCTP_TRANSPORT, + GST_DEBUG_CATEGORY_INIT (webrtc_sctp_transport_debug, "webrtcsctptransport", 0, "webrtcsctptransport");); -typedef void (*SCTPTask) (GstWebRTCSCTPTransport * sctp, gpointer user_data); +typedef void (*SCTPTask) (WebRTCSCTPTransport * sctp, gpointer user_data); struct task { - GstWebRTCSCTPTransport *sctp; + WebRTCSCTPTransport *sctp; SCTPTask func; gpointer user_data; GDestroyNotify notify; @@ -81,7 +82,7 @@ _free_task (struct task *task) } static void -_sctp_enqueue_task (GstWebRTCSCTPTransport * sctp, SCTPTask func, +_sctp_enqueue_task (WebRTCSCTPTransport * sctp, SCTPTask func, gpointer user_data, GDestroyNotify notify) { struct task *task = g_new0 (struct task, 1); @@ -97,17 +98,17 @@ _sctp_enqueue_task (GstWebRTCSCTPTransport * sctp, SCTPTask func, } static void -_emit_stream_reset (GstWebRTCSCTPTransport * sctp, gpointer user_data) +_emit_stream_reset (WebRTCSCTPTransport * sctp, gpointer user_data) { guint stream_id = GPOINTER_TO_UINT (user_data); g_signal_emit (sctp, - gst_webrtc_sctp_transport_signals[ON_STREAM_RESET_SIGNAL], 0, stream_id); + webrtc_sctp_transport_signals[ON_STREAM_RESET_SIGNAL], 0, stream_id); } static void _on_sctp_dec_pad_removed (GstElement * sctpdec, GstPad * pad, - GstWebRTCSCTPTransport * sctp) + WebRTCSCTPTransport * sctp) { guint stream_id; @@ -120,7 +121,7 @@ _on_sctp_dec_pad_removed (GstElement * sctpdec, GstPad * pad, static void _on_sctp_association_established (GstElement * sctpenc, gboolean established, - GstWebRTCSCTPTransport * sctp) + WebRTCSCTPTransport * sctp) { GST_OBJECT_LOCK (sctp); if (established) @@ -133,21 +134,8 @@ _on_sctp_association_established (GstElement * sctpenc, gboolean established, g_object_notify (G_OBJECT (sctp), "state"); } -static void -gst_webrtc_sctp_transport_set_property (GObject * object, guint prop_id, - const GValue * value, GParamSpec * pspec) -{ -// GstWebRTCSCTPTransport *sctp = GST_WEBRTC_SCTP_TRANSPORT (object); - - switch (prop_id) { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - void -gst_webrtc_sctp_transport_set_priority (GstWebRTCSCTPTransport * sctp, +webrtc_sctp_transport_set_priority (WebRTCSCTPTransport * sctp, GstWebRTCPriorityType priority) { GstPad *pad; @@ -161,10 +149,10 @@ gst_webrtc_sctp_transport_set_priority (GstWebRTCSCTPTransport * sctp, } static void -gst_webrtc_sctp_transport_get_property (GObject * object, guint prop_id, +webrtc_sctp_transport_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) { - GstWebRTCSCTPTransport *sctp = GST_WEBRTC_SCTP_TRANSPORT (object); + WebRTCSCTPTransport *sctp = WEBRTC_SCTP_TRANSPORT (object); switch (prop_id) { case PROP_TRANSPORT: @@ -186,9 +174,9 @@ gst_webrtc_sctp_transport_get_property (GObject * object, guint prop_id, } static void -gst_webrtc_sctp_transport_finalize (GObject * object) +webrtc_sctp_transport_finalize (GObject * object) { - GstWebRTCSCTPTransport *sctp = GST_WEBRTC_SCTP_TRANSPORT (object); + WebRTCSCTPTransport *sctp = WEBRTC_SCTP_TRANSPORT (object); g_signal_handlers_disconnect_by_data (sctp->sctpdec, sctp); g_signal_handlers_disconnect_by_data (sctp->sctpenc, sctp); @@ -202,9 +190,9 @@ gst_webrtc_sctp_transport_finalize (GObject * object) } static void -gst_webrtc_sctp_transport_constructed (GObject * object) +webrtc_sctp_transport_constructed (GObject * object) { - GstWebRTCSCTPTransport *sctp = GST_WEBRTC_SCTP_TRANSPORT (object); + WebRTCSCTPTransport *sctp = WEBRTC_SCTP_TRANSPORT (object); guint association_id; association_id = g_random_int_range (0, G_MAXUINT16); @@ -226,61 +214,38 @@ gst_webrtc_sctp_transport_constructed (GObject * object) } static void -gst_webrtc_sctp_transport_class_init (GstWebRTCSCTPTransportClass * klass) +webrtc_sctp_transport_class_init (WebRTCSCTPTransportClass * klass) { GObjectClass *gobject_class = (GObjectClass *) klass; - gobject_class->constructed = gst_webrtc_sctp_transport_constructed; - gobject_class->get_property = gst_webrtc_sctp_transport_get_property; - gobject_class->set_property = gst_webrtc_sctp_transport_set_property; - gobject_class->finalize = gst_webrtc_sctp_transport_finalize; - - g_object_class_install_property (gobject_class, - PROP_TRANSPORT, - g_param_spec_object ("transport", - "WebRTC DTLS Transport", - "DTLS transport used for this SCTP transport", - GST_TYPE_WEBRTC_DTLS_TRANSPORT, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); - - g_object_class_install_property (gobject_class, - PROP_STATE, - g_param_spec_enum ("state", - "WebRTC SCTP Transport state", "WebRTC SCTP Transport state", - GST_TYPE_WEBRTC_SCTP_TRANSPORT_STATE, - GST_WEBRTC_SCTP_TRANSPORT_STATE_NEW, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); - - g_object_class_install_property (gobject_class, - PROP_MAX_MESSAGE_SIZE, - g_param_spec_uint64 ("max-message-size", - "Maximum message size", - "Maximum message size as reported by the transport", 0, G_MAXUINT64, - 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); - - g_object_class_install_property (gobject_class, - PROP_MAX_CHANNELS, - g_param_spec_uint ("max-channels", - "Maximum number of channels", "Maximum number of channels", - 0, G_MAXUINT16, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + gobject_class->constructed = webrtc_sctp_transport_constructed; + gobject_class->get_property = webrtc_sctp_transport_get_property; + gobject_class->finalize = webrtc_sctp_transport_finalize; + + g_object_class_override_property (gobject_class, PROP_TRANSPORT, "transport"); + g_object_class_override_property (gobject_class, PROP_STATE, "state"); + g_object_class_override_property (gobject_class, + PROP_MAX_MESSAGE_SIZE, "max-message-size"); + g_object_class_override_property (gobject_class, + PROP_MAX_CHANNELS, "max-channels"); /** - * GstWebRTCSCTPTransport::stream-reset: - * @object: the #GstWebRTCSCTPTransport + * WebRTCSCTPTransport::stream-reset: + * @object: the #WebRTCSCTPTransport * @stream_id: the SCTP stream that was reset */ - gst_webrtc_sctp_transport_signals[ON_STREAM_RESET_SIGNAL] = + webrtc_sctp_transport_signals[ON_STREAM_RESET_SIGNAL] = g_signal_new ("stream-reset", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 1, G_TYPE_UINT); } static void -gst_webrtc_sctp_transport_init (GstWebRTCSCTPTransport * nice) +webrtc_sctp_transport_init (WebRTCSCTPTransport * nice) { } -GstWebRTCSCTPTransport * -gst_webrtc_sctp_transport_new (void) +WebRTCSCTPTransport * +webrtc_sctp_transport_new (void) { - return g_object_new (GST_TYPE_WEBRTC_SCTP_TRANSPORT, NULL); + return g_object_new (TYPE_WEBRTC_SCTP_TRANSPORT, NULL); } diff --git a/ext/webrtc/webrtcsctptransport.h b/ext/webrtc/webrtcsctptransport.h new file mode 100644 index 000000000..82a513911 --- /dev/null +++ b/ext/webrtc/webrtcsctptransport.h @@ -0,0 +1,74 @@ +/* GStreamer + * Copyright (C) 2018 Matthew Waters <matthew@centricular.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 __WEBRTC_SCTP_TRANSPORT_H__ +#define __WEBRTC_SCTP_TRANSPORT_H__ + +#include <gst/gst.h> +#include <gst/webrtc/webrtc.h> +#include <gst/webrtc/sctptransport.h> +#include "gstwebrtcice.h" + +#include "gst/webrtc/webrtc-priv.h" + +G_BEGIN_DECLS + +GType webrtc_sctp_transport_get_type(void); +#define TYPE_WEBRTC_SCTP_TRANSPORT (webrtc_sctp_transport_get_type()) +#define WEBRTC_SCTP_TRANSPORT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),TYPE_WEBRTC_SCTP_TRANSPORT,WebRTCSCTPTransport)) +#define WEBRTC_IS_SCTP_TRANSPORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),TYPE_WEBRTC_SCTP_TRANSPORT)) +#define WEBRTC_SCTP_TRANSPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass) ,TYPE_WEBRTC_SCTP_TRANSPORT,WebRTCSCTPTransportClass)) +#define WEBRTC_SCTP_IS_TRANSPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass) ,TYPE_WEBRTC_SCTP_TRANSPORT)) +#define WEBRTC_SCTP_TRANSPORT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj) ,TYPE_WEBRTC_SCTP_TRANSPORT,WebRTCSCTPTransportClass)) + +typedef struct _WebRTCSCTPTransport WebRTCSCTPTransport; +typedef struct _WebRTCSCTPTransportClass WebRTCSCTPTransportClass; + +struct _WebRTCSCTPTransport +{ + GstWebRTCSCTPTransport parent; + + GstWebRTCDTLSTransport *transport; + GstWebRTCSCTPTransportState state; + guint64 max_message_size; + guint max_channels; + + gboolean association_established; + + gulong sctpdec_block_id; + GstElement *sctpdec; + GstElement *sctpenc; + + GstWebRTCBin *webrtcbin; +}; + +struct _WebRTCSCTPTransportClass +{ + GstWebRTCSCTPTransportClass parent_class; +}; + +WebRTCSCTPTransport * webrtc_sctp_transport_new (void); + +void +webrtc_sctp_transport_set_priority (WebRTCSCTPTransport *sctp, + GstWebRTCPriorityType priority); + +G_END_DECLS + +#endif /* __WEBRTC_SCTP_TRANSPORT_H__ */ |