diff options
author | Wim Taymans <wim.taymans@gmail.com> | 2005-06-02 13:28:46 +0000 |
---|---|---|
committer | Wim Taymans <wim.taymans@gmail.com> | 2005-06-02 13:28:46 +0000 |
commit | 8e61fd923091dbdb1cefe157c8dcfecc57d166fd (patch) | |
tree | 6ba8c2f83c2b13b90e857f9ec052b075de5d3655 | |
parent | ca1f865eaa541789d704d0d90ec36001a17da3fd (diff) |
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.
-rw-r--r-- | ChangeLog | 18 | ||||
-rw-r--r-- | gst/udp/Makefile.am | 4 | ||||
-rw-r--r-- | gst/udp/gstmultiudpsink.c | 40 | ||||
-rw-r--r-- | gst/udp/gstudpsrc.c | 12 |
4 files changed, 69 insertions, 5 deletions
@@ -1,5 +1,23 @@ 2005-06-02 Wim Taymans <wim@fluendo.com> + * 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. + +2005-06-02 Wim Taymans <wim@fluendo.com> + * gst/rtsp/README: * gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type), (gst_rtspsrc_class_init), (gst_rtspsrc_create_stream), diff --git a/gst/udp/Makefile.am b/gst/udp/Makefile.am index d88d1135..9f579ca5 100644 --- a/gst/udp/Makefile.am +++ b/gst/udp/Makefile.am @@ -13,9 +13,9 @@ built_headers = gstudp-enumtypes.h gstudp-marshal.h BUILT_SOURCES = $(built_sources) $(built_headers) libgstudp_la_SOURCES = gstudp.c gstudpsrc.c gstudpsink.c gstmultiudpsink.c -libgstudp_la_CFLAGS = $(GST_CFLAGS) +libgstudp_la_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_LIBS_CFLAGS) libgstudp_la_LIBADD = -libgstudp_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) $(GST_BASE_LIBS) +libgstudp_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) $(GST_BASE_LIBS) ../../../gst-plugins-base/gst-libs/gst/net/libgstnet.la nodist_libgstudp_la_SOURCES = \ $(built_sources) 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 * diff --git a/gst/udp/gstudpsrc.c b/gst/udp/gstudpsrc.c index ffec6a02..cce25904 100644 --- a/gst/udp/gstudpsrc.c +++ b/gst/udp/gstudpsrc.c @@ -25,6 +25,7 @@ #include "gstudpsrc.h" #include <unistd.h> #include <sys/ioctl.h> +#include <gst/net/gstnetbuffer.h> #ifdef HAVE_FIONREAD_IN_SYS_FILIO #include <sys/filio.h> @@ -201,7 +202,7 @@ static GstFlowReturn gst_udpsrc_create (GstPushSrc * psrc, GstBuffer ** buf) { GstUDPSrc *udpsrc; - GstBuffer *outbuf; + GstNetBuffer *outbuf; struct sockaddr_in tmpaddr; socklen_t len; fd_set read_fds; @@ -286,11 +287,16 @@ gst_udpsrc_create (GstPushSrc * psrc, GstBuffer ** buf) break; } - outbuf = gst_buffer_new (); + outbuf = gst_netbuffer_new (); GST_BUFFER_DATA (outbuf) = pktdata; GST_BUFFER_SIZE (outbuf) = ret; - *buf = outbuf; + gst_netaddress_set_ip4_address (&outbuf->from, tmpaddr.sin_addr.s_addr, + tmpaddr.sin_port); + + GST_LOG_OBJECT (udpsrc, "read %d bytes", readsize); + + *buf = GST_BUFFER (outbuf); return GST_FLOW_OK; |