summaryrefslogtreecommitdiffstats
path: root/gst/udp/gstudpsink.c
diff options
context:
space:
mode:
authorZeeshan Ali <zeenix@gmail.com>2002-12-20 21:38:35 +0000
committerZeeshan Ali <zeenix@gmail.com>2002-12-20 21:38:35 +0000
commit1e2eb46c0b156e7a182acc244e771f9e0c978ad6 (patch)
treed65030fe0ca17eb90765a47582247e5f030dd42d /gst/udp/gstudpsink.c
parent1a7bf2daca60ea40b513d1984a7c1043e7567a0c (diff)
added mtu option
Original commit message from CVS: added mtu option
Diffstat (limited to 'gst/udp/gstudpsink.c')
-rw-r--r--gst/udp/gstudpsink.c40
1 files changed, 31 insertions, 9 deletions
diff --git a/gst/udp/gstudpsink.c b/gst/udp/gstudpsink.c
index 3ed5271d..d4aca9c2 100644
--- a/gst/udp/gstudpsink.c
+++ b/gst/udp/gstudpsink.c
@@ -46,7 +46,8 @@ enum {
ARG_0,
ARG_HOST,
ARG_PORT,
- ARG_CONTROL
+ ARG_CONTROL,
+ ARG_MTU
/* FILL ME */
};
@@ -127,6 +128,9 @@ gst_udpsink_class_init (GstUDPSink *klass)
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", "mtu", 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;
@@ -245,6 +249,7 @@ gst_udpsink_init (GstUDPSink *udpsink)
udpsink->host = g_strdup (UDP_DEFAULT_HOST);
udpsink->port = UDP_DEFAULT_PORT;
udpsink->control = CONTROL_UDP;
+ udpsink->mtu = 1024;
udpsink->clock = NULL;
}
@@ -253,7 +258,7 @@ static void
gst_udpsink_chain (GstPad *pad, GstBuffer *buf)
{
GstUDPSink *udpsink;
- int tolen;
+ guint tolen, i;
GstClockTimeDiff *jitter = NULL;
g_return_if_fail (pad != NULL);
@@ -266,14 +271,25 @@ gst_udpsink_chain (GstPad *pad, GstBuffer *buf)
GST_DEBUG (0, "udpsink: clock wait: %llu\n", GST_BUFFER_TIMESTAMP (buf));
gst_element_clock_wait (GST_ELEMENT (udpsink), udpsink->clock, GST_BUFFER_TIMESTAMP (buf), jitter);
}
-
+
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");
- }
+
+ 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");
+ }
+ }
+ }
gst_buffer_unref(buf);
}
@@ -301,6 +317,9 @@ gst_udpsink_set_property (GObject *object, guint prop_id, const GValue *value, G
case ARG_CONTROL:
udpsink->control = g_value_get_enum (value);
break;
+ case ARG_MTU:
+ udpsink->mtu = g_value_get_int (value);
+ break;
default:
break;
}
@@ -325,6 +344,9 @@ gst_udpsink_get_property (GObject *object, guint prop_id, GValue *value, GParamS
case ARG_CONTROL:
g_value_set_enum (value, udpsink->control);
break;
+ case ARG_MTU:
+ g_value_set_int (value, udpsink->mtu);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;