# HG changeset patch # User rbultje # Date 1233884239 0 # Node ID 5c42816e12c661c7b6e11aed99ed3b7a3b776d5b # Parent 3dbd7fa2c2af097e18bb27bc629bd570edf1dd0b Add "AVFormatContext *ctx" (that being the RTSP demuxer's) as first argument to the parse_packet() function pointer in RTPDynamicProtocolHandlers. This allows these functions to peek back and retrieve values from the demuxer's context (or RTSPState). The ASF/RTP payload parser will use this to be able to parse SDP values (which occur even before the payload ID is given), store them in the RTSPState and then retrieve them while parsing payload data. See "[PATCH] RTSP-MS 13/15: add RTSP demuxer AVFormatContext to parse_packet() function pointer (was: transport context)" mailinglist thread. diff -r 3dbd7fa2c2af -r 5c42816e12c6 rdt.c --- a/rdt.c Thu Feb 05 22:34:55 2009 +0000 +++ b/rdt.c Fri Feb 06 01:37:19 2009 +0000 @@ -295,7 +295,7 @@ /**< return 0 on packet, no more left, 1 on packet, 1 on partial packet... */ static int -rdt_parse_packet (PayloadContext *rdt, AVStream *st, +rdt_parse_packet (AVFormatContext *ctx, PayloadContext *rdt, AVStream *st, AVPacket *pkt, uint32_t *timestamp, const uint8_t *buf, int len, int flags) { @@ -347,7 +347,7 @@ if (!buf && s->prev_stream_id != -1) { /* return the next packets, if any */ timestamp= 0; ///< Should not be used if buf is NULL, but should be set to the timestamp of the packet returned.... - rv= s->parse_packet(s->dynamic_protocol_context, + rv= s->parse_packet(s->ic, s->dynamic_protocol_context, s->streams[s->prev_stream_id], pkt, ×tamp, NULL, 0, flags); return rv; @@ -374,7 +374,7 @@ return -1; } - rv = s->parse_packet(s->dynamic_protocol_context, + rv = s->parse_packet(s->ic, s->dynamic_protocol_context, s->streams[s->prev_stream_id], pkt, ×tamp, buf, len, flags); diff -r 3dbd7fa2c2af -r 5c42816e12c6 rtp.h --- a/rtp.h Thu Feb 05 22:34:55 2009 +0000 +++ b/rtp.h Fri Feb 06 01:37:19 2009 +0000 @@ -107,6 +107,7 @@ /** * Packet parsing for "private" payloads in the RTP specs. * + * @param ctx RTSP demuxer context * @param s stream context * @param st stream that this packet belongs to * @param pkt packet in which to write the parsed data @@ -115,7 +116,8 @@ * @param len length of buf * @param flags flags from the RTP packet header (PKT_FLAG_*) */ -typedef int (*DynamicPayloadPacketHandlerProc) (PayloadContext *s, +typedef int (*DynamicPayloadPacketHandlerProc) (AVFormatContext *ctx, + PayloadContext *s, AVStream *st, AVPacket * pkt, uint32_t *timestamp, diff -r 3dbd7fa2c2af -r 5c42816e12c6 rtp_h264.c --- a/rtp_h264.c Thu Feb 05 22:34:55 2009 +0000 +++ b/rtp_h264.c Fri Feb 06 01:37:19 2009 +0000 @@ -159,7 +159,8 @@ } // return 0 on packet, no more left, 1 on packet, 1 on partial packet... -static int h264_handle_packet(PayloadContext *data, +static int h264_handle_packet(AVFormatContext *ctx, + PayloadContext *data, AVStream *st, AVPacket * pkt, uint32_t * timestamp, diff -r 3dbd7fa2c2af -r 5c42816e12c6 rtpdec.c --- a/rtpdec.c Thu Feb 05 22:34:55 2009 +0000 +++ b/rtpdec.c Fri Feb 06 01:37:19 2009 +0000 @@ -407,7 +407,7 @@ /* return the next packets, if any */ if(s->st && s->parse_packet) { timestamp= 0; ///< Should not be used if buf is NULL, but should be set to the timestamp of the packet returned.... - rv= s->parse_packet(s->dynamic_protocol_context, + rv= s->parse_packet(s->ic, s->dynamic_protocol_context, s->st, pkt, ×tamp, NULL, 0, flags); finalize_packet(s, pkt, timestamp); return rv; @@ -472,7 +472,7 @@ return 1; } } else if (s->parse_packet) { - rv = s->parse_packet(s->dynamic_protocol_context, + rv = s->parse_packet(s->ic, s->dynamic_protocol_context, s->st, pkt, ×tamp, buf, len, flags); } else { // at this point, the RTP header has been stripped; This is ASSUMING that there is only 1 CSRC, which in't wise.