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

RTP: notify demux thread when RTP flow is dead

parent 431e5dfa
...@@ -160,30 +160,32 @@ void *rtp_thread (void *data) ...@@ -160,30 +160,32 @@ void *rtp_thread (void *data)
demux_t *demux = data; demux_t *demux = data;
demux_sys_t *p_sys = demux->p_sys; demux_sys_t *p_sys = demux->p_sys;
for (;;) do
{ {
block_t *block = rtp_recv (demux); block_t *block = rtp_recv (demux);
if (block == NULL)
break; /* fatal error: abort */
vlc_mutex_lock (&p_sys->lock); vlc_mutex_lock (&p_sys->lock);
if (block == NULL)
/* Autodetect payload type, _before_ rtp_queue() */ p_sys->dead = true; /* Fatal error: abort */
if (p_sys->autodetect) else
{ {
if (p_sys->autodetect)
{ /* Autodetect payload type, _before_ rtp_queue() */
if (rtp_autodetect (demux, p_sys->session, block)) if (rtp_autodetect (demux, p_sys->session, block))
{ {
vlc_mutex_unlock (&p_sys->lock);
block_Release (block); block_Release (block);
continue; continue;
} }
p_sys->autodetect = false; p_sys->autodetect = false;
} }
rtp_queue (demux, p_sys->session, block); rtp_queue (demux, p_sys->session, block);
}
vlc_cond_signal (&p_sys->wait); vlc_cond_signal (&p_sys->wait);
vlc_mutex_unlock (&p_sys->lock); vlc_mutex_unlock (&p_sys->lock);
} }
/* TODO: return 0 from Demux */ while (!p_sys->dead);
return NULL; return NULL;
} }
......
...@@ -237,6 +237,7 @@ static int Open (vlc_object_t *obj) ...@@ -237,6 +237,7 @@ static int Open (vlc_object_t *obj)
p_sys->max_misorder = var_CreateGetInteger (obj, "rtp-max-misorder"); p_sys->max_misorder = var_CreateGetInteger (obj, "rtp-max-misorder");
p_sys->autodetect = true; p_sys->autodetect = true;
p_sys->framed_rtp = (tp == IPPROTO_TCP); p_sys->framed_rtp = (tp == IPPROTO_TCP);
p_sys->dead = false;
demux->pf_demux = Demux; demux->pf_demux = Demux;
demux->pf_control = Control; demux->pf_control = Control;
......
...@@ -63,10 +63,11 @@ struct demux_sys_t ...@@ -63,10 +63,11 @@ struct demux_sys_t
unsigned caching; unsigned caching;
unsigned timeout; unsigned timeout;
uint8_t max_src; uint16_t max_dropout; /**< Max packet forward misordering */
uint16_t max_dropout; uint16_t max_misorder; /**< Max packet backward misordering */
uint16_t max_misorder; uint8_t max_src; /**< Max simultaneous RTP sources */
bool autodetect; bool autodetect; /**< Payload format autodetection */
bool framed_rtp; bool framed_rtp; /**< Framed RTP packets over TCP */
bool dead; /**< End of stream */
}; };
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