this in the AAC packetizer) Originally committed as revision 10647 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.5
| @@ -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 @@ | |||||
| #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 { | |||||
| /* 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; | ||||