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:
parent
aa1297882f
commit
63afc4f638
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user