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