Commit 892b0be1 authored by Martin Storsjö's avatar Martin Storsjö

rtpproto: Simplify the rtp_read function by looping over the fds

This avoids having duplicate code where only the fd parameter
differs.
Signed-off-by: 's avatarMartin Storsjö <martin@martin.st>
parent 7531588f
...@@ -324,7 +324,7 @@ static int rtp_read(URLContext *h, uint8_t *buf, int size) ...@@ -324,7 +324,7 @@ static int rtp_read(URLContext *h, uint8_t *buf, int size)
RTPContext *s = h->priv_data; RTPContext *s = h->priv_data;
struct sockaddr_storage from; struct sockaddr_storage from;
socklen_t from_len; socklen_t from_len;
int len, n; int len, n, i;
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; int poll_delay = h->flags & AVIO_FLAG_NONBLOCK ? 0 : 100;
...@@ -333,25 +333,12 @@ static int rtp_read(URLContext *h, uint8_t *buf, int size) ...@@ -333,25 +333,12 @@ static int rtp_read(URLContext *h, uint8_t *buf, int size)
return AVERROR_EXIT; return AVERROR_EXIT;
n = poll(p, 2, poll_delay); n = poll(p, 2, poll_delay);
if (n > 0) { if (n > 0) {
/* first try RTCP */ /* first try RTCP, then RTP */
if (p[1].revents & POLLIN) { for (i = 1; i >= 0; i--) {
from_len = sizeof(from); if (!(p[i].revents & POLLIN))
len = recvfrom (s->rtcp_fd, buf, size, 0,
(struct sockaddr *)&from, &from_len);
if (len < 0) {
if (ff_neterrno() == AVERROR(EAGAIN) ||
ff_neterrno() == AVERROR(EINTR))
continue; continue;
return AVERROR(EIO);
}
if (rtp_check_source_lists(s, &from))
continue;
break;
}
/* then RTP */
if (p[0].revents & POLLIN) {
from_len = sizeof(from); from_len = sizeof(from);
len = recvfrom (s->rtp_fd, buf, size, 0, len = recvfrom(p[i].fd, buf, size, 0,
(struct sockaddr *)&from, &from_len); (struct sockaddr *)&from, &from_len);
if (len < 0) { if (len < 0) {
if (ff_neterrno() == AVERROR(EAGAIN) || if (ff_neterrno() == AVERROR(EAGAIN) ||
...@@ -361,7 +348,7 @@ static int rtp_read(URLContext *h, uint8_t *buf, int size) ...@@ -361,7 +348,7 @@ static int rtp_read(URLContext *h, uint8_t *buf, int size)
} }
if (rtp_check_source_lists(s, &from)) if (rtp_check_source_lists(s, &from))
continue; continue;
break; return len;
} }
} else if (n < 0) { } else if (n < 0) {
if (ff_neterrno() == AVERROR(EINTR)) if (ff_neterrno() == AVERROR(EINTR))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment