mirror of https://git.ffmpeg.org/ffmpeg.git
rtpproto: Support nonblocking reads
Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
parent
2e814d0329
commit
54e03ff6af
|
@ -326,12 +326,13 @@ static int rtp_read(URLContext *h, uint8_t *buf, int size)
|
||||||
socklen_t from_len;
|
socklen_t from_len;
|
||||||
int len, n;
|
int len, n;
|
||||||
struct pollfd p[2] = {{s->rtp_fd, POLLIN, 0}, {s->rtcp_fd, POLLIN, 0}};
|
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(;;) {
|
for(;;) {
|
||||||
if (ff_check_interrupt(&h->interrupt_callback))
|
if (ff_check_interrupt(&h->interrupt_callback))
|
||||||
return AVERROR_EXIT;
|
return AVERROR_EXIT;
|
||||||
/* build fdset to listen to RTP and RTCP packets */
|
/* build fdset to listen to RTP and RTCP packets */
|
||||||
n = poll(p, 2, 100);
|
n = poll(p, 2, poll_delay);
|
||||||
if (n > 0) {
|
if (n > 0) {
|
||||||
/* first try RTCP */
|
/* first try RTCP */
|
||||||
if (p[1].revents & POLLIN) {
|
if (p[1].revents & POLLIN) {
|
||||||
|
@ -368,6 +369,8 @@ static int rtp_read(URLContext *h, uint8_t *buf, int size)
|
||||||
continue;
|
continue;
|
||||||
return AVERROR(EIO);
|
return AVERROR(EIO);
|
||||||
}
|
}
|
||||||
|
if (h->flags & AVIO_FLAG_NONBLOCK)
|
||||||
|
return AVERROR(EAGAIN);
|
||||||
}
|
}
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue