[FFmpeg-cvslog] r10647 - in trunk/libavformat: rtp.c rtp_aac.c rtp_internal.h
lucabe
subversion
Tue Oct 2 16:48:08 CEST 2007
Author: lucabe
Date: Tue Oct 2 16:48:08 2007
New Revision: 10647
Log:
Allow to set the maximum number of frames per RTP packet (and add support for
this in the AAC packetizer)
Modified:
trunk/libavformat/rtp.c
trunk/libavformat/rtp_aac.c
trunk/libavformat/rtp_internal.h
Modified: trunk/libavformat/rtp.c
==============================================================================
--- trunk/libavformat/rtp.c (original)
+++ trunk/libavformat/rtp.c Tue Oct 2 16:48:08 2007
@@ -747,6 +747,21 @@ static int rtp_write_header(AVFormatCont
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:
Modified: trunk/libavformat/rtp_aac.c
==============================================================================
--- trunk/libavformat/rtp_aac.c (original)
+++ trunk/libavformat/rtp_aac.c Tue Oct 2 16:48:08 2007
@@ -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)
Modified: trunk/libavformat/rtp_internal.h
==============================================================================
--- trunk/libavformat/rtp_internal.h (original)
+++ trunk/libavformat/rtp_internal.h Tue Oct 2 16:48:08 2007
@@ -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;
More information about the ffmpeg-cvslog
mailing list