diff options
author | Thomas Vander Stichele <thomas@apestaart.org> | 2004-03-14 22:34:33 +0000 |
---|---|---|
committer | Thomas Vander Stichele <thomas@apestaart.org> | 2004-03-14 22:34:33 +0000 |
commit | 5d25c00e4b613b9cdf2c04fa3a68dffa03834a68 (patch) | |
tree | 74a5b1eaf3a324b520e64e87404fd0b3018a7829 /gst/udp | |
parent | 1e83b097f7b732ae49e294a5a398bdc3e88854a8 (diff) |
gst-indent
Original commit message from CVS:
gst-indent
Diffstat (limited to 'gst/udp')
-rw-r--r-- | gst/udp/gstudp.c | 23 | ||||
-rw-r--r-- | gst/udp/gstudp.h | 5 | ||||
-rw-r--r-- | gst/udp/gstudpsink.c | 325 | ||||
-rw-r--r-- | gst/udp/gstudpsink.h | 62 | ||||
-rw-r--r-- | gst/udp/gstudpsrc.c | 341 | ||||
-rw-r--r-- | gst/udp/gstudpsrc.h | 60 |
6 files changed, 417 insertions, 399 deletions
diff --git a/gst/udp/gstudp.c b/gst/udp/gstudp.c index b98e6129..1192f6d7 100644 --- a/gst/udp/gstudp.c +++ b/gst/udp/gstudp.c @@ -25,25 +25,20 @@ #include "gstudpsink.h" static gboolean -plugin_init (GstPlugin *plugin) +plugin_init (GstPlugin * plugin) { - if (!gst_element_register (plugin, "udpsink", GST_RANK_NONE, GST_TYPE_UDPSINK)) + if (!gst_element_register (plugin, "udpsink", GST_RANK_NONE, + GST_TYPE_UDPSINK)) return FALSE; - + if (!gst_element_register (plugin, "udpsrc", GST_RANK_NONE, GST_TYPE_UDPSRC)) return FALSE; return TRUE; } -GST_PLUGIN_DEFINE ( - GST_VERSION_MAJOR, - GST_VERSION_MINOR, - "udp", - "transfer data via UDP", - plugin_init, - VERSION, - GST_LICENSE, - GST_PACKAGE, - GST_ORIGIN -) +GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, + GST_VERSION_MINOR, + "udp", + "transfer data via UDP", + plugin_init, VERSION, GST_LICENSE, GST_PACKAGE, GST_ORIGIN) diff --git a/gst/udp/gstudp.h b/gst/udp/gstudp.h index 89103e93..e5fda050 100644 --- a/gst/udp/gstudp.h +++ b/gst/udp/gstudp.h @@ -36,7 +36,6 @@ extern "C" #ifdef __cplusplus } -#endif /* __cplusplus */ - -#endif /* __GST_UDP_H__ */ +#endif /* __cplusplus */ +#endif /* __GST_UDP_H__ */ diff --git a/gst/udp/gstudpsink.c b/gst/udp/gstudpsink.c index 86238af2..af365613 100644 --- a/gst/udp/gstudpsink.c +++ b/gst/udp/gstudpsink.c @@ -28,32 +28,34 @@ #define UDP_DEFAULT_CONTROL 1 /* elementfactory information */ -static GstElementDetails gst_udpsink_details = GST_ELEMENT_DETAILS ( - "UDP packet sender", - "Sink/Network", - "Send data over the network via UDP", - "Wim Taymans <wim.taymans@chello.be>" -); +static GstElementDetails gst_udpsink_details = +GST_ELEMENT_DETAILS ("UDP packet sender", + "Sink/Network", + "Send data over the network via UDP", + "Wim Taymans <wim.taymans@chello.be>"); /* UDPSink signals and args */ -enum { +enum +{ FRAME_ENCODED, /* FILL ME */ LAST_SIGNAL }; -enum { +enum +{ ARG_0, ARG_HOST, ARG_PORT, ARG_CONTROL, ARG_MTU - /* FILL ME */ + /* FILL ME */ }; #define GST_TYPE_UDPSINK_CONTROL (gst_udpsink_control_get_type()) static GType -gst_udpsink_control_get_type(void) { +gst_udpsink_control_get_type (void) +{ static GType udpsink_control_type = 0; static GEnumValue udpsink_control[] = { {CONTROL_NONE, "1", "none"}, @@ -62,27 +64,29 @@ gst_udpsink_control_get_type(void) { {CONTROL_ZERO, NULL, NULL}, }; if (!udpsink_control_type) { - udpsink_control_type = g_enum_register_static("GstUDPSinkControl", udpsink_control); + udpsink_control_type = + g_enum_register_static ("GstUDPSinkControl", udpsink_control); } return udpsink_control_type; } -static void gst_udpsink_base_init (gpointer g_class); -static void gst_udpsink_class_init (GstUDPSink *klass); -static void gst_udpsink_init (GstUDPSink *udpsink); +static void gst_udpsink_base_init (gpointer g_class); +static void gst_udpsink_class_init (GstUDPSink * klass); +static void gst_udpsink_init (GstUDPSink * udpsink); -static void gst_udpsink_set_clock (GstElement *element, GstClock *clock); +static void gst_udpsink_set_clock (GstElement * element, GstClock * clock); -static void gst_udpsink_chain (GstPad *pad,GstData *_data); -static GstElementStateReturn gst_udpsink_change_state (GstElement *element); +static void gst_udpsink_chain (GstPad * pad, GstData * _data); +static GstElementStateReturn gst_udpsink_change_state (GstElement * element); -static void gst_udpsink_set_property (GObject *object, guint prop_id, - const GValue *value, GParamSpec *pspec); -static void gst_udpsink_get_property (GObject *object, guint prop_id, - GValue *value, GParamSpec *pspec); +static void gst_udpsink_set_property (GObject * object, guint prop_id, + const GValue * value, GParamSpec * pspec); +static void gst_udpsink_get_property (GObject * object, guint prop_id, + GValue * value, GParamSpec * pspec); static GstElementClass *parent_class = NULL; + /*static guint gst_udpsink_signals[LAST_SIGNAL] = { 0 }; */ GType @@ -92,18 +96,20 @@ gst_udpsink_get_type (void) if (!udpsink_type) { static const GTypeInfo udpsink_info = { - sizeof(GstUDPSinkClass), + sizeof (GstUDPSinkClass), gst_udpsink_base_init, NULL, - (GClassInitFunc)gst_udpsink_class_init, + (GClassInitFunc) gst_udpsink_class_init, NULL, NULL, - sizeof(GstUDPSink), + sizeof (GstUDPSink), 0, - (GInstanceInitFunc)gst_udpsink_init, + (GInstanceInitFunc) gst_udpsink_init, NULL }; - udpsink_type = g_type_register_static (GST_TYPE_ELEMENT, "GstUDPSink", &udpsink_info, 0); + udpsink_type = + g_type_register_static (GST_TYPE_ELEMENT, "GstUDPSink", &udpsink_info, + 0); } return udpsink_type; } @@ -117,29 +123,27 @@ gst_udpsink_base_init (gpointer g_class) } static void -gst_udpsink_class_init (GstUDPSink *klass) +gst_udpsink_class_init (GstUDPSink * klass) { GObjectClass *gobject_class; GstElementClass *gstelement_class; - gobject_class = (GObjectClass*) klass; - gstelement_class = (GstElementClass*) klass; + gobject_class = (GObjectClass *) klass; + gstelement_class = (GstElementClass *) klass; parent_class = g_type_class_ref (GST_TYPE_ELEMENT); g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_HOST, - g_param_spec_string ("host", "host", - "The host/IP/Multicast group to send the packets to", - UDP_DEFAULT_HOST, G_PARAM_READWRITE)); + g_param_spec_string ("host", "host", + "The host/IP/Multicast group to send the packets to", + UDP_DEFAULT_HOST, G_PARAM_READWRITE)); g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_PORT, - g_param_spec_int ("port", "port", "The port to send the packets to", - 0, 32768, UDP_DEFAULT_PORT, G_PARAM_READWRITE)); + g_param_spec_int ("port", "port", "The port to send the packets to", + 0, 32768, UDP_DEFAULT_PORT, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, ARG_CONTROL, - g_param_spec_enum ("control", "control", "The type of control", - GST_TYPE_UDPSINK_CONTROL, CONTROL_UDP, G_PARAM_READWRITE)); - g_object_class_install_property (gobject_class, ARG_MTU, - g_param_spec_int ("mtu", "mtu", "maximun transmit unit", G_MININT, G_MAXINT, - 0, G_PARAM_READWRITE)); /* CHECKME */ + g_param_spec_enum ("control", "control", "The type of control", + GST_TYPE_UDPSINK_CONTROL, CONTROL_UDP, G_PARAM_READWRITE)); + g_object_class_install_property (gobject_class, ARG_MTU, g_param_spec_int ("mtu", "mtu", "maximun transmit unit", G_MININT, G_MAXINT, 0, G_PARAM_READWRITE)); /* CHECKME */ gobject_class->set_property = gst_udpsink_set_property; gobject_class->get_property = gst_udpsink_get_property; @@ -150,7 +154,7 @@ gst_udpsink_class_init (GstUDPSink *klass) static GstPadLinkReturn -gst_udpsink_sink_link (GstPad *pad, const GstCaps *caps) +gst_udpsink_sink_link (GstPad * pad, const GstCaps * caps) { GstUDPSink *udpsink; struct sockaddr_in serv_addr; @@ -158,27 +162,28 @@ gst_udpsink_sink_link (GstPad *pad, const GstCaps *caps) int fd; FILE *f; guint bc_val; + #ifndef GST_DISABLE_LOADSAVE xmlDocPtr doc; xmlChar *buf; int buf_size; udpsink = GST_UDPSINK (gst_pad_get_parent (pad)); - - memset(&serv_addr, 0, sizeof(serv_addr)); - + + memset (&serv_addr, 0, sizeof (serv_addr)); + /* its a name rather than an ipnum */ - serverhost = gethostbyname(udpsink->host); - if (serverhost == (struct hostent *)0) { - perror("gethostbyname"); - return GST_PAD_LINK_REFUSED; + serverhost = gethostbyname (udpsink->host); + if (serverhost == (struct hostent *) 0) { + perror ("gethostbyname"); + return GST_PAD_LINK_REFUSED; } - - memmove(&serv_addr.sin_addr,serverhost->h_addr, serverhost->h_length); + + memmove (&serv_addr.sin_addr, serverhost->h_addr, serverhost->h_length); serv_addr.sin_family = AF_INET; - serv_addr.sin_port = htons(udpsink->port+1); - + serv_addr.sin_port = htons (udpsink->port + 1); + doc = xmlNewDoc ("1.0"); doc->xmlRootNode = xmlNewDocNode (doc, NULL, "NewCaps", NULL); @@ -186,66 +191,66 @@ gst_udpsink_sink_link (GstPad *pad, const GstCaps *caps) switch (udpsink->control) { case CONTROL_UDP: - if ((fd = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) { - perror("socket"); - return GST_PAD_LINK_REFUSED; - } - - /* We can only do broadcast in udp */ - bc_val = 1; - setsockopt (fd,SOL_SOCKET, SO_BROADCAST, &bc_val, sizeof (bc_val)); - - xmlDocDumpMemory(doc, &buf, &buf_size); - - if (sendto (fd, buf, buf_size, 0, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) == -1) - { - perror("sending"); - return GST_PAD_LINK_REFUSED; - } - close (fd); - break; + if ((fd = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) { + perror ("socket"); + return GST_PAD_LINK_REFUSED; + } + + /* We can only do broadcast in udp */ + bc_val = 1; + setsockopt (fd, SOL_SOCKET, SO_BROADCAST, &bc_val, sizeof (bc_val)); + + xmlDocDumpMemory (doc, &buf, &buf_size); + + if (sendto (fd, buf, buf_size, 0, (struct sockaddr *) &serv_addr, + sizeof (serv_addr)) == -1) { + perror ("sending"); + return GST_PAD_LINK_REFUSED; + } + close (fd); + break; case CONTROL_TCP: - if ((fd = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) { - perror("socket"); - return GST_PAD_LINK_REFUSED; - } - - if (connect(fd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) != 0) { - g_printerr ("udpsink: connect to %s port %d failed: %s\n", - udpsink->host, udpsink->port, g_strerror(errno)); - return GST_PAD_LINK_REFUSED; - } - - f = fdopen (dup (fd), "wb"); - - xmlDocDump(f, doc); - fclose (f); - close (fd); - break; + if ((fd = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) { + perror ("socket"); + return GST_PAD_LINK_REFUSED; + } + + if (connect (fd, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) != 0) { + g_printerr ("udpsink: connect to %s port %d failed: %s\n", + udpsink->host, udpsink->port, g_strerror (errno)); + return GST_PAD_LINK_REFUSED; + } + + f = fdopen (dup (fd), "wb"); + + xmlDocDump (f, doc); + fclose (f); + close (fd); + break; case CONTROL_NONE: - return GST_PAD_LINK_OK; - break; + return GST_PAD_LINK_OK; + break; default: - return GST_PAD_LINK_REFUSED; - break; + return GST_PAD_LINK_REFUSED; + break; } #endif - + return GST_PAD_LINK_OK; } static void -gst_udpsink_set_clock (GstElement *element, GstClock *clock) +gst_udpsink_set_clock (GstElement * element, GstClock * clock) { GstUDPSink *udpsink; - + udpsink = GST_UDPSINK (element); udpsink->clock = clock; } static void -gst_udpsink_init (GstUDPSink *udpsink) +gst_udpsink_init (GstUDPSink * udpsink) { /* create the sink and src pads */ udpsink->sinkpad = gst_pad_new ("sink", GST_PAD_SINK); @@ -257,12 +262,12 @@ gst_udpsink_init (GstUDPSink *udpsink) udpsink->port = UDP_DEFAULT_PORT; udpsink->control = CONTROL_UDP; udpsink->mtu = 1024; - + udpsink->clock = NULL; } static void -gst_udpsink_chain (GstPad *pad, GstData *_data) +gst_udpsink_chain (GstPad * pad, GstData * _data) { GstBuffer *buf = GST_BUFFER (_data); GstUDPSink *udpsink; @@ -273,63 +278,64 @@ gst_udpsink_chain (GstPad *pad, GstData *_data) g_return_if_fail (buf != NULL); udpsink = GST_UDPSINK (GST_OBJECT_PARENT (pad)); - + if (udpsink->clock && GST_BUFFER_TIMESTAMP_IS_VALID (buf)) { gst_element_wait (GST_ELEMENT (udpsink), GST_BUFFER_TIMESTAMP (buf)); } - - tolen = sizeof(udpsink->theiraddr); - - /* - if (sendto (udpsink->sock, GST_BUFFER_DATA (buf), - GST_BUFFER_SIZE (buf), 0, (struct sockaddr *) &udpsink->theiraddr, - tolen) == -1) { - perror("sending"); - } -*/ - /* MTU */ + + tolen = sizeof (udpsink->theiraddr); + + /* + if (sendto (udpsink->sock, GST_BUFFER_DATA (buf), + GST_BUFFER_SIZE (buf), 0, (struct sockaddr *) &udpsink->theiraddr, + tolen) == -1) { + perror("sending"); + } + */ + /* MTU */ for (i = 0; i < GST_BUFFER_SIZE (buf); i += udpsink->mtu) { if (GST_BUFFER_SIZE (buf) - i > udpsink->mtu) { - if (sendto (udpsink->sock, GST_BUFFER_DATA (buf) + i, - udpsink->mtu, 0, (struct sockaddr *) &udpsink->theiraddr, - tolen) == -1) { - perror("sending"); - } - } - else { - if (sendto (udpsink->sock, GST_BUFFER_DATA (buf) + i, - GST_BUFFER_SIZE (buf) -i, 0, - (struct sockaddr *) &udpsink->theiraddr, tolen) == -1) { - perror("sending"); - } + if (sendto (udpsink->sock, GST_BUFFER_DATA (buf) + i, + udpsink->mtu, 0, (struct sockaddr *) &udpsink->theiraddr, + tolen) == -1) { + perror ("sending"); + } + } else { + if (sendto (udpsink->sock, GST_BUFFER_DATA (buf) + i, + GST_BUFFER_SIZE (buf) - i, 0, + (struct sockaddr *) &udpsink->theiraddr, tolen) == -1) { + perror ("sending"); + } } } - gst_buffer_unref(buf); + gst_buffer_unref (buf); } static void -gst_udpsink_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) +gst_udpsink_set_property (GObject * object, guint prop_id, const GValue * value, + GParamSpec * pspec) { GstUDPSink *udpsink; /* it's not null if we got it, but it might not be ours */ - g_return_if_fail(GST_IS_UDPSINK(object)); - udpsink = GST_UDPSINK(object); + g_return_if_fail (GST_IS_UDPSINK (object)); + udpsink = GST_UDPSINK (object); switch (prop_id) { case ARG_HOST: - if (udpsink->host != NULL) g_free(udpsink->host); + if (udpsink->host != NULL) + g_free (udpsink->host); if (g_value_get_string (value) == NULL) - udpsink->host = NULL; + udpsink->host = NULL; else - udpsink->host = g_strdup (g_value_get_string (value)); + udpsink->host = g_strdup (g_value_get_string (value)); break; case ARG_PORT: - udpsink->port = g_value_get_int (value); + udpsink->port = g_value_get_int (value); break; case ARG_CONTROL: - udpsink->control = g_value_get_enum (value); + udpsink->control = g_value_get_enum (value); break; case ARG_MTU: udpsink->mtu = g_value_get_int (value); @@ -340,13 +346,14 @@ gst_udpsink_set_property (GObject *object, guint prop_id, const GValue *value, G } static void -gst_udpsink_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) +gst_udpsink_get_property (GObject * object, guint prop_id, GValue * value, + GParamSpec * pspec) { GstUDPSink *udpsink; /* it's not null if we got it, but it might not be ours */ - g_return_if_fail(GST_IS_UDPSINK(object)); - udpsink = GST_UDPSINK(object); + g_return_if_fail (GST_IS_UDPSINK (object)); + udpsink = GST_UDPSINK (object); switch (prop_id) { case ARG_HOST: @@ -370,67 +377,66 @@ gst_udpsink_get_property (GObject *object, guint prop_id, GValue *value, GParamS /* create a socket for sending to remote machine */ static gboolean -gst_udpsink_init_send (GstUDPSink *sink) +gst_udpsink_init_send (GstUDPSink * sink) { struct hostent *he; struct in_addr addr; guint bc_val; memset (&sink->theiraddr, 0, sizeof (sink->theiraddr)); - sink->theiraddr.sin_family = AF_INET; /* host byte order */ - sink->theiraddr.sin_port = htons (sink->port); /* short, network byte order */ + sink->theiraddr.sin_family = AF_INET; /* host byte order */ + sink->theiraddr.sin_port = htons (sink->port); /* short, network byte order */ /* if its an IP address */ if (inet_aton (sink->host, &addr)) { /* check if its a multicast address */ if ((ntohl (addr.s_addr) & 0xe0000000) == 0xe0000000) { - sink->multi_addr.imr_multiaddr.s_addr = addr.s_addr; - sink->multi_addr.imr_interface.s_addr = INADDR_ANY; - - sink->theiraddr.sin_addr = sink->multi_addr.imr_multiaddr; - - /* Joining the multicast group */ - setsockopt (sink->sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &sink->multi_addr, sizeof(sink->multi_addr)); + sink->multi_addr.imr_multiaddr.s_addr = addr.s_addr; + sink->multi_addr.imr_interface.s_addr = INADDR_ANY; + + sink->theiraddr.sin_addr = sink->multi_addr.imr_multiaddr; + + /* Joining the multicast group */ + setsockopt (sink->sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &sink->multi_addr, + sizeof (sink->multi_addr)); } - + else { - sink->theiraddr.sin_addr = - *((struct in_addr *) &addr); + sink->theiraddr.sin_addr = *((struct in_addr *) &addr); } } - + /* we dont need to lookup for localhost */ - else if (strcmp (sink->host, UDP_DEFAULT_HOST) == 0 && - inet_aton ("127.0.0.1", &addr)) { - sink->theiraddr.sin_addr = - *((struct in_addr *) &addr); + else if (strcmp (sink->host, UDP_DEFAULT_HOST) == 0 && + inet_aton ("127.0.0.1", &addr)) { + sink->theiraddr.sin_addr = *((struct in_addr *) &addr); } /* if its a hostname */ else if ((he = gethostbyname (sink->host))) { sink->theiraddr.sin_addr = *((struct in_addr *) he->h_addr); } - + else { - perror("hostname lookup error?"); - return FALSE; + perror ("hostname lookup error?"); + return FALSE; } if ((sink->sock = socket (AF_INET, SOCK_DGRAM, 0)) == -1) { - perror("socket"); - return FALSE; + perror ("socket"); + return FALSE; } bc_val = 1; setsockopt (sink->sock, SOL_SOCKET, SO_BROADCAST, &bc_val, sizeof (bc_val)); - + GST_FLAG_SET (sink, GST_UDPSINK_OPEN); return TRUE; } static void -gst_udpsink_close (GstUDPSink *sink) +gst_udpsink_close (GstUDPSink * sink) { close (sink->sock); @@ -438,7 +444,7 @@ gst_udpsink_close (GstUDPSink *sink) } static GstElementStateReturn -gst_udpsink_change_state (GstElement *element) +gst_udpsink_change_state (GstElement * element) { g_return_val_if_fail (GST_IS_UDPSINK (element), GST_STATE_FAILURE); @@ -448,7 +454,7 @@ gst_udpsink_change_state (GstElement *element) } else { if (!GST_FLAG_IS_SET (element, GST_UDPSINK_OPEN)) { if (!gst_udpsink_init_send (GST_UDPSINK (element))) - return GST_STATE_FAILURE; + return GST_STATE_FAILURE; } } @@ -457,4 +463,3 @@ gst_udpsink_change_state (GstElement *element) return GST_STATE_SUCCESS; } - diff --git a/gst/udp/gstudpsink.h b/gst/udp/gstudpsink.h index f49b4efe..9a08f709 100644 --- a/gst/udp/gstudpsink.h +++ b/gst/udp/gstudpsink.h @@ -25,8 +25,9 @@ #include <gst/gst.h> #ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ +extern "C" +{ +#endif /* __cplusplus */ #include <stdio.h> #include <stdlib.h> @@ -54,45 +55,48 @@ extern "C" { #define GST_IS_UDPSINK_CLASS(obj) \ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_UDPSINK)) -typedef struct _GstUDPSink GstUDPSink; -typedef struct _GstUDPSinkClass GstUDPSinkClass; + typedef struct _GstUDPSink GstUDPSink; + typedef struct _GstUDPSinkClass GstUDPSinkClass; -typedef enum { - GST_UDPSINK_OPEN = GST_ELEMENT_FLAG_LAST, + typedef enum + { + GST_UDPSINK_OPEN = GST_ELEMENT_FLAG_LAST, - GST_UDPSINK_FLAG_LAST = GST_ELEMENT_FLAG_LAST + 2, -} GstUDPSinkFlags; + GST_UDPSINK_FLAG_LAST = GST_ELEMENT_FLAG_LAST + 2, + } GstUDPSinkFlags; -struct _GstUDPSink { - GstElement element; + struct _GstUDPSink + { + GstElement element; - /* pads */ - GstPad *sinkpad,*srcpad; + /* pads */ + GstPad *sinkpad, *srcpad; - int sock; - struct sockaddr_in theiraddr; - struct ip_mreq multi_addr; + int sock; + struct sockaddr_in theiraddr; + struct ip_mreq multi_addr; - gint port; - Gst_UDP_Control control; - gchar *host; - - guint mtu; - - GstClock *clock; -}; + gint port; + Gst_UDP_Control control; + gchar *host; -struct _GstUDPSinkClass { - GstElementClass parent_class; + guint mtu; -}; + GstClock *clock; + }; -GType gst_udpsink_get_type(void); + struct _GstUDPSinkClass + { + GstElementClass parent_class; + + }; + + GType gst_udpsink_get_type (void); #ifdef __cplusplus } -#endif /* __cplusplus */ +#endif /* __cplusplus */ -#endif /* __GST_UDPSINK_H__ */ +#endif /* __GST_UDPSINK_H__ */ diff --git a/gst/udp/gstudpsrc.c b/gst/udp/gstudpsrc.c index 66bcd268..48e00862 100644 --- a/gst/udp/gstudpsrc.c +++ b/gst/udp/gstudpsrc.c @@ -29,30 +29,32 @@ #define UDP_DEFAULT_MULTICAST_GROUP "0.0.0.0" /* elementfactory information */ -static GstElementDetails gst_udpsrc_details = GST_ELEMENT_DETAILS ( - "UDP packet receiver", - "Source/Network", - "Receive data over the network via UDP", - "Wim Taymans <wim.taymans@chello.be>" -); +static GstElementDetails gst_udpsrc_details = +GST_ELEMENT_DETAILS ("UDP packet receiver", + "Source/Network", + "Receive data over the network via UDP", + "Wim Taymans <wim.taymans@chello.be>"); /* UDPSrc signals and args */ -enum { +enum +{ /* FILL ME */ LAST_SIGNAL }; -enum { +enum +{ ARG_0, ARG_PORT, ARG_CONTROL, ARG_MULTICAST_GROUP - /* FILL ME */ + /* FILL ME */ }; #define GST_TYPE_UDPSRC_CONTROL (gst_udpsrc_control_get_type()) static GType -gst_udpsrc_control_get_type(void) { +gst_udpsrc_control_get_type (void) +{ static GType udpsrc_control_type = 0; static GEnumValue udpsrc_control[] = { {CONTROL_NONE, "1", "none"}, @@ -61,26 +63,27 @@ gst_udpsrc_control_get_type(void) { {CONTROL_ZERO, NULL, NULL}, }; if (!udpsrc_control_type) { - udpsrc_control_type = g_enum_register_static("GstUDPSrcControl", udpsrc_control); + udpsrc_control_type = + g_enum_register_static ("GstUDPSrcControl", udpsrc_control); } return udpsrc_control_type; } -static void gst_udpsrc_base_init (gpointer g_class); -static void gst_udpsrc_class_init (GstUDPSrc *klass); -static void gst_udpsrc_init (GstUDPSrc *udpsrc); +static void gst_udpsrc_base_init (gpointer g_class); +static void gst_udpsrc_class_init (GstUDPSrc * klass); +static void gst_udpsrc_init (GstUDPSrc * udpsrc); -static GstData* gst_udpsrc_get (GstPad *pad); -static GstElementStateReturn - gst_udpsrc_change_state (GstElement *element); +static GstData *gst_udpsrc_get (GstPad * pad); +static GstElementStateReturn gst_udpsrc_change_state (GstElement * element); -static void gst_udpsrc_set_property (GObject *object, guint prop_id, - const GValue *value, GParamSpec *pspec); -static void gst_udpsrc_get_property (GObject *object, guint prop_id, - GValue *value, GParamSpec *pspec); -static void gst_udpsrc_set_clock (GstElement *element, GstClock *clock); +static void gst_udpsrc_set_property (GObject * object, guint prop_id, + const GValue * value, GParamSpec * pspec); +static void gst_udpsrc_get_property (GObject * object, guint prop_id, + GValue * value, GParamSpec * pspec); +static void gst_udpsrc_set_clock (GstElement * element, GstClock * clock); static GstElementClass *parent_class = NULL; + /*static guint gst_udpsrc_signals[LAST_SIGNAL] = { 0 }; */ GType @@ -90,18 +93,19 @@ gst_udpsrc_get_type (void) if (!udpsrc_type) { static const GTypeInfo udpsrc_info = { - sizeof(GstUDPSrcClass), + sizeof (GstUDPSrcClass), gst_udpsrc_base_init, NULL, - (GClassInitFunc)gst_udpsrc_class_init, + (GClassInitFunc) gst_udpsrc_class_init, NULL, NULL, - sizeof(GstUDPSrc), + sizeof (GstUDPSrc), 0, - (GInstanceInitFunc)gst_udpsrc_init, + (GInstanceInitFunc) gst_udpsrc_init, NULL }; - udpsrc_type = g_type_register_static (GST_TYPE_ELEMENT, "GstUDPSrc", &udpsrc_info, 0); + udpsrc_type = + g_type_register_static (GST_TYPE_ELEMENT, "GstUDPSrc", &udpsrc_info, 0); } return udpsrc_type; } @@ -115,26 +119,26 @@ gst_udpsrc_base_init (gpointer g_class) } static void -gst_udpsrc_class_init (GstUDPSrc *klass) +gst_udpsrc_class_init (GstUDPSrc * klass) { GObjectClass *gobject_class; GstElementClass *gstelement_class; - gobject_class = (GObjectClass*) klass; - gstelement_class = (GstElementClass*) klass; + gobject_class = (GObjectClass *) klass; + gstelement_class = (GstElementClass *) klass; parent_class = g_type_class_ref (GST_TYPE_ELEMENT); g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_PORT, - g_param_spec_int ("port", "port", "The port to receive the packets from", - 0, 32768, UDP_DEFAULT_PORT, G_PARAM_READWRITE)); + g_param_spec_int ("port", "port", "The port to receive the packets from", + 0, 32768, UDP_DEFAULT_PORT, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, ARG_CONTROL, - g_param_spec_enum ("control", "control", "The type of control", - GST_TYPE_UDPSRC_CONTROL, CONTROL_UDP, G_PARAM_READWRITE)); + g_param_spec_enum ("control", "control", "The type of control", + GST_TYPE_UDPSRC_CONTROL, CONTROL_UDP, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, ARG_MULTICAST_GROUP, - g_param_spec_string ("multicast_group", "multicast_group", - "The Address of multicast group to join", - UDP_DEFAULT_MULTICAST_GROUP, G_PARAM_READWRITE)); + g_param_spec_string ("multicast_group", "multicast_group", + "The Address of multicast group to join", + UDP_DEFAULT_MULTICAST_GROUP, G_PARAM_READWRITE)); gobject_class->set_property = gst_udpsrc_set_property; gobject_class->get_property = gst_udpsrc_get_property; @@ -144,17 +148,17 @@ gst_udpsrc_class_init (GstUDPSrc *klass) } static void -gst_udpsrc_set_clock (GstElement *element, GstClock *clock) +gst_udpsrc_set_clock (GstElement * element, GstClock * clock) { GstUDPSrc *udpsrc; - + udpsrc = GST_UDPSRC (element); udpsrc->clock = clock; } static void -gst_udpsrc_init (GstUDPSrc *udpsrc) +gst_udpsrc_init (GstUDPSrc * udpsrc) { /* create the src and src pads */ udpsrc->srcpad = gst_pad_new ("src", GST_PAD_SRC); @@ -171,8 +175,8 @@ gst_udpsrc_init (GstUDPSrc *udpsrc) udpsrc->first_buf = TRUE; } -static GstData* -gst_udpsrc_get (GstPad *pad) +static GstData * +gst_udpsrc_get (GstPad * pad) { GstUDPSrc *udpsrc; GstBuffer *outbuf; @@ -190,13 +194,13 @@ gst_udpsrc_get (GstPad *pad) FD_ZERO (&read_fds); FD_SET (udpsrc->sock, &read_fds); if (udpsrc->control != CONTROL_NONE) { - FD_SET (udpsrc->control_sock, &read_fds); + FD_SET (udpsrc->control_sock, &read_fds); } - max_sock = MAX(udpsrc->sock, udpsrc->control_sock); + max_sock = MAX (udpsrc->sock, udpsrc->control_sock); - if (select (max_sock+1, &read_fds, NULL, NULL, NULL) > 0) { + if (select (max_sock + 1, &read_fds, NULL, NULL, NULL) > 0) { if ((udpsrc->control_sock != -1) && - FD_ISSET (udpsrc->control_sock, &read_fds)) { + FD_ISSET (udpsrc->control_sock, &read_fds)) { #ifndef GST_DISABLE_LOADSAVE guchar *buf; int ret; @@ -205,94 +209,94 @@ gst_udpsrc_get (GstPad *pad) xmlDocPtr doc; GstCaps *caps; - buf = g_malloc (1024*10); + buf = g_malloc (1024 * 10); switch (udpsrc->control) { - case CONTROL_TCP: - len = sizeof (struct sockaddr); - fdread = accept (udpsrc->control_sock, &addr, &len); - if (fdread < 0) { - perror ("accept"); - } - - ret = read (fdread, buf, 1024*10); - break; - case CONTROL_UDP: - len = sizeof (struct sockaddr); - ret = recvfrom (udpsrc->control_sock, buf, 1024*10, 0, (struct sockaddr *)&tmpaddr, &len); - if (ret < 0) { - perror ("recvfrom"); - } - break; - case CONTROL_NONE: + case CONTROL_TCP: + len = sizeof (struct sockaddr); + fdread = accept (udpsrc->control_sock, &addr, &len); + if (fdread < 0) { + perror ("accept"); + } + + ret = read (fdread, buf, 1024 * 10); + break; + case CONTROL_UDP: + len = sizeof (struct sockaddr); + ret = + recvfrom (udpsrc->control_sock, buf, 1024 * 10, 0, + (struct sockaddr *) &tmpaddr, &len); + if (ret < 0) { + perror ("recvfrom"); + } + break; + case CONTROL_NONE: default: - g_free (buf); - return NULL; - break; + g_free (buf); + return NULL; + break; } buf[ret] = '\0'; - doc = xmlParseMemory(buf, ret); - caps = gst_caps_load_thyself(doc->xmlRootNode); + doc = xmlParseMemory (buf, ret); + caps = gst_caps_load_thyself (doc->xmlRootNode); if (caps == NULL) { - return NULL; + return NULL; } - + /* foward the connect, we don't signal back the result here... */ if (gst_caps_is_fixed (caps)) { - gst_pad_try_set_caps (udpsrc->srcpad, caps); + gst_pad_try_set_caps (udpsrc->srcpad, caps); } else { - GST_ERROR ("caps %" GST_PTR_FORMAT, caps); - GST_ELEMENT_ERROR (udpsrc, CORE, NEGOTIATION, (NULL), ("Got unfixed caps from peer")); + GST_ERROR ("caps %" GST_PTR_FORMAT, caps); + GST_ELEMENT_ERROR (udpsrc, CORE, NEGOTIATION, (NULL), + ("Got unfixed caps from peer")); } #endif g_free (buf); outbuf = NULL; - } - else { + } else { outbuf = gst_buffer_new (); GST_BUFFER_DATA (outbuf) = g_malloc (24000); GST_BUFFER_SIZE (outbuf) = 24000; if (udpsrc->first_buf) { - if (udpsrc->clock) { - GstClockTime current_time; - GstEvent *discont; + if (udpsrc->clock) { + GstClockTime current_time; + GstEvent *discont; + + current_time = gst_clock_get_time (udpsrc->clock); - current_time = gst_clock_get_time (udpsrc->clock); - - GST_BUFFER_TIMESTAMP (outbuf) = current_time; + GST_BUFFER_TIMESTAMP (outbuf) = current_time; - discont = gst_event_new_discontinuous (FALSE, GST_FORMAT_TIME, - current_time, NULL); + discont = gst_event_new_discontinuous (FALSE, GST_FORMAT_TIME, + current_time, NULL); - gst_pad_push (udpsrc->srcpad, GST_DATA (discont)); + gst_pad_push (udpsrc->srcpad, GST_DATA (discont)); } udpsrc->first_buf = FALSE; } - + else { - GST_BUFFER_TIMESTAMP (outbuf) = GST_CLOCK_TIME_NONE; + GST_BUFFER_TIMESTAMP (outbuf) = GST_CLOCK_TIME_NONE; } len = sizeof (struct sockaddr); numbytes = recvfrom (udpsrc->sock, GST_BUFFER_DATA (outbuf), - GST_BUFFER_SIZE (outbuf), 0, (struct sockaddr *)&tmpaddr, &len); + GST_BUFFER_SIZE (outbuf), 0, (struct sockaddr *) &tmpaddr, &len); if (numbytes != -1) { - GST_BUFFER_SIZE (outbuf) = numbytes; - } - else { + GST_BUFFER_SIZE (outbuf) = numbytes; + } else { perror ("recvfrom"); - gst_buffer_unref (outbuf); - outbuf = NULL; + gst_buffer_unref (outbuf); + outbuf = NULL; } - + } - } - else { + } else { perror ("select"); outbuf = NULL; } @@ -301,29 +305,30 @@ gst_udpsrc_get (GstPad *pad) static void -gst_udpsrc_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) +gst_udpsrc_set_property (GObject * object, guint prop_id, const GValue * value, + GParamSpec * pspec) { GstUDPSrc *udpsrc; /* it's not null if we got it, but it might not be ours */ - g_return_if_fail(GST_IS_UDPSRC(object)); - udpsrc = GST_UDPSRC(object); + g_return_if_fail (GST_IS_UDPSRC (object)); + udpsrc = GST_UDPSRC (object); switch (prop_id) { case ARG_PORT: - udpsrc->port = g_value_get_int (value); + udpsrc->port = g_value_get_int (value); break; case ARG_MULTICAST_GROUP: - g_free(udpsrc->multi_group); - + g_free (udpsrc->multi_group); + if (g_value_get_string (value) == NULL) - udpsrc->multi_group = g_strdup (UDP_DEFAULT_MULTICAST_GROUP); + udpsrc->multi_group = g_strdup (UDP_DEFAULT_MULTICAST_GROUP); else - udpsrc->multi_group = g_strdup (g_value_get_string (value)); - + udpsrc->multi_group = g_strdup (g_value_get_string (value)); + break; case ARG_CONTROL: - udpsrc->control = g_value_get_enum (value); + udpsrc->control = g_value_get_enum (value); break; default: break; @@ -331,13 +336,14 @@ gst_udpsrc_set_property (GObject *object, guint prop_id, const GValue *value, GP } static void -gst_udpsrc_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) +gst_udpsrc_get_property (GObject * object, guint prop_id, GValue * value, + GParamSpec * pspec) { GstUDPSrc *udpsrc; /* it's not null if we got it, but it might not be ours */ - g_return_if_fail(GST_IS_UDPSRC(object)); - udpsrc = GST_UDPSRC(object); + g_return_if_fail (GST_IS_UDPSRC (object)); + udpsrc = GST_UDPSRC (object); switch (prop_id) { case ARG_PORT: @@ -357,92 +363,98 @@ gst_udpsrc_get_property (GObject *object, guint prop_id, GValue *value, GParamSp /* create a socket for sending to remote machine */ static gboolean -gst_udpsrc_init_receive (GstUDPSrc *src) +gst_udpsrc_init_receive (GstUDPSrc * src) { guint bc_val; - gint reuse=1; + gint reuse = 1; + memset (&src->myaddr, 0, sizeof (src->myaddr)); - src->myaddr.sin_family = AF_INET; /* host byte order */ - src->myaddr.sin_port = htons (src->port); /* short, network byte order */ + src->myaddr.sin_family = AF_INET; /* host byte order */ + src->myaddr.sin_port = htons (src->port); /* short, network byte order */ src->myaddr.sin_addr.s_addr = INADDR_ANY; if ((src->sock = socket (AF_INET, SOCK_DGRAM, 0)) == -1) { - perror("socket"); + perror ("socket"); return FALSE; } - - if (setsockopt(src->sock, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) == -1) { - perror("setsockopt"); - return FALSE; + + if (setsockopt (src->sock, SOL_SOCKET, SO_REUSEADDR, &reuse, + sizeof (reuse)) == -1) { + perror ("setsockopt"); + return FALSE; } - if (bind (src->sock, (struct sockaddr *) &src->myaddr, sizeof (src->myaddr)) == -1) { - perror("bind"); + if (bind (src->sock, (struct sockaddr *) &src->myaddr, + sizeof (src->myaddr)) == -1) { + perror ("bind"); return FALSE; } if (inet_aton (src->multi_group, &(src->multi_addr.imr_multiaddr))) { if (src->multi_addr.imr_multiaddr.s_addr) { src->multi_addr.imr_interface.s_addr = INADDR_ANY; - setsockopt (src->sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &src->multi_addr, sizeof(src->multi_addr)); + setsockopt (src->sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &src->multi_addr, + sizeof (src->multi_addr)); } } bc_val = 1; setsockopt (src->sock, SOL_SOCKET, SO_BROADCAST, &bc_val, sizeof (bc_val)); - src->myaddr.sin_port = htons (src->port+1); - + src->myaddr.sin_port = htons (src->port + 1); + switch (src->control) { case CONTROL_TCP: - if ((src->control_sock = socket (AF_INET, SOCK_STREAM, 0)) == -1) { - perror("control_socket"); - return FALSE; - } - - if (bind (src->control_sock, (struct sockaddr *) &src->myaddr, sizeof (src->myaddr)) == -1) { - perror("control_bind"); - return FALSE; - } - - if (listen (src->control_sock, 5) == -1) { - perror("listen"); - return FALSE; - } - - fcntl (src->control_sock, F_SETFL, O_NONBLOCK); - - break; + if ((src->control_sock = socket (AF_INET, SOCK_STREAM, 0)) == -1) { + perror ("control_socket"); + return FALSE; + } + + if (bind (src->control_sock, (struct sockaddr *) &src->myaddr, + sizeof (src->myaddr)) == -1) { + perror ("control_bind"); + return FALSE; + } + + if (listen (src->control_sock, 5) == -1) { + perror ("listen"); + return FALSE; + } + + fcntl (src->control_sock, F_SETFL, O_NONBLOCK); + + break; case CONTROL_UDP: - if ((src->control_sock = socket (AF_INET, SOCK_DGRAM, 0)) == -1) { - perror("socket"); - return FALSE; - } - - if (bind (src->control_sock, (struct sockaddr *) &src->myaddr, sizeof (src->myaddr)) == -1) - { - perror("control_bind"); - return FALSE; - } - /* We can only do broadcast in udp */ - bc_val = 1; - setsockopt (src->control_sock, SOL_SOCKET, SO_BROADCAST, &bc_val, sizeof (bc_val)); - break; + if ((src->control_sock = socket (AF_INET, SOCK_DGRAM, 0)) == -1) { + perror ("socket"); + return FALSE; + } + + if (bind (src->control_sock, (struct sockaddr *) &src->myaddr, + sizeof (src->myaddr)) == -1) { + perror ("control_bind"); + return FALSE; + } + /* We can only do broadcast in udp */ + bc_val = 1; + setsockopt (src->control_sock, SOL_SOCKET, SO_BROADCAST, &bc_val, + sizeof (bc_val)); + break; case CONTROL_NONE: - GST_FLAG_SET (src, GST_UDPSRC_OPEN); - return TRUE; - break; + GST_FLAG_SET (src, GST_UDPSRC_OPEN); + return TRUE; + break; default: - return FALSE; - break; + return FALSE; + break; } GST_FLAG_SET (src, GST_UDPSRC_OPEN); - + return TRUE; } static void -gst_udpsrc_close (GstUDPSrc *src) +gst_udpsrc_close (GstUDPSrc * src) { if (src->sock != -1) { close (src->sock); @@ -457,7 +469,7 @@ gst_udpsrc_close (GstUDPSrc *src) } static GstElementStateReturn -gst_udpsrc_change_state (GstElement *element) +gst_udpsrc_change_state (GstElement * element) { g_return_val_if_fail (GST_IS_UDPSRC (element), GST_STATE_FAILURE); @@ -467,7 +479,7 @@ gst_udpsrc_change_state (GstElement *element) } else { if (!GST_FLAG_IS_SET (element, GST_UDPSRC_OPEN)) { if (!gst_udpsrc_init_receive (GST_UDPSRC (element))) - return GST_STATE_FAILURE; + return GST_STATE_FAILURE; } } @@ -476,4 +488,3 @@ gst_udpsrc_change_state (GstElement *element) return GST_STATE_SUCCESS; } - diff --git a/gst/udp/gstudpsrc.h b/gst/udp/gstudpsrc.h index f16673df..bb4273e7 100644 --- a/gst/udp/gstudpsrc.h +++ b/gst/udp/gstudpsrc.h @@ -24,8 +24,9 @@ #include <gst/gst.h> #ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ +extern "C" +{ +#endif /* __cplusplus */ #include <errno.h> #include <string.h> @@ -49,44 +50,47 @@ extern "C" { #define GST_IS_UDPSRC_CLASS(obj) \ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_UDPSRC)) -typedef struct _GstUDPSrc GstUDPSrc; -typedef struct _GstUDPSrcClass GstUDPSrcClass; + typedef struct _GstUDPSrc GstUDPSrc; + typedef struct _GstUDPSrcClass GstUDPSrcClass; -typedef enum { - GST_UDPSRC_OPEN = GST_ELEMENT_FLAG_LAST, + typedef enum + { + GST_UDPSRC_OPEN = GST_ELEMENT_FLAG_LAST, - GST_UDPSRC_FLAG_LAST = GST_ELEMENT_FLAG_LAST + 2, -} GstUDPSrcFlags; + GST_UDPSRC_FLAG_LAST = GST_ELEMENT_FLAG_LAST + 2, + } GstUDPSrcFlags; -struct _GstUDPSrc { - GstElement element; + struct _GstUDPSrc + { + GstElement element; - /* pads */ - GstPad *sinkpad,*srcpad; + /* pads */ + GstPad *sinkpad, *srcpad; - int port; - int sock; - int control_sock; - Gst_UDP_Control control; - gchar *multi_group; + int port; + int sock; + int control_sock; + Gst_UDP_Control control; + gchar *multi_group; - struct sockaddr_in myaddr; - struct ip_mreq multi_addr; - GstClock *clock; + struct sockaddr_in myaddr; + struct ip_mreq multi_addr; + GstClock *clock; - gboolean first_buf; -}; + gboolean first_buf; + }; -struct _GstUDPSrcClass { - GstElementClass parent_class; -}; + struct _GstUDPSrcClass + { + GstElementClass parent_class; + }; -GType gst_udpsrc_get_type(void); + GType gst_udpsrc_get_type (void); #ifdef __cplusplus } -#endif /* __cplusplus */ +#endif /* __cplusplus */ -#endif /* __GST_UDPSRC_H__ */ +#endif /* __GST_UDPSRC_H__ */ |