aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRonald S. Bultje <rsbultje@gmail.com>2008-01-18 20:48:32 +0000
committerRonald S. Bultje <rsbultje@gmail.com>2008-01-18 20:48:32 +0000
commitf841a0fca1977ed9d24537b3c7b376def5ca1a73 (patch)
tree2e7543cd5082ddf6dfa43c8af6095084ba397641
parente2d3e82dfd607ee1db51076e16d8ddc3140ae753 (diff)
downloadffmpeg-f841a0fca1977ed9d24537b3c7b376def5ca1a73.tar.gz
Add a flags field to the RTPDynamicPayloadPacketHandlerProc (PKT_FLAG_*).
This can be used later by RDT to get the flags from the RTP packet and use that for the RealMedia packet (such as whether this RTP packet represents a keyframe or not). For discussion, see "[PATCH] Realmedia / RTSP (RDT)". Originally committed as revision 11557 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavformat/rtp_h264.c2
-rw-r--r--libavformat/rtp_internal.h13
-rw-r--r--libavformat/rtpdec.c6
3 files changed, 15 insertions, 6 deletions
diff --git a/libavformat/rtp_h264.c b/libavformat/rtp_h264.c
index 28426b21cf..3e0fc3add4 100644
--- a/libavformat/rtp_h264.c
+++ b/libavformat/rtp_h264.c
@@ -163,7 +163,7 @@ static int h264_handle_packet(RTPDemuxContext * s,
AVPacket * pkt,
uint32_t * timestamp,
const uint8_t * buf,
- int len)
+ int len, int flags)
{
#ifdef DEBUG
h264_rtp_extra_data *data = s->dynamic_protocol_context;
diff --git a/libavformat/rtp_internal.h b/libavformat/rtp_internal.h
index fefbaf5504..e9d6cb3905 100644
--- a/libavformat/rtp_internal.h
+++ b/libavformat/rtp_internal.h
@@ -41,12 +41,21 @@ typedef struct {
uint32_t jitter; ///< estimated jitter.
} RTPStatistics;
-
+/**
+ * Packet parsing for "private" payloads in the RTP specs.
+ *
+ * @param s stream context
+ * @param pkt packet in which to write the parsed data
+ * @param timestamp pointer in which to write the timestamp of this RTP packet
+ * @param buf pointer to raw RTP packet data
+ * @param len length of buf
+ * @param flags flags from the RTP packet header (PKT_FLAG_*)
+ */
typedef int (*DynamicPayloadPacketHandlerProc) (struct RTPDemuxContext * s,
AVPacket * pkt,
uint32_t *timestamp,
const uint8_t * buf,
- int len);
+ int len, int flags);
typedef struct RTPDynamicProtocolHandler_s {
// fields from AVRtpDynamicPayloadType_s
diff --git a/libavformat/rtpdec.c b/libavformat/rtpdec.c
index ba2f506c9e..7bdfca30a5 100644
--- a/libavformat/rtpdec.c
+++ b/libavformat/rtpdec.c
@@ -402,7 +402,7 @@ int rtp_parse_packet(RTPDemuxContext *s, AVPacket *pkt,
const uint8_t *buf, int len)
{
unsigned int ssrc, h;
- int payload_type, seq, ret;
+ int payload_type, seq, ret, flags = 0;
AVStream *st;
uint32_t timestamp;
int rv= 0;
@@ -411,7 +411,7 @@ int rtp_parse_packet(RTPDemuxContext *s, AVPacket *pkt,
/* 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, pkt, &timestamp, NULL, 0);
+ rv= s->parse_packet(s, pkt, &timestamp, NULL, 0, flags);
finalize_packet(s, pkt, timestamp);
return rv;
} else {
@@ -475,7 +475,7 @@ int rtp_parse_packet(RTPDemuxContext *s, AVPacket *pkt,
return 1;
}
} else if (s->parse_packet) {
- rv = s->parse_packet(s, pkt, &timestamp, buf, len);
+ rv = s->parse_packet(s, pkt, &timestamp, 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.
switch(st->codec->codec_id) {