summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonald S. Bultje <rsbultje@gmail.com>2008-10-04 04:16:44 +0000
committerRonald S. Bultje <rsbultje@gmail.com>2008-10-04 04:16:44 +0000
commit99a1d1915e66e4539971a42d3f7e85da5e027021 (patch)
tree8d9c4ff98c92135b8ea8bc24604e1e05bc9030c2
parent9b932b8ac0c63cf52642dbe4e3953a312e6cf900 (diff)
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
-rw-r--r--libavformat/rtp.h5
-rw-r--r--libavformat/rtp_internal.h5
-rw-r--r--libavformat/rtpdec.c8
-rw-r--r--libavformat/rtsp.c5
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);
}
}