[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