From: Ronald S. Bultje Date: Sat, 4 Oct 2008 04:16:44 +0000 (+0000) Subject: Remove access into RTPDemuxContext in rtsp.c, which allows making it opaque X-Git-Tag: v0.5~2283 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=99a1d1915e66e4539971a42d3f7e85da5e027021;p=coroid%2Flibav_saccubus.git 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 --- diff --git a/libavformat/rtp.h b/libavformat/rtp.h index 0eb95653c..4de5919c7 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 448d1fabe..80c81cbf7 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 4c33544af..b08509c28 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 f6d985968..283d6af6a 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); } }