# HG changeset patch # User rbultje # Date 1228083875 0 # Node ID 302cc68489e47c593bdd1cdeb5974ae107d4bb4b # Parent 53c652f24105d35cda7ec526f8a7c17ef1d45989 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". diff -r 53c652f24105 -r 302cc68489e4 rdt.c --- a/rdt.c Sun Nov 30 20:40:04 2008 +0000 +++ b/rdt.c Sun Nov 30 22:24:35 2008 +0000 @@ -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 @@ 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 @@ /* 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 @@ 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 @@ { 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 *