Add a flags field to the RTPDynamicPayloadPacketHandlerProc (PKT_FLAG_*).
authorRonald S. Bultje <rsbultje@gmail.com>
Fri, 18 Jan 2008 20:48:32 +0000 (20:48 +0000)
committerRonald S. Bultje <rsbultje@gmail.com>
Fri, 18 Jan 2008 20:48:32 +0000 (20:48 +0000)
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

libavformat/rtp_h264.c
libavformat/rtp_internal.h
libavformat/rtpdec.c

index 28426b2..3e0fc3a 100644 (file)
@@ -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;
index fefbaf5..e9d6cb3 100644 (file)
@@ -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
index ba2f506..7bdfca3 100644 (file)
@@ -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) {