[SCM] libav/experimental: Allow to set the maximum number of frames per RTP packet (and add support for this in the AAC packetizer)

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 16:07:48 UTC 2013


The following commit has been merged in the experimental branch:
commit e0d21bfe835eec87b8c0efe6e9973ae5f588bc07
Author: Luca Abeni <lucabe72 at email.it>
Date:   Tue Oct 2 14:48:08 2007 +0000

    Allow to set the maximum number of frames per RTP packet (and add support for
    this in the AAC packetizer)
    
    Originally committed as revision 10647 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavformat/rtp.c b/libavformat/rtp.c
index 02d3e7b..14e9189 100644
--- a/libavformat/rtp.c
+++ b/libavformat/rtp.c
@@ -747,6 +747,21 @@ static int rtp_write_header(AVFormatContext *s1)
         return AVERROR(EIO);
     s->max_payload_size = max_packet_size - 12;
 
+    s->max_frames_per_packet = 0;
+    if (s1->max_delay) {
+        if (st->codec->codec_type == CODEC_TYPE_AUDIO) {
+            if (st->codec->frame_size == 0) {
+                av_log(s1, AV_LOG_ERROR, "Cannot respect max delay: frame size = 0\n");
+            } else {
+                s->max_frames_per_packet = av_rescale_rnd(s1->max_delay, st->codec->sample_rate, AV_TIME_BASE * st->codec->frame_size, AV_ROUND_DOWN);
+            }
+        }
+        if (st->codec->codec_type == CODEC_TYPE_VIDEO) {
+            /* FIXME: We should round down here... */
+            s->max_frames_per_packet = av_rescale_q(s1->max_delay, AV_TIME_BASE_Q, st->codec->time_base);
+        }
+    }
+
     av_set_pts_info(st, 32, 1, 90000);
     switch(st->codec->codec_id) {
     case CODEC_ID_MP2:
diff --git a/libavformat/rtp_aac.c b/libavformat/rtp_aac.c
index 04dc3cf..4cd8e12 100644
--- a/libavformat/rtp_aac.c
+++ b/libavformat/rtp_aac.c
@@ -22,7 +22,7 @@
 #include "rtp_aac.h"
 #include "rtp_internal.h"
 
-#define MAX_FRAMES_PER_PACKET 5
+#define MAX_FRAMES_PER_PACKET (s->max_frames_per_packet ? s->max_frames_per_packet : 5)
 #define MAX_AU_HEADERS_SIZE (2 + 2 * MAX_FRAMES_PER_PACKET)
 
 void ff_rtp_send_aac(AVFormatContext *s1, const uint8_t *buff, int size)
diff --git a/libavformat/rtp_internal.h b/libavformat/rtp_internal.h
index 9647762..4bfa4bb 100644
--- a/libavformat/rtp_internal.h
+++ b/libavformat/rtp_internal.h
@@ -105,6 +105,7 @@ struct RTPDemuxContext {
     /* dynamic payload stuff */
     DynamicPayloadPacketHandlerProc parse_packet;     ///< This is also copied from the dynamic protocol handler structure
     void *dynamic_protocol_context;        ///< This is a copy from the values setup from the sdp parsing, in rtsp.c don't free me.
+    int max_frames_per_packet;
 };
 
 extern RTPDynamicProtocolHandler *RTPFirstDynamicPayloadHandler;

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list