[FFmpeg-cvslog] rtpproto: Support nonblocking reads
Martin Storsjö
git at videolan.org
Thu Aug 1 11:53:28 CEST 2013
ffmpeg | branch: master | Martin Storsjö <martin at martin.st> | Fri Jul 26 20:24:06 2013 +0300| [54e03ff6af8a070f1055edd26028f3f7b2e2ca8e] | committer: Martin Storsjö
rtpproto: Support nonblocking reads
Signed-off-by: Martin Storsjö <martin at martin.st>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=54e03ff6af8a070f1055edd26028f3f7b2e2ca8e
---
libavformat/rtpproto.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/libavformat/rtpproto.c b/libavformat/rtpproto.c
index b82e2f7..024c69b 100644
--- a/libavformat/rtpproto.c
+++ b/libavformat/rtpproto.c
@@ -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;
}
More information about the ffmpeg-cvslog
mailing list