1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-23 12:43:46 +02:00

udp: use non-blocking read instead of select.

This commit is contained in:
Nicolas George 2012-03-15 13:07:10 +01:00
parent aa1297882f
commit 63afc4f638

View File

@ -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);