On 16/03/2017 10:27, Martin Storsjö wrote: > On Tue, 14 Mar 2017, Luca Barbato wrote: > >> Makes easier manage the polling function pending the >> threading support. >> --- >> >> libavformat/rtsp.c | 57 >> ++++++++++++++++++++++++++++++------------------------ >> 1 file changed, 32 insertions(+), 25 deletions(-) >> >> diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c >> index 9839aba..226b46a 100644 >> --- a/libavformat/rtsp.c >> +++ b/libavformat/rtsp.c >> @@ -1933,12 +1933,39 @@ static void *udp_read_loop(void *arg) >> return NULL; >> } >> >> +static int parse_rtsp_message(AVFormatContext *s) >> +{ >> + RTSPState *rt = s->priv_data; >> + int ret; >> + >> + if (rt->rtsp_flags & RTSP_FLAG_LISTEN) { >> + if (rt->state == RTSP_STATE_STREAMING) { >> + if (!ff_rtsp_parse_streaming_commands(s)) >> + return AVERROR_EOF; >> + else >> + av_log(s, AV_LOG_WARNING, >> + "Unable to answer to TEARDOWN\n"); >> + } else >> + return 0; >> + } else { >> + RTSPMessageHeader reply; >> + ret = ff_rtsp_read_reply(s, &reply, NULL, 0, NULL); >> + if (ret < 0) >> + return ret; >> + /* XXX: parse message */ >> + if (rt->state != RTSP_STATE_STREAMING) >> + return 0; >> + } >> + >> + return 0; >> +} >> + >> static int udp_read_packet(AVFormatContext *s, RTSPStream **prtsp_st, >> uint8_t *buf, int buf_size, int64_t wait_end) >> { >> RTSPState *rt = s->priv_data; >> RTSPStream *rtsp_st; >> - int n, i, ret, tcp_fd, timeout_cnt = 0; >> + int n, i, ret, timeout_cnt = 0; >> struct pollfd *p = rt->p; >> int *fds = NULL, fdsnum, fdsidx; >> >> @@ -1952,11 +1979,8 @@ static int udp_read_packet(AVFormatContext *s, >> RTSPStream **prtsp_st, >> return AVERROR(ENOMEM); >> >> if (rt->rtsp_hd) { >> - tcp_fd = ffurl_get_file_handle(rt->rtsp_hd); >> - p[rt->max_p].fd = tcp_fd; >> + p[rt->max_p].fd = ffurl_get_file_handle(rt->rtsp_hd); >> p[rt->max_p++].events = POLLIN; >> - } else { >> - tcp_fd = -1; >> } >> for (i = 0; i < rt->nb_rtsp_streams; i++) { >> rtsp_st = rt->rtsp_streams[i]; >> @@ -1987,7 +2011,7 @@ static int udp_read_packet(AVFormatContext *s, >> RTSPStream **prtsp_st, >> return AVERROR(EAGAIN); >> n = poll(p, rt->max_p, POLL_TIMEOUT_MS); >> if (n > 0) { >> - int j = 1 - (tcp_fd == -1); >> + int j = 1 - (!!rt->rtsp_hd); > > Isn't this the wrong way around? > > To keep the existing logic, you could make it "1 - !rt->rtsp_hd", but > you could also make it just "j = !!rt->rtsp_hd", or "j = rt->rtsp_hd ? 1 > : 0" to make it extra clear. Using !! to make it {0,1} here is pretty > confusing already, since it's about picking a start index for the array... > > The rest of it looks mostly ok.
Locally changed to be j = rt->rtsp_hd ? 1 : 0; Thank you :) _______________________________________________ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel