Remove access into RTPDemuxContext in rtsp.c, which allows making it opaque
authorRonald S. Bultje <rsbultje@gmail.com>
Sat, 4 Oct 2008 04:16:44 +0000 (04:16 +0000)
committerRonald S. Bultje <rsbultje@gmail.com>
Sat, 4 Oct 2008 04:16:44 +0000 (04:16 +0000)
(and thus preparing for the introduction of RDTDemuxContext) in a next patch.
See discussion in "RDT/Realmedia patches #2" thread on ML.

Originally committed as revision 15542 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/rtp.h
libavformat/rtp_internal.h
libavformat/rtpdec.c
libavformat/rtsp.c

index 0eb9565..4de5919 100644 (file)
@@ -24,6 +24,9 @@
 #include "libavcodec/avcodec.h"
 #include "avformat.h"
 
+typedef struct PayloadContext PayloadContext;
+typedef struct RTPDynamicProtocolHandler_s RTPDynamicProtocolHandler;
+
 #define RTP_MIN_PACKET_LENGTH 12
 #define RTP_MAX_PACKET_LENGTH 1500 /* XXX: suppress this define */
 
@@ -35,6 +38,8 @@ int rtp_get_payload_type(AVCodecContext *codec);
 typedef struct RTPDemuxContext RTPDemuxContext;
 typedef struct rtp_payload_data_s rtp_payload_data_s;
 RTPDemuxContext *rtp_parse_open(AVFormatContext *s1, AVStream *st, URLContext *rtpc, int payload_type, rtp_payload_data_s *rtp_payload_data);
+void rtp_parse_set_dynamic_protocol(RTPDemuxContext *s, PayloadContext *ctx,
+                                    RTPDynamicProtocolHandler *handler);
 int rtp_parse_packet(RTPDemuxContext *s, AVPacket *pkt,
                      const uint8_t *buf, int len);
 void rtp_parse_close(RTPDemuxContext *s);
index 448d1fa..80c81cb 100644 (file)
@@ -41,7 +41,6 @@ typedef struct {
     uint32_t jitter;            ///< estimated jitter.
 } RTPStatistics;
 
-typedef struct PayloadContext PayloadContext;
 /**
  * Packet parsing for "private" payloads in the RTP specs.
  *
@@ -60,7 +59,7 @@ typedef int (*DynamicPayloadPacketHandlerProc) (PayloadContext *s,
                                                 const uint8_t * buf,
                                                 int len, int flags);
 
-typedef struct RTPDynamicProtocolHandler_s {
+struct RTPDynamicProtocolHandler_s {
     // fields from AVRtpDynamicPayloadType_s
     const char enc_name[50];    /* XXX: still why 50 ? ;-) */
     enum CodecType codec_type;
@@ -75,7 +74,7 @@ typedef struct RTPDynamicProtocolHandler_s {
     DynamicPayloadPacketHandlerProc parse_packet; ///< parse handler for this dynamic packet.
 
     struct RTPDynamicProtocolHandler_s *next;
-} RTPDynamicProtocolHandler;
+};
 
 // moved out of rtp.c, because the h264 decoder needs to know about this structure..
 struct RTPDemuxContext {
index 4c33544..b08509c 100644 (file)
@@ -311,6 +311,14 @@ RTPDemuxContext *rtp_parse_open(AVFormatContext *s1, AVStream *st, URLContext *r
     return s;
 }
 
+void
+rtp_parse_set_dynamic_protocol(RTPDemuxContext *s, PayloadContext *ctx,
+                               RTPDynamicProtocolHandler *handler)
+{
+    s->dynamic_protocol_context = ctx;
+    s->parse_packet = handler->parse_packet;
+}
+
 static int rtp_parse_mp4_au(RTPDemuxContext *s, const uint8_t *buf)
 {
     int au_headers_length, au_header_size, i;
index f6d9859..283d6af 100644 (file)
@@ -900,8 +900,9 @@ rtsp_open_transport_ctx(AVFormatContext *s, RTSPStream *rtsp_st)
          return AVERROR(ENOMEM);
     } else {
         if(rtsp_st->dynamic_handler) {
-            rtsp_st->rtp_ctx->dynamic_protocol_context= rtsp_st->dynamic_protocol_context;
-            rtsp_st->rtp_ctx->parse_packet= rtsp_st->dynamic_handler->parse_packet;
+            rtp_parse_set_dynamic_protocol(rtsp_st->rtp_ctx,
+                                           rtsp_st->dynamic_protocol_context,
+                                           rtsp_st->dynamic_handler);
         }
     }