diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2015-03-01 01:31:45 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2015-03-01 01:31:49 +0100 |
commit | 5cb6b53050e39ed3cf7dabcf3cd8198a934f9bd2 (patch) | |
tree | fd71fe492208b02db3eb5d3cf615e6a5ddbd6ed2 /libavformat/rtpenc.c | |
parent | 78c59f3f0c9f20c3d143bd75fdf125bdf032b16d (diff) | |
parent | 4f6cd883f06f7893a2b60a41e7a4f8ae633dac2f (diff) | |
download | ffmpeg-5cb6b53050e39ed3cf7dabcf3cd8198a934f9bd2.tar.gz |
Merge commit '4f6cd883f06f7893a2b60a41e7a4f8ae633dac2f'
* commit '4f6cd883f06f7893a2b60a41e7a4f8ae633dac2f':
rtpenc: Don't set max_frames_per_packet based on the packet frame size or frame rate
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat/rtpenc.c')
-rw-r--r-- | libavformat/rtpenc.c | 61 |
1 files changed, 16 insertions, 45 deletions
diff --git a/libavformat/rtpenc.c b/libavformat/rtpenc.c index 360fa2cc93..1eb01911a8 100644 --- a/libavformat/rtpenc.c +++ b/libavformat/rtpenc.c @@ -152,33 +152,6 @@ static int rtp_write_header(AVFormatContext *s1) } s->max_payload_size = s1->packet_size - 12; - s->max_frames_per_packet = 0; - if (s1->max_delay > 0) { - if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) { - int frame_size = av_get_audio_frame_duration(st->codec, 0); - if (!frame_size) - frame_size = st->codec->frame_size; - if (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_q_rnd(s1->max_delay, - AV_TIME_BASE_Q, - (AVRational){ frame_size, st->codec->sample_rate }, - AV_ROUND_DOWN); - } - } - if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) { - /* FIXME: We should round down here... */ - if (st->avg_frame_rate.num > 0 && st->avg_frame_rate.den > 0) { - s->max_frames_per_packet = av_rescale_q(s1->max_delay, - (AVRational){1, 1000000}, - av_inv_q(st->avg_frame_rate)); - } else - s->max_frames_per_packet = 1; - } - } - if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) { avpriv_set_pts_info(st, 32, 1, st->codec->sample_rate); } else { @@ -228,9 +201,7 @@ static int rtp_write_header(AVFormatContext *s1) break; case AV_CODEC_ID_VORBIS: case AV_CODEC_ID_THEORA: - if (!s->max_frames_per_packet) - s->max_frames_per_packet = 15; - s->max_frames_per_packet = av_clip(s->max_frames_per_packet, 1, 15); + s->max_frames_per_packet = 15; break; case AV_CODEC_ID_ADPCM_G722: /* Due to a historical error, the clock rate for G722 in RTP is @@ -252,15 +223,11 @@ static int rtp_write_header(AVFormatContext *s1) av_log(s1, AV_LOG_ERROR, "Incorrect iLBC block size specified\n"); goto fail; } - if (!s->max_frames_per_packet) - s->max_frames_per_packet = 1; - s->max_frames_per_packet = FFMIN(s->max_frames_per_packet, - s->max_payload_size / st->codec->block_align); + s->max_frames_per_packet = s->max_payload_size / st->codec->block_align; break; case AV_CODEC_ID_AMR_NB: case AV_CODEC_ID_AMR_WB: - if (!s->max_frames_per_packet) - s->max_frames_per_packet = 12; + s->max_frames_per_packet = 50; if (st->codec->codec_id == AV_CODEC_ID_AMR_NB) n = 31; else @@ -276,8 +243,7 @@ static int rtp_write_header(AVFormatContext *s1) } break; case AV_CODEC_ID_AAC: - if (!s->max_frames_per_packet) - s->max_frames_per_packet = 5; + s->max_frames_per_packet = 50; break; default: break; @@ -496,18 +462,23 @@ static int rtp_send_ilbc(AVFormatContext *s1, const uint8_t *buf, int size) int frames = size / frame_size; while (frames > 0) { - int n = FFMIN(s->max_frames_per_packet - s->num_frames, frames); + if (s->num_frames > 0 && + av_compare_ts(s->cur_timestamp - s->timestamp, st->time_base, + s1->max_delay, AV_TIME_BASE_Q) >= 0) { + ff_rtp_send_data(s1, s->buf, s->buf_ptr - s->buf, 1); + s->num_frames = 0; + } if (!s->num_frames) { s->buf_ptr = s->buf; s->timestamp = s->cur_timestamp; } - memcpy(s->buf_ptr, buf, n * frame_size); - frames -= n; - s->num_frames += n; - s->buf_ptr += n * frame_size; - buf += n * frame_size; - s->cur_timestamp += n * frame_duration; + memcpy(s->buf_ptr, buf, frame_size); + frames--; + s->num_frames++; + s->buf_ptr += frame_size; + buf += frame_size; + s->cur_timestamp += frame_duration; if (s->num_frames == s->max_frames_per_packet) { ff_rtp_send_data(s1, s->buf, s->buf_ptr - s->buf, 1); |