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;
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;
/* 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;
}
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;
}
{
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 *