From 7b2a0708009c37c6bed20b9435b935aaaec7c6a1 Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Sat, 6 Dec 2008 18:41:17 +0000 Subject: [PATCH] Change function prototype of the sdp_parse_a_line in DynamicProtocolHandler. This function is called in rtsp.c for each a= line in the SDP of the Describe response after m= RTSP stream descriptors. The function prototype used to take an AVStream argument. For RDT, however, every RTSPStream represents a set of streams of identical content, and can thus represent multiple AVStreams. Therefore, it should not take an AVStream as argument. This patch modifies it to accept a AVFormatContext (of the RTSP/SDP demuxer) instead. See discussion in "[PATCH/RFC] change function prototype of parse_sdp_a_line" thread on ML. Originally committed as revision 16024 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/rdt.c | 4 +++- libavformat/rtp_h264.c | 5 +++-- libavformat/rtp_internal.h | 3 ++- libavformat/rtsp.c | 6 +++--- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/libavformat/rdt.c b/libavformat/rdt.c index 5a1bae737..a86cb6f78 100644 --- a/libavformat/rdt.c +++ b/libavformat/rdt.c @@ -405,8 +405,10 @@ rdt_parse_b64buf (unsigned int *target_len, const char *p) } static int -rdt_parse_sdp_line (AVStream *stream, PayloadContext *rdt, const char *line) +rdt_parse_sdp_line (AVFormatContext *s, int st_index, + PayloadContext *rdt, const char *line) { + AVStream *stream = s->streams[st_index]; const char *p = line; if (av_strstart(p, "OpaqueData:buffer;", &p)) { diff --git a/libavformat/rtp_h264.c b/libavformat/rtp_h264.c index bc298527e..7d6f96c6b 100644 --- a/libavformat/rtp_h264.c +++ b/libavformat/rtp_h264.c @@ -348,9 +348,10 @@ static void h264_free_extradata(PayloadContext *data) av_free(data); } -static int parse_h264_sdp_line(AVStream * stream, PayloadContext *h264_data, - const char *line) +static int parse_h264_sdp_line(AVFormatContext *s, int st_index, + PayloadContext *h264_data, const char *line) { + AVStream *stream = s->streams[st_index]; AVCodecContext *codec = stream->codec; const char *p = line; diff --git a/libavformat/rtp_internal.h b/libavformat/rtp_internal.h index 80c81cbf7..201011b38 100644 --- a/libavformat/rtp_internal.h +++ b/libavformat/rtp_internal.h @@ -66,7 +66,8 @@ struct RTPDynamicProtocolHandler_s { enum CodecID codec_id; // may be null - int (*parse_sdp_a_line) (AVStream * stream, + int (*parse_sdp_a_line) (AVFormatContext *s, + int st_index, PayloadContext *priv_data, const char *line); ///< Parse the a= line from the sdp field PayloadContext *(*open) (); ///< allocate any data needed by the rtp parsing for this dynamic data. diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c index 33f0e5539..e73a173bb 100644 --- a/libavformat/rtsp.c +++ b/libavformat/rtsp.c @@ -518,7 +518,7 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1, rtsp_st = st->priv_data; if (rtsp_st->sdp_payload_type == payload_type) { if(rtsp_st->dynamic_handler && rtsp_st->dynamic_handler->parse_sdp_a_line) { - if(!rtsp_st->dynamic_handler->parse_sdp_a_line(st, rtsp_st->dynamic_protocol_context, buf)) { + if(!rtsp_st->dynamic_handler->parse_sdp_a_line(s, i, rtsp_st->dynamic_protocol_context, buf)) { sdp_parse_fmtp(st, p); } } else { @@ -535,7 +535,7 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1, rtsp_st = st->priv_data; if (rtsp_st->sdp_payload_type == payload_type) { if(rtsp_st->dynamic_handler && rtsp_st->dynamic_handler->parse_sdp_a_line) { - rtsp_st->dynamic_handler->parse_sdp_a_line(st, rtsp_st->dynamic_protocol_context, buf); + rtsp_st->dynamic_handler->parse_sdp_a_line(s, i, rtsp_st->dynamic_protocol_context, buf); } } } @@ -553,7 +553,7 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1, rtsp_st = s->streams[s->nb_streams - 1]->priv_data; if (rtsp_st->dynamic_handler && rtsp_st->dynamic_handler->parse_sdp_a_line) - rtsp_st->dynamic_handler->parse_sdp_a_line(s->streams[s->nb_streams - 1], + rtsp_st->dynamic_handler->parse_sdp_a_line(s, s->nb_streams - 1, rtsp_st->dynamic_protocol_context, buf); } break; -- 2.11.0