Browse Source

rtpproto: Support nonblocking reads

Signed-off-by: Martin Storsjö <martin@martin.st>
tags/n2.1
Martin Storsjö 12 years ago
parent
commit
54e03ff6af
1 changed files with 4 additions and 1 deletions
  1. +4
    -1
      libavformat/rtpproto.c

+ 4
- 1
libavformat/rtpproto.c View File

@@ -326,12 +326,13 @@ static int rtp_read(URLContext *h, uint8_t *buf, int size)
socklen_t from_len;
int len, n;
struct pollfd p[2] = {{s->rtp_fd, POLLIN, 0}, {s->rtcp_fd, POLLIN, 0}};
int poll_delay = h->flags & AVIO_FLAG_NONBLOCK ? 0 : 100;

for(;;) {
if (ff_check_interrupt(&h->interrupt_callback))
return AVERROR_EXIT;
/* build fdset to listen to RTP and RTCP packets */
n = poll(p, 2, 100);
n = poll(p, 2, poll_delay);
if (n > 0) {
/* first try RTCP */
if (p[1].revents & POLLIN) {
@@ -368,6 +369,8 @@ static int rtp_read(URLContext *h, uint8_t *buf, int size)
continue;
return AVERROR(EIO);
}
if (h->flags & AVIO_FLAG_NONBLOCK)
return AVERROR(EAGAIN);
}
return len;
}


Loading…
Cancel
Save