Commit e0d21bfe authored by Luca Abeni's avatar Luca Abeni

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
parent 0d0447ea
...@@ -747,6 +747,21 @@ static int rtp_write_header(AVFormatContext *s1) ...@@ -747,6 +747,21 @@ static int rtp_write_header(AVFormatContext *s1)
return AVERROR(EIO); return AVERROR(EIO);
s->max_payload_size = max_packet_size - 12; 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); av_set_pts_info(st, 32, 1, 90000);
switch(st->codec->codec_id) { switch(st->codec->codec_id) {
case CODEC_ID_MP2: case CODEC_ID_MP2:
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
#include "rtp_aac.h" #include "rtp_aac.h"
#include "rtp_internal.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) #define MAX_AU_HEADERS_SIZE (2 + 2 * MAX_FRAMES_PER_PACKET)
void ff_rtp_send_aac(AVFormatContext *s1, const uint8_t *buff, int size) void ff_rtp_send_aac(AVFormatContext *s1, const uint8_t *buff, int size)
......
...@@ -105,6 +105,7 @@ struct RTPDemuxContext { ...@@ -105,6 +105,7 @@ struct RTPDemuxContext {
/* dynamic payload stuff */ /* dynamic payload stuff */
DynamicPayloadPacketHandlerProc parse_packet; ///< This is also copied from the dynamic protocol handler structure 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. 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; extern RTPDynamicProtocolHandler *RTPFirstDynamicPayloadHandler;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment