mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
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
This commit is contained in:
parent
0d0447eae0
commit
e0d21bfe83
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user