On Tue, 17 Jun 2014, Luca Barbato wrote:
From: Joshua Kordani <[email protected]>Issue present in Avigilon IP cameras. --- libavformat/rtsp.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c index adea3c6..c5a9d51 100644 --- a/libavformat/rtsp.c +++ b/libavformat/rtsp.c @@ -292,6 +292,9 @@ typedef struct SDPParseState { struct RTSPSource **default_include_source_addrs; /**< Source-specific multicast include source IP address (from SDP content) */ int nb_default_exclude_source_addrs; /**< Number of source-specific multicast exclude source IP address (from SDP content) */ struct RTSPSource **default_exclude_source_addrs; /**< Source-specific multicast exclude source IP address (from SDP content) */ + int seen_rtpmap; + int seen_fmtp; + char delayed_a_line[2048]; } SDPParseState; static void copy_default_source_addrs(struct RTSPSource **addrs, int count, @@ -504,13 +507,21 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1, st = s->streams[rtsp_st->stream_index]; sdp_parse_rtpmap(s, st, rtsp_st, payload_type, p); } + s1->seen_rtpmap = 1; + if (s1->seen_fmtp) { + parse_fmtp(s, rt, payload_type, s1->delayed_a_line); + } } else if (av_strstart(p, "fmtp:", &p) || av_strstart(p, "framesize:", &p)) { - /* NOTE: fmtp is only supported AFTER the 'a=rtpmap:xxx' tag */ // let dynamic protocol handlers have a stab at the line. get_word(buf1, sizeof(buf1), &p); payload_type = atoi(buf1); - parse_fmtp(s, rt, payload_type, buf); + if (s1->seen_rtpmap) { + parse_fmtp(s, rt, payload_type, buf); + } else { + s1->seen_fmtp = 1; + strncpy(s1->delayed_a_line, buf, sizeof(s1->delayed_a_line));
I'd rather use av_strlcpy here, because strncpy doesn't do null terminatin in case the buffer isn't large enough.
Also, I think we should clear the seen_fmtp and seen_rtpmap variables at some point (in the 'm' case perhaps?), otherwise this will mess things up for sure in the case of multiple streams.
// Martin _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
