[FFmpeg-devel] [PATCH 2/5] udp: use non-blocking read instead of select.

Nicolas George nicolas.george at normalesup.org
Thu Mar 15 13:46:45 CET 2012


Signed-off-by: Nicolas George <nicolas.george at normalesup.org>
---
 libavformat/udp.c |   21 +--------------------
 1 files changed, 1 insertions(+), 20 deletions(-)

diff --git a/libavformat/udp.c b/libavformat/udp.c
index 0a831e8..dad79ff 100644
--- a/libavformat/udp.c
+++ b/libavformat/udp.c
@@ -327,33 +327,14 @@ static void *circular_buffer_task( void *_URLContext)
 {
     URLContext *h = _URLContext;
     UDPContext *s = h->priv_data;
-    fd_set rfds;
-    struct timeval tv;
     int old_cancelstate;
 
     pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &old_cancelstate);
+    ff_socket_nonblock(s->udp_fd, 0);
     while(1) {
         int left;
-        int ret;
         int len;
 
-        FD_ZERO(&rfds);
-        FD_SET(s->udp_fd, &rfds);
-        tv.tv_sec = 1;
-        tv.tv_usec = 0;
-        pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &old_cancelstate);
-        ret = select(s->udp_fd + 1, &rfds, NULL, NULL, &tv);
-        pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &old_cancelstate);
-        if (ret < 0) {
-            if (ff_neterrno() == AVERROR(EINTR))
-                continue;
-            s->circular_buffer_error = AVERROR(EIO);
-            goto end;
-        }
-
-        if (!(ret > 0 && FD_ISSET(s->udp_fd, &rfds)))
-            continue;
-
         /* How much do we have left to the end of the buffer */
         /* Whats the minimum we can read so that we dont comletely fill the buffer */
         left = av_fifo_space(s->fifo);
-- 
1.7.9.1



More information about the ffmpeg-devel mailing list