From 3e3e4050ad254cdc5c1e60ca860ea71635a9d244 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Sun, 8 Jun 2008 17:52:16 +0300 Subject: [PATCH] RTP: set the discontinuity flag as appropriate --- modules/demux/rtpsession.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/modules/demux/rtpsession.c b/modules/demux/rtpsession.c index 8339f26087..62c24fdcce 100644 --- a/modules/demux/rtpsession.c +++ b/modules/demux/rtpsession.c @@ -141,6 +141,7 @@ struct rtp_source_t uint16_t bad_seq; /* tentatively next expected sequence for resync */ uint16_t max_seq; /* next expected sequence */ + uint16_t last_seq; /* sequence of the last dequeued packet */ block_t *blocks; /* re-ordered blocks queue */ void *opaque[0]; /* Per-source private payload data */ }; @@ -160,6 +161,7 @@ rtp_source_create (demux_t *demux, const rtp_session_t *session, source->ssrc = ssrc; source->max_seq = source->bad_seq = init_seq; + source->last_seq = init_seq - 1; source->blocks = NULL; /* Initializes all payload */ @@ -324,6 +326,11 @@ rtp_decode (demux_t *demux, const rtp_session_t *session, rtp_source_t *src) src->blocks = block->p_next; block->p_next = NULL; + /* Discontinuity detection */ + if (((src->last_seq + 1) & 0xffff) != rtp_seq (block)) + block->i_flags |= BLOCK_FLAG_DISCONTINUITY; + src->last_seq = rtp_seq (block); + /* Match the payload type */ const rtp_pt_t *pt = NULL; void *pt_data = NULL; -- 2.11.4.GIT