gst/udp/gstudpsrc.c: Improve UDP performance by avoiding a select() when we have...
authorWim Taymans <wim.taymans@gmail.com>
Thu, 16 Aug 2007 11:49:01 +0000 (11:49 +0000)
committerWim Taymans <wim.taymans@gmail.com>
Thu, 16 Aug 2007 11:49:01 +0000 (11:49 +0000)
Original commit message from CVS:
* gst/udp/gstudpsrc.c: (gst_udpsrc_create):
Improve UDP performance by avoiding a select() when we have data
available immediatly.

ChangeLog
gst/udp/gstudpsrc.c

index 69a5b2d..e5fe5a6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2007-08-16  Wim Taymans  <wim.taymans@gmail.com>
 
+       * gst/udp/gstudpsrc.c: (gst_udpsrc_create):
+       Improve UDP performance by avoiding a select() when we have data
+       available immediatly.
+
+2007-08-16  Wim Taymans  <wim.taymans@gmail.com>
+
        * gst/rtsp/gstrtpdec.c: (gst_rtp_dec_marshal_VOID__UINT_UINT),
        (gst_rtp_dec_class_init):
        * gst/rtsp/gstrtpdec.h:
index 1c26c56..5b847b0 100644 (file)
@@ -368,6 +368,14 @@ gst_udpsrc_create (GstPushSrc * psrc, GstBuffer ** buf)
 
   udpsrc = GST_UDPSRC (psrc);
 
+  /* quick check, avoid going in select when we already have data */
+  readsize = 0;
+  if ((ret = IOCTL_SOCKET (udpsrc->sock, FIONREAD, &readsize)) < 0)
+    goto ioctl_failed;
+
+  if (readsize > 0)
+    goto no_select;
+
   do {
     gboolean stop;
     struct timeval timeval, *timeout;
@@ -433,11 +441,12 @@ gst_udpsrc_create (GstPushSrc * psrc, GstBuffer ** buf)
   if ((ret = IOCTL_SOCKET (udpsrc->sock, FIONREAD, &readsize)) < 0)
     goto ioctl_failed;
 
-  GST_LOG_OBJECT (udpsrc, "ioctl says %d bytes available", (int) readsize);
-
   if (!readsize)
     goto nothing_to_read;
 
+no_select:
+  GST_LOG_OBJECT (udpsrc, "ioctl says %d bytes available", (int) readsize);
+
   pktdata = g_malloc (readsize);
   pktsize = readsize;