changeset 4067:8adccfc01be3 libavformat

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.
author rbultje
date Sat, 06 Dec 2008 18:41:17 +0000
parents 10f7232a3545
children d8ef0a1e3f45
files rdt.c rtp_h264.c rtp_internal.h rtsp.c
diffstat 4 files changed, 11 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/rdt.c	Sat Dec 06 18:35:52 2008 +0000
+++ b/rdt.c	Sat Dec 06 18:41:17 2008 +0000
@@ -405,8 +405,10 @@
 }
 
 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)) {
--- a/rtp_h264.c	Sat Dec 06 18:35:52 2008 +0000
+++ b/rtp_h264.c	Sat Dec 06 18:41:17 2008 +0000
@@ -348,9 +348,10 @@
     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;
 
--- a/rtp_internal.h	Sat Dec 06 18:35:52 2008 +0000
+++ b/rtp_internal.h	Sat Dec 06 18:41:17 2008 +0000
@@ -66,7 +66,8 @@
     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.
--- a/rtsp.c	Sat Dec 06 18:35:52 2008 +0000
+++ b/rtsp.c	Sat Dec 06 18:41:17 2008 +0000
@@ -518,7 +518,7 @@
                 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 @@
                 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 @@
             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;