From 8a5dab1c060ca05b3fbb8492c293117e101ecf70 Mon Sep 17 00:00:00 2001 From: "Jan Alexander Steffens (heftig)" Date: Fri, 16 Feb 2018 09:16:12 +0100 Subject: srt: Refactor gst_srt_*_sink_send_buffer, extract send https://bugzilla.gnome.org/show_bug.cgi?id=793503 --- ext/srt/gstsrtclientsink.c | 21 +++++++++++++++------ 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; } @@ -184,6 +183,16 @@ gst_srt_client_sink_send_buffer (GstSRTBaseSink * sink, return TRUE; } +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) { 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 @@ -390,6 +390,21 @@ failed: return FALSE; } +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); -- cgit v1.2.3