]> git.sesse.net Git - vlc/commitdiff
RTP: set the discontinuity flag as appropriate
authorRémi Denis-Courmont <rdenis@simphalempin.com>
Sun, 8 Jun 2008 14:52:16 +0000 (17:52 +0300)
committerRémi Denis-Courmont <rdenis@simphalempin.com>
Sun, 8 Jun 2008 15:40:36 +0000 (18:40 +0300)
modules/demux/rtpsession.c

index 8339f26087d05d6369f6a126c1f21e7996775c67..62c24fdcce279332b1b9555f466939f80bc4767a 100644 (file)
@@ -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;