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;
}
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;
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 */
};