From 99a1d1915e66e4539971a42d3f7e85da5e027021 Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Sat, 4 Oct 2008 04:16:44 +0000 Subject: [PATCH] Remove access into RTPDemuxContext in rtsp.c, which allows making it opaque (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 | 5 +++++ libavformat/rtp_internal.h | 5 ++--- libavformat/rtpdec.c | 8 ++++++++ libavformat/rtsp.c | 5 +++-- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/libavformat/rtp.h b/libavformat/rtp.h index 0eb95653cb..4de5919c78 100644 --- a/libavformat/rtp.h +++ b/libavformat/rtp.h @@ -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); diff --git a/libavformat/rtp_internal.h b/libavformat/rtp_internal.h index 448d1fabe9..80c81cbf72 100644 --- a/libavformat/rtp_internal.h +++ b/libavformat/rtp_internal.h @@ -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 { diff --git a/libavformat/rtpdec.c b/libavformat/rtpdec.c index 4c33544afb..b08509c284 100644 --- a/libavformat/rtpdec.c +++ b/libavformat/rtpdec.c @@ -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; diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c index f6d985968c..283d6af6a7 100644 --- a/libavformat/rtsp.c +++ b/libavformat/rtsp.c @@ -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); } }