From 43af8b2b42fb6c8affe9261d5212d25fef53a773 Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Mon, 17 Nov 2008 14:32:01 +0000 Subject: 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". Originally committed as revision 15853 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/rdt.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'libavformat/rdt.c') diff --git a/libavformat/rdt.c b/libavformat/rdt.c index f47147f5fe..b1e5d25133 100644 --- a/libavformat/rdt.c +++ b/libavformat/rdt.c @@ -177,7 +177,8 @@ ff_rdt_parse_header(const uint8_t *buf, int len, 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, int len, 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, int len, * 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; -- cgit v1.2.3