From ab63fb0360f1f5ce5cd7199786940d56c7a10632 Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Tue, 30 Sep 2008 13:23:33 +0000 Subject: Remove access to rdt_data struct in functions called outside of the DynamicProtocol* context. Doing so could lead to problems if we're accessing Real servers serving non-RDT data (or the other way around). Temporarily, this patch adds a _subscribe2() function which will soon be removed in one of the subsequent commits. OK'ed by Luca in "Realmedia patch" thread on ML. Originally committed as revision 15483 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/rdt.c | 15 ++++++++++----- libavformat/rdt.h | 6 ++++-- libavformat/rtsp.c | 3 ++- 3 files changed, 16 insertions(+), 8 deletions(-) (limited to 'libavformat') diff --git a/libavformat/rdt.c b/libavformat/rdt.c index 2007566b3a..c1238b2d46 100644 --- a/libavformat/rdt.c +++ b/libavformat/rdt.c @@ -234,15 +234,20 @@ ff_rdt_parse_packet(RTPDemuxContext *s, AVPacket *pkt, } void -ff_rdt_subscribe_rule (RTPDemuxContext *s, char *cmd, int size, +ff_rdt_subscribe_rule (char *cmd, int size, int stream_nr, int rule_nr) { - rdt_data *rdt = s->dynamic_protocol_context; - av_strlcatf(cmd, size, "stream=%d;rule=%d,stream=%d;rule=%d", - stream_nr, rule_nr, stream_nr, rule_nr + 1); + stream_nr, rule_nr * 2, stream_nr, rule_nr * 2 + 1); +} + +void +ff_rdt_subscribe_rule2 (RTPDemuxContext *s, char *cmd, int size, + int stream_nr, int rule_nr) +{ + rdt_data *rdt = s->dynamic_protocol_context; - rdt_load_mdpr(rdt, s->st, 0); + rdt_load_mdpr(rdt, s->st, rule_nr * 2); } static unsigned char * diff --git a/libavformat/rdt.h b/libavformat/rdt.h index fe2f4f484b..5a13127fb5 100644 --- a/libavformat/rdt.h +++ b/libavformat/rdt.h @@ -45,14 +45,16 @@ void av_register_rdt_dynamic_payload_handlers(void); /** * Add subscription information to Subscribe parameter string. * - * @param s RDT context * @param cmd string to write the subscription information into. * @param size size of cmd. * @param stream_nr stream number. * @param rule_nr rule number to conform to. */ -void ff_rdt_subscribe_rule(RTPDemuxContext *s, char *cmd, int size, +void ff_rdt_subscribe_rule(char *cmd, int size, int stream_nr, int rule_nr); +// FIXME this will be removed ASAP +void ff_rdt_subscribe_rule2(RTPDemuxContext *s, char *cmd, int size, + int stream_nr, int rule_nr); /** * Parse RDT-style packet data (header + media data). diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c index cfe4e644b5..6e4d36a6a6 100644 --- a/libavformat/rtsp.c +++ b/libavformat/rtsp.c @@ -1324,7 +1324,8 @@ static int rtsp_read_packet(AVFormatContext *s, s->filename); for (i = 0; i < rt->nb_rtsp_streams; i++) { if (i != 0) av_strlcat(cmd, ",", sizeof(cmd)); - ff_rdt_subscribe_rule( + ff_rdt_subscribe_rule(cmd, sizeof(cmd), i, 0); + ff_rdt_subscribe_rule2( rt->rtsp_streams[i]->rtp_ctx, cmd, sizeof(cmd), i, 0); } -- cgit v1.2.1