diff options
author | Jan Alexander Steffens (heftig) <jan.steffens@gmail.com> | 2018-02-16 09:16:12 +0100 |
---|---|---|
committer | Olivier CrĂȘte <olivier.crete@collabora.com> | 2018-02-23 15:29:57 -0500 |
commit | 8a5dab1c060ca05b3fbb8492c293117e101ecf70 (patch) | |
tree | ed924688cd2f50e9dc1328ffca4d78a7636ba76a /ext | |
parent | 7463a93620bbed61dcf389f5eef9ae3f891402e0 (diff) |
srt: Refactor gst_srt_*_sink_send_buffer, extract send
https://bugzilla.gnome.org/show_bug.cgi?id=793503
Diffstat (limited to 'ext')
-rw-r--r-- | ext/srt/gstsrtclientsink.c | 21 | ||||
-rw-r--r-- | ext/srt/gstsrtserversink.c | 37 |
2 files changed, 42 insertions, 16 deletions
diff --git a/ext/srt/gstsrtclientsink.c b/ext/srt/gstsrtclientsink.c index 9856c43d7..3bafb1eaf 100644 --- a/ext/srt/gstsrtclientsink.c +++ b/ext/srt/gstsrtclientsink.c @@ -168,15 +168,14 @@ gst_srt_client_sink_start (GstBaseSink * sink) } static gboolean -gst_srt_client_sink_send_buffer (GstSRTBaseSink * sink, - const GstMapInfo * mapinfo) +send_buffer_internal (GstSRTBaseSink * sink, + const GstMapInfo * mapinfo, gpointer user_data) { - GstSRTClientSink *self = GST_SRT_CLIENT_SINK (sink); - GstSRTClientSinkPrivate *priv = GST_SRT_CLIENT_SINK_GET_PRIVATE (self); + SRTSOCKET sock = GPOINTER_TO_INT (user_data); - if (srt_sendmsg2 (priv->sock, (char *) mapinfo->data, mapinfo->size, + if (srt_sendmsg2 (sock, (char *) mapinfo->data, mapinfo->size, 0) == SRT_ERROR) { - GST_ELEMENT_ERROR (self, RESOURCE, WRITE, NULL, + GST_ELEMENT_ERROR (sink, RESOURCE, WRITE, NULL, ("%s", srt_getlasterror_str ())); return FALSE; } @@ -185,6 +184,16 @@ gst_srt_client_sink_send_buffer (GstSRTBaseSink * sink, } static gboolean +gst_srt_client_sink_send_buffer (GstSRTBaseSink * sink, + const GstMapInfo * mapinfo) +{ + GstSRTClientSink *self = GST_SRT_CLIENT_SINK (sink); + GstSRTClientSinkPrivate *priv = GST_SRT_CLIENT_SINK_GET_PRIVATE (self); + + return send_buffer_internal (sink, mapinfo, GINT_TO_POINTER (priv->sock)); +} + +static gboolean gst_srt_client_sink_stop (GstBaseSink * sink) { GstSRTClientSink *self = GST_SRT_CLIENT_SINK (sink); diff --git a/ext/srt/gstsrtserversink.c b/ext/srt/gstsrtserversink.c index acbda9052..f7b76cf33 100644 --- a/ext/srt/gstsrtserversink.c +++ b/ext/srt/gstsrtserversink.c @@ -391,6 +391,21 @@ failed: } static gboolean +send_buffer_internal (GstSRTBaseSink * sink, + const GstMapInfo * mapinfo, gpointer user_data) +{ + SRTClient *client = user_data; + + if (srt_sendmsg2 (client->sock, (char *) mapinfo->data, mapinfo->size, + 0) == SRT_ERROR) { + GST_WARNING_OBJECT (sink, "%s", srt_getlasterror_str ()); + return FALSE; + } + + return TRUE; +} + +static gboolean gst_srt_server_sink_send_buffer (GstSRTBaseSink * sink, const GstMapInfo * mapinfo) { @@ -403,17 +418,19 @@ gst_srt_server_sink_send_buffer (GstSRTBaseSink * sink, SRTClient *client = clients->data; clients = clients->next; - if (srt_sendmsg2 (client->sock, (char *) mapinfo->data, mapinfo->size, - 0) == SRT_ERROR) { - GST_WARNING_OBJECT (self, "%s", srt_getlasterror_str ()); - priv->clients = g_list_remove (priv->clients, client); - GST_OBJECT_UNLOCK (sink); - g_signal_emit (self, signals[SIG_CLIENT_REMOVED], 0, client->sock, - client->sockaddr); - srt_client_free (client); - GST_OBJECT_LOCK (sink); - } + if (!send_buffer_internal (sink, mapinfo, client)) + goto err; + + continue; + + err: + priv->clients = g_list_remove (priv->clients, client); + GST_OBJECT_UNLOCK (sink); + g_signal_emit (self, signals[SIG_CLIENT_REMOVED], 0, client->sock, + client->sockaddr); + srt_client_free (client); + GST_OBJECT_LOCK (sink); } GST_OBJECT_UNLOCK (sink); |