diff options
author | Ronald S. Bultje <rsbultje@gmail.com> | 2008-11-30 22:24:35 +0000 |
---|---|---|
committer | Ronald S. Bultje <rsbultje@gmail.com> | 2008-11-30 22:24:35 +0000 |
commit | 4f602856588f930d3aec1071a627eaf5be926cdb (patch) | |
tree | 085ad7673f93ce57579439cf438ed1982eb26826 /libavformat | |
parent | 79a1f3c023dda1458c6f4a79e508fe9d031152df (diff) | |
download | ffmpeg-4f602856588f930d3aec1071a627eaf5be926cdb.tar.gz |
Change RDTDemuxContext->st into an array of streams, which will make future
patches adding stream-selection easier in code. See discussion in ML thread
"[PATCH] RDT/Realmedia patches #2".
Originally committed as revision 15964 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/rdt.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/libavformat/rdt.c b/libavformat/rdt.c index 645b5806cd..3050a91c9c 100644 --- a/libavformat/rdt.c +++ b/libavformat/rdt.c @@ -37,7 +37,13 @@ struct RDTDemuxContext { AVFormatContext *ic; /**< the containing (RTSP) demux context */ - AVStream *st; + /** Each RDT stream-set (represented by one RTSPStream) can contain + * multiple streams (of the same content, but with possibly different + * codecs/bitrates). Each such stream is represented by one AVStream + * in the AVFormatContext, and this variable points to the offset in + * that array such that the first is the first stream of this set. */ + AVStream **streams; + int n_streams; /**< streams with identifical content in this set */ void *dynamic_protocol_context; DynamicPayloadPacketHandlerProc parse_packet; uint32_t prev_timestamp; @@ -53,7 +59,11 @@ ff_rdt_parse_open(AVFormatContext *ic, int first_stream_of_set_idx, return NULL; s->ic = ic; - s->st = ic->streams[first_stream_of_set_idx]; + s->streams = &ic->streams[first_stream_of_set_idx]; + do { + s->n_streams++; + } while (first_stream_of_set_idx + s->n_streams < ic->nb_streams && + s->streams[s->n_streams]->priv_data == s->streams[0]->priv_data); s->prev_set_id = -1; s->prev_timestamp = -1; s->parse_packet = handler->parse_packet; @@ -328,7 +338,7 @@ ff_rdt_parse_packet(RDTDemuxContext *s, AVPacket *pkt, /* return the next packets, if any */ timestamp= 0; ///< Should not be used if buf is NULL, but should be set to the timestamp of the packet returned.... rv= s->parse_packet(s->dynamic_protocol_context, - s->st, pkt, ×tamp, NULL, 0, flags); + s->streams[0], pkt, ×tamp, NULL, 0, flags); return rv; } @@ -346,7 +356,7 @@ ff_rdt_parse_packet(RDTDemuxContext *s, AVPacket *pkt, len -= rv; rv = s->parse_packet(s->dynamic_protocol_context, - s->st, pkt, ×tamp, buf, len, flags); + s->streams[0], pkt, ×tamp, buf, len, flags); return rv; } @@ -365,7 +375,7 @@ ff_rdt_subscribe_rule2 (RDTDemuxContext *s, char *cmd, int size, { PayloadContext *rdt = s->dynamic_protocol_context; - rdt_load_mdpr(rdt, s->st, rule_nr * 2); + rdt_load_mdpr(rdt, s->streams[0], rule_nr * 2); } static unsigned char * |