[FFmpeg-cvslog] r15853 - trunk/libavformat/rdt.c

rbultje subversion
Mon Nov 17 15:32:02 CET 2008


Author: rbultje
Date: Mon Nov 17 15:32:01 2008
New Revision: 15853

Log:
Read optional components of the RDT packet header, such as extended setID
and streamID and the length. of the packet in case of packet concatenation.
Discussed in ML thread "[PATCH] RDT/Realmedia patches #2".



Modified:
   trunk/libavformat/rdt.c

Modified: trunk/libavformat/rdt.c
==============================================================================
--- trunk/libavformat/rdt.c	(original)
+++ trunk/libavformat/rdt.c	Mon Nov 17 15:32:01 2008
@@ -177,7 +177,8 @@ ff_rdt_parse_header(const uint8_t *buf, 
                     int *pis_keyframe, uint32_t *ptimestamp)
 {
     GetBitContext gb;
-    int consumed = 0, set_id, seq_no, stream_id, is_keyframe;
+    int consumed = 0, set_id, seq_no, stream_id, is_keyframe,
+        len_included, need_reliable;
     uint32_t timestamp;
 
     /* skip status packets */
@@ -192,7 +193,7 @@ ff_rdt_parse_header(const uint8_t *buf, 
         len -= pkt_len;
         consumed += pkt_len;
     }
-    if (len < 10)
+    if (len < 16)
         return -1;
     /**
      * Layout of the header (in bits):
@@ -246,15 +247,23 @@ ff_rdt_parse_header(const uint8_t *buf, 
      *     http://anonsvn.wireshark.org/viewvc/trunk/epan/dissectors/packet-rdt.c
      */
     init_get_bits(&gb, buf, len << 3);
-    skip_bits(&gb, 2);
+    len_included  = get_bits1(&gb);
+    need_reliable = get_bits1(&gb);
     set_id        = get_bits(&gb, 5);
     skip_bits(&gb, 1);
     seq_no        = get_bits(&gb, 16);
+    if (len_included)
+        skip_bits(&gb, 16);
     skip_bits(&gb, 2);
     stream_id     = get_bits(&gb, 5);
     is_keyframe   = !get_bits1(&gb);
     timestamp     = get_bits_long(&gb, 32);
+    if (set_id == 0x1f)
+        set_id    = get_bits(&gb, 16);
+    if (need_reliable)
     skip_bits(&gb, 16);
+    if (stream_id == 0x1f)
+        stream_id = get_bits(&gb, 16);
 
     if (pset_id)      *pset_id      = set_id;
     if (pseq_no)      *pseq_no      = seq_no;




More information about the ffmpeg-cvslog mailing list