From e03130e4d0c97aaf0cdced7ece6d3077bdcd01b9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Thu, 27 Nov 2008 18:43:15 +0200 Subject: [PATCH] RTP: notify demux thread when RTP flow is dead --- modules/access/rtp/input.c | 30 ++++++++++++++++-------------- modules/access/rtp/rtp.c | 1 + modules/access/rtp/rtp.h | 11 ++++++----- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/modules/access/rtp/input.c b/modules/access/rtp/input.c index 995c7ba373..dc1110b149 100644 --- a/modules/access/rtp/input.c +++ b/modules/access/rtp/input.c @@ -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; } diff --git a/modules/access/rtp/rtp.c b/modules/access/rtp/rtp.c index 0fb398feb3..c3b4bd07a1 100644 --- a/modules/access/rtp/rtp.c +++ b/modules/access/rtp/rtp.c @@ -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; diff --git a/modules/access/rtp/rtp.h b/modules/access/rtp/rtp.h index c27c2895ab..98616641c1 100644 --- a/modules/access/rtp/rtp.h +++ b/modules/access/rtp/rtp.h @@ -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 */ }; -- 2.39.2