From 8e61fd923091dbdb1cefe157c8dcfecc57d166fd Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 2 Jun 2005 13:28:46 +0000 Subject: gst/udp/: Use NetBuffer and small cleanups. Original commit message from CVS: * gst/udp/Makefile.am: * gst/udp/gstmultiudpsink.c: (gst_multiudpsink_get_type), (gst_multiudpsink_base_init), (gst_multiudpsink_class_init), (gst_multiudpsink_init), (gst_multiudpsink_finalize), (gst_multiudpsink_get_times), (gst_multiudpsink_render), (gst_multiudpsink_set_property), (gst_multiudpsink_init_send), (gst_multiudpsink_add), (client_compare), (free_client), (gst_multiudpsink_remove), (gst_multiudpsink_clear), (gst_multiudpsink_get_stats): * gst/udp/gstudpsrc.c: (gst_udpsrc_get_type), (gst_udpsrc_base_init), (gst_udpsrc_class_init), (gst_udpsrc_create), (gst_udpsrc_set_uri), (gst_udpsrc_start), (gst_udpsrc_unlock), (gst_udpsrc_stop): Use NetBuffer and small cleanups. Implement client removal in multiudpsink. --- gst/udp/gstmultiudpsink.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'gst/udp/gstmultiudpsink.c') diff --git a/gst/udp/gstmultiudpsink.c b/gst/udp/gstmultiudpsink.c index c7ea9e24..6ef5e2e4 100644 --- a/gst/udp/gstmultiudpsink.c +++ b/gst/udp/gstmultiudpsink.c @@ -382,14 +382,54 @@ host_error: } } +static gint +client_compare (GstUDPClient * a, GstUDPClient * b) +{ + if ((a->port == b->port) && (strcmp (a->host, b->host) == 0)) + return 0; + + return 1; +} + +static void +free_client (GstUDPClient * client) +{ + g_free (client->host); + g_free (client); +} + void gst_multiudpsink_remove (GstMultiUDPSink * sink, const gchar * host, gint port) { + GList *find; + GstUDPClient udpclient; + + udpclient.host = (gchar *) host; + udpclient.port = port; + + g_mutex_lock (sink->client_lock); + find = g_list_find_custom (sink->clients, &udpclient, + (GCompareFunc) client_compare); + if (find) { + GstUDPClient *client; + + client = (GstUDPClient *) find->data; + + sink->clients = g_list_delete_link (sink->clients, find); + + free_client (client); + } + g_mutex_unlock (sink->client_lock); } void gst_multiudpsink_clear (GstMultiUDPSink * sink) { + g_mutex_lock (sink->client_lock); + g_list_foreach (sink->clients, (GFunc) free_client, sink); + g_list_free (sink->clients); + sink->clients = NULL; + g_mutex_unlock (sink->client_lock); } GValueArray * -- cgit