rtsp: Recheck the reordering queue if getting a new packet
If we timed out and consumed a packet from the reordering queue, but didn't return a packet to the caller, recheck the queue status. Otherwise, we could end up in an infinite loop, trying to consume a queued packet that has already been consumed. CC: libav-stable@libav.org Signed-off-by: Martin Storsjö <martin@martin.st> (cherry picked from commit 8729698d50739524665090e083d1bfdf28235724) Signed-off-by: Reinhard Tartler <siretart@tauware.de>
This commit is contained in:
parent
dfb7a638e6
commit
d1d329932f
@ -1711,6 +1711,7 @@ int ff_rtsp_fetch_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
rt->cur_transport_priv = NULL;
|
||||
}
|
||||
|
||||
redo:
|
||||
if (rt->transport == RTSP_TRANSPORT_RTP) {
|
||||
int i;
|
||||
int64_t first_queue_time = 0;
|
||||
@ -1726,12 +1727,15 @@ int ff_rtsp_fetch_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
first_queue_st = rt->rtsp_streams[i];
|
||||
}
|
||||
}
|
||||
if (first_queue_time)
|
||||
if (first_queue_time) {
|
||||
wait_end = first_queue_time + s->max_delay;
|
||||
} else {
|
||||
wait_end = 0;
|
||||
first_queue_st = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* read next RTP packet */
|
||||
redo:
|
||||
if (!rt->recvbuf) {
|
||||
rt->recvbuf = av_malloc(RECVBUF_SIZE);
|
||||
if (!rt->recvbuf)
|
||||
|
Loading…
x
Reference in New Issue
Block a user