Commit 94f9d6e0 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

RTP: skip reordering timer in case of TCP

parent 05c3deaf
...@@ -163,7 +163,6 @@ void *rtp_stream_thread (void *opaque) ...@@ -163,7 +163,6 @@ void *rtp_stream_thread (void *opaque)
for (;;) for (;;)
{ {
/* There is no reordering on stream sockets, so no timeout. */ /* There is no reordering on stream sockets, so no timeout. */
/* FIXME: hack rtp_dequeue() to skip the reordering/timer */
ssize_t val; ssize_t val;
uint16_t frame_len; uint16_t frame_len;
...@@ -186,6 +185,7 @@ void *rtp_stream_thread (void *opaque) ...@@ -186,6 +185,7 @@ void *rtp_stream_thread (void *opaque)
int canc = vlc_savecancel (); int canc = vlc_savecancel ();
rtp_process (demux, block); rtp_process (demux, block);
rtp_dequeue_force (demux, sys->session);
vlc_restorecancel (canc); vlc_restorecancel (canc);
} }
#else #else
......
...@@ -52,6 +52,7 @@ rtp_session_t *rtp_session_create (demux_t *); ...@@ -52,6 +52,7 @@ rtp_session_t *rtp_session_create (demux_t *);
void rtp_session_destroy (demux_t *, rtp_session_t *); void rtp_session_destroy (demux_t *, rtp_session_t *);
void rtp_queue (demux_t *, rtp_session_t *, block_t *); void rtp_queue (demux_t *, rtp_session_t *, block_t *);
bool rtp_dequeue (demux_t *, const rtp_session_t *, mtime_t *); bool rtp_dequeue (demux_t *, const rtp_session_t *, mtime_t *);
void rtp_dequeue_force (demux_t *, const rtp_session_t *);
int rtp_add_type (demux_t *demux, rtp_session_t *ses, const rtp_pt_t *pt); int rtp_add_type (demux_t *demux, rtp_session_t *ses, const rtp_pt_t *pt);
void *rtp_dgram_thread (void *data); void *rtp_dgram_thread (void *data);
......
...@@ -461,6 +461,21 @@ bool rtp_dequeue (demux_t *demux, const rtp_session_t *session, ...@@ -461,6 +461,21 @@ bool rtp_dequeue (demux_t *demux, const rtp_session_t *session,
return pending; return pending;
} }
/**
* Dequeues all RTP packets and pass them to decoder. Not cancellation-safe(?).
* This function can be used when the packet source is known not to reorder.
*/
void rtp_dequeue_force (demux_t *demux, const rtp_session_t *session)
{
for (unsigned i = 0, max = session->srcc; i < max; i++)
{
rtp_source_t *src = session->srcv[i];
block_t *block;
while (((block = src->blocks)) != NULL)
rtp_decode (demux, session, src);
}
}
/** /**
* Decodes one RTP packet. * Decodes one RTP packet.
......
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