summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2005-06-02 13:28:46 +0000
committerWim Taymans <wim.taymans@gmail.com>2005-06-02 13:28:46 +0000
commit8e61fd923091dbdb1cefe157c8dcfecc57d166fd (patch)
tree6ba8c2f83c2b13b90e857f9ec052b075de5d3655
parentca1f865eaa541789d704d0d90ec36001a17da3fd (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--ChangeLog18
-rw-r--r--gst/udp/Makefile.am4
-rw-r--r--gst/udp/gstmultiudpsink.c40
-rw-r--r--gst/udp/gstudpsrc.c12
4 files changed, 69 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index c018903d..71ae55b2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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;