summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/APIchanges4
-rw-r--r--libavcodec/aacenc.c2
-rw-r--r--libavcodec/ac3enc.c2
-rw-r--r--libavcodec/audio_frame_queue.c4
-rw-r--r--libavcodec/avcodec.h28
-rw-r--r--libavcodec/g722enc.c4
-rw-r--r--libavcodec/libfaac.c2
-rw-r--r--libavcodec/libfdk-aacenc.c2
-rw-r--r--libavcodec/libmp3lame.c2
-rw-r--r--libavcodec/libopencore-amr.c4
-rw-r--r--libavcodec/libopusenc.c4
-rw-r--r--libavcodec/libspeexenc.c2
-rw-r--r--libavcodec/libtwolame.c4
-rw-r--r--libavcodec/libvo-aacenc.c2
-rw-r--r--libavcodec/libvo-amrwbenc.c4
-rw-r--r--libavcodec/libvorbis.c4
-rw-r--r--libavcodec/mpegaudioenc.c4
-rw-r--r--libavcodec/nellymoserenc.c2
-rw-r--r--libavcodec/ra144enc.c2
-rw-r--r--libavcodec/utils.c9
-rw-r--r--libavcodec/version.h7
-rw-r--r--libavcodec/wmaenc.c5
22 files changed, 63 insertions, 40 deletions
diff --git a/doc/APIchanges b/doc/APIchanges
index ee317193c5..48b0ac8795 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -13,6 +13,10 @@ libavutil: 2014-08-09
API changes, most recent first:
+2014-10-13 - xxxxxxx - lavc 55.03.0 - avcodec.h
+ Add AVCodecContext.initial_padding. Deprecate the use of AVCodecContext.delay
+ for audio encoding.
+
2014-09-xx - xxxxxxx - lavu 54.04.0 - pixdesc.h
Add API to return the name of frame and context color properties.
diff --git a/libavcodec/aacenc.c b/libavcodec/aacenc.c
index 55aa2f1a2f..fa0ac0031a 100644
--- a/libavcodec/aacenc.c
+++ b/libavcodec/aacenc.c
@@ -777,7 +777,7 @@ static av_cold int aac_encode_init(AVCodecContext *avctx)
for (i = 0; i < 428; i++)
ff_aac_pow34sf_tab[i] = sqrt(ff_aac_pow2sf_tab[i] * sqrt(ff_aac_pow2sf_tab[i]));
- avctx->delay = 1024;
+ avctx->initial_padding = 1024;
ff_af_queue_init(avctx, &s->afq);
return 0;
diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c
index 5c02e7f9de..13666efc21 100644
--- a/libavcodec/ac3enc.c
+++ b/libavcodec/ac3enc.c
@@ -2436,7 +2436,7 @@ av_cold int ff_ac3_encode_init(AVCodecContext *avctx)
return ret;
avctx->frame_size = AC3_BLOCK_SIZE * s->num_blocks;
- avctx->delay = AC3_BLOCK_SIZE;
+ avctx->initial_padding = AC3_BLOCK_SIZE;
s->bitstream_mode = avctx->audio_service_type;
if (s->bitstream_mode == AV_AUDIO_SERVICE_TYPE_KARAOKE)
diff --git a/libavcodec/audio_frame_queue.c b/libavcodec/audio_frame_queue.c
index 0a8b25c6e3..82c16a11a3 100644
--- a/libavcodec/audio_frame_queue.c
+++ b/libavcodec/audio_frame_queue.c
@@ -29,8 +29,8 @@ av_cold void ff_af_queue_init(AVCodecContext *avctx, AudioFrameQueue *afq)
{
afq->avctx = avctx;
afq->next_pts = AV_NOPTS_VALUE;
- afq->remaining_delay = avctx->delay;
- afq->remaining_samples = avctx->delay;
+ afq->remaining_delay = avctx->initial_padding;
+ afq->remaining_samples = avctx->initial_padding;
afq->frame_queue = NULL;
}
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index f0fa7a959f..a24ce407c9 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -1191,16 +1191,7 @@ typedef struct AVCodecContext {
* encoded input.
*
* Audio:
- * For encoding, this is the number of "priming" samples added by the
- * encoder to the beginning of the stream. The decoded output will be
- * delayed by this many samples relative to the input to the encoder (or
- * more, if the decoder adds its own padding).
- * The timestamps on the output packets are adjusted by the encoder so
- * that they always refer to the first sample of the data actually
- * contained in the packet, including any added padding.
- * E.g. if the timebase is 1/samplerate and the timestamp of the first
- * input sample is 0, the timestamp of the first output packet will be
- * -delay.
+ * For encoding, this field is unused (see initial_padding).
*
* For decoding, this is the number of samples the decoder needs to
* output before the decoder's output is valid. When seeking, you should
@@ -2780,6 +2771,23 @@ typedef struct AVCodecContext {
* use AVOptions to set this field.
*/
int side_data_only_packets;
+
+ /**
+ * Audio only. The number of "priming" samples (padding) inserted by the
+ * encoder at the beginning of the audio. I.e. this number of leading
+ * decoded samples must be discarded by the caller to get the original audio
+ * without leading padding.
+ *
+ * - decoding: unused
+ * - encoding: Set by libavcodec. The timestamps on the output packets are
+ * adjusted by the encoder so that they always refer to the
+ * first sample of the data actually contained in the packet,
+ * including any added padding. E.g. if the timebase is
+ * 1/samplerate and the timestamp of the first input sample is
+ * 0, the timestamp of the first output packet will be
+ * -initial_padding.
+ */
+ int initial_padding;
} AVCodecContext;
/**
diff --git a/libavcodec/g722enc.c b/libavcodec/g722enc.c
index e7b67dad4f..be437946c6 100644
--- a/libavcodec/g722enc.c
+++ b/libavcodec/g722enc.c
@@ -106,7 +106,7 @@ static av_cold int g722_encode_init(AVCodecContext * avctx)
a common packet size for VoIP applications */
avctx->frame_size = 320;
}
- avctx->delay = 22;
+ avctx->initial_padding = 22;
if (avctx->trellis) {
/* validate trellis */
@@ -375,7 +375,7 @@ static int g722_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
}
if (frame->pts != AV_NOPTS_VALUE)
- avpkt->pts = frame->pts - ff_samples_to_time_base(avctx, avctx->delay);
+ avpkt->pts = frame->pts - ff_samples_to_time_base(avctx, avctx->initial_padding);
*got_packet_ptr = 1;
return 0;
}
diff --git a/libavcodec/libfaac.c b/libavcodec/libfaac.c
index 9b5b11af8a..ad51a03181 100644
--- a/libavcodec/libfaac.c
+++ b/libavcodec/libfaac.c
@@ -157,7 +157,7 @@ static av_cold int Faac_encode_init(AVCodecContext *avctx)
goto error;
}
- avctx->delay = FAAC_DELAY_SAMPLES;
+ avctx->initial_padding = FAAC_DELAY_SAMPLES;
ff_af_queue_init(avctx, &s->afq);
return 0;
diff --git a/libavcodec/libfdk-aacenc.c b/libavcodec/libfdk-aacenc.c
index 34717d4e86..d45fad2676 100644
--- a/libavcodec/libfdk-aacenc.c
+++ b/libavcodec/libfdk-aacenc.c
@@ -286,7 +286,7 @@ static av_cold int aac_encode_init(AVCodecContext *avctx)
}
avctx->frame_size = info.frameLength;
- avctx->delay = info.encoderDelay;
+ avctx->initial_padding = info.encoderDelay;
ff_af_queue_init(avctx, &s->afq);
if (avctx->flags & CODEC_FLAG_GLOBAL_HEADER) {
diff --git a/libavcodec/libmp3lame.c b/libavcodec/libmp3lame.c
index b7a323a8a0..23f1581e13 100644
--- a/libavcodec/libmp3lame.c
+++ b/libavcodec/libmp3lame.c
@@ -137,7 +137,7 @@ static av_cold int mp3lame_encode_init(AVCodecContext *avctx)
}
/* get encoder delay */
- avctx->delay = lame_get_encoder_delay(s->gfp) + 528 + 1;
+ avctx->initial_padding = lame_get_encoder_delay(s->gfp) + 528 + 1;
ff_af_queue_init(avctx, &s->afq);
avctx->frame_size = lame_get_framesize(s->gfp);
diff --git a/libavcodec/libopencore-amr.c b/libavcodec/libopencore-amr.c
index 6b459590d7..0704e94b47 100644
--- a/libavcodec/libopencore-amr.c
+++ b/libavcodec/libopencore-amr.c
@@ -200,7 +200,7 @@ static av_cold int amr_nb_encode_init(AVCodecContext *avctx)
}
avctx->frame_size = 160;
- avctx->delay = 50;
+ avctx->initial_padding = 50;
ff_af_queue_init(avctx, &s->afq);
s->enc_state = Encoder_Interface_init(s->enc_dtx);
@@ -250,7 +250,7 @@ static int amr_nb_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
return AVERROR(ENOMEM);
memcpy(flush_buf, samples, frame->nb_samples * sizeof(*flush_buf));
samples = flush_buf;
- if (frame->nb_samples < avctx->frame_size - avctx->delay)
+ if (frame->nb_samples < avctx->frame_size - avctx->initial_padding)
s->enc_last_frame = -1;
}
if ((ret = ff_af_queue_add(&s->afq, frame)) < 0) {
diff --git a/libavcodec/libopusenc.c b/libavcodec/libopusenc.c
index 9af8bcda7e..ee9655beef 100644
--- a/libavcodec/libopusenc.c
+++ b/libavcodec/libopusenc.c
@@ -87,7 +87,7 @@ static void libopus_write_header(AVCodecContext *avctx, int stream_count,
bytestream_put_buffer(&p, "OpusHead", 8);
bytestream_put_byte(&p, 1); /* Version */
bytestream_put_byte(&p, channels);
- bytestream_put_le16(&p, avctx->delay); /* Lookahead samples at 48kHz */
+ bytestream_put_le16(&p, avctx->initial_padding); /* Lookahead samples at 48kHz */
bytestream_put_le32(&p, avctx->sample_rate); /* Original sample rate */
bytestream_put_le16(&p, 0); /* Gain of 0dB is recommended. */
@@ -277,7 +277,7 @@ static int av_cold libopus_encode_init(AVCodecContext *avctx)
goto fail;
}
- ret = opus_multistream_encoder_ctl(enc, OPUS_GET_LOOKAHEAD(&avctx->delay));
+ ret = opus_multistream_encoder_ctl(enc, OPUS_GET_LOOKAHEAD(&avctx->initial_padding));
if (ret != OPUS_OK)
av_log(avctx, AV_LOG_WARNING,
"Unable to get number of lookahead samples: %s\n",
diff --git a/libavcodec/libspeexenc.c b/libavcodec/libspeexenc.c
index 651d7ace0b..98f89b214f 100644
--- a/libavcodec/libspeexenc.c
+++ b/libavcodec/libspeexenc.c
@@ -235,7 +235,7 @@ static av_cold int encode_init(AVCodecContext *avctx)
s->header.frames_per_packet = s->frames_per_packet;
/* set encoding delay */
- speex_encoder_ctl(s->enc_state, SPEEX_GET_LOOKAHEAD, &avctx->delay);
+ speex_encoder_ctl(s->enc_state, SPEEX_GET_LOOKAHEAD, &avctx->initial_padding);
ff_af_queue_init(avctx, &s->afq);
/* create header packet bytes from header struct */
diff --git a/libavcodec/libtwolame.c b/libavcodec/libtwolame.c
index def5feeb9d..400985ad32 100644
--- a/libavcodec/libtwolame.c
+++ b/libavcodec/libtwolame.c
@@ -60,7 +60,7 @@ static av_cold int twolame_encode_init(AVCodecContext *avctx)
int ret;
avctx->frame_size = TWOLAME_SAMPLES_PER_FRAME;
- avctx->delay = 512 - 32 + 1;
+ avctx->initial_padding = 512 - 32 + 1;
s->glopts = twolame_init();
if (!s->glopts)
@@ -151,7 +151,7 @@ static int twolame_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
avpkt->duration = ff_samples_to_time_base(avctx, frame->nb_samples);
if (frame) {
if (frame->pts != AV_NOPTS_VALUE)
- avpkt->pts = frame->pts - ff_samples_to_time_base(avctx, avctx->delay);
+ avpkt->pts = frame->pts - ff_samples_to_time_base(avctx, avctx->initial_padding);
} else {
avpkt->pts = s->next_pts;
}
diff --git a/libavcodec/libvo-aacenc.c b/libavcodec/libvo-aacenc.c
index 9450792311..6dd71174d3 100644
--- a/libavcodec/libvo-aacenc.c
+++ b/libavcodec/libvo-aacenc.c
@@ -61,7 +61,7 @@ static av_cold int aac_encode_init(AVCodecContext *avctx)
int index, ret;
avctx->frame_size = FRAME_SIZE;
- avctx->delay = ENC_DELAY;
+ avctx->initial_padding = ENC_DELAY;
s->last_frame = 2;
ff_af_queue_init(avctx, &s->afq);
diff --git a/libavcodec/libvo-amrwbenc.c b/libavcodec/libvo-amrwbenc.c
index b255ba5504..da3941b312 100644
--- a/libavcodec/libvo-amrwbenc.c
+++ b/libavcodec/libvo-amrwbenc.c
@@ -93,7 +93,7 @@ static av_cold int amr_wb_encode_init(AVCodecContext *avctx)
s->last_bitrate = avctx->bit_rate;
avctx->frame_size = 320;
- avctx->delay = 80;
+ avctx->initial_padding = 80;
s->state = E_IF_init();
@@ -131,7 +131,7 @@ static int amr_wb_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
}
if (frame->pts != AV_NOPTS_VALUE)
- avpkt->pts = frame->pts - ff_samples_to_time_base(avctx, avctx->delay);
+ avpkt->pts = frame->pts - ff_samples_to_time_base(avctx, avctx->initial_padding);
avpkt->size = size;
*got_packet_ptr = 1;
diff --git a/libavcodec/libvorbis.c b/libavcodec/libvorbis.c
index 4b4caaac17..07973e6379 100644
--- a/libavcodec/libvorbis.c
+++ b/libavcodec/libvorbis.c
@@ -322,8 +322,8 @@ static int libvorbis_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
if (duration > 0) {
/* we do not know encoder delay until we get the first packet from
* libvorbis, so we have to update the AudioFrameQueue counts */
- if (!avctx->delay) {
- avctx->delay = duration;
+ if (!avctx->initial_padding) {
+ avctx->initial_padding = duration;
s->afq.remaining_delay += duration;
s->afq.remaining_samples += duration;
}
diff --git a/libavcodec/mpegaudioenc.c b/libavcodec/mpegaudioenc.c
index 51a6f5be5a..4e074a582d 100644
--- a/libavcodec/mpegaudioenc.c
+++ b/libavcodec/mpegaudioenc.c
@@ -84,7 +84,7 @@ static av_cold int MPA_encode_init(AVCodecContext *avctx)
bitrate = bitrate / 1000;
s->nb_channels = channels;
avctx->frame_size = MPA_FRAME_SIZE;
- avctx->delay = 512 - 32 + 1;
+ avctx->initial_padding = 512 - 32 + 1;
/* encoding freq */
s->lsf = 0;
@@ -735,7 +735,7 @@ static int MPA_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
encode_frame(s, bit_alloc, padding);
if (frame->pts != AV_NOPTS_VALUE)
- avpkt->pts = frame->pts - ff_samples_to_time_base(avctx, avctx->delay);
+ avpkt->pts = frame->pts - ff_samples_to_time_base(avctx, avctx->initial_padding);
avpkt->size = put_bits_count(&s->pb) / 8;
*got_packet_ptr = 1;
diff --git a/libavcodec/nellymoserenc.c b/libavcodec/nellymoserenc.c
index 5732163476..9a84591456 100644
--- a/libavcodec/nellymoserenc.c
+++ b/libavcodec/nellymoserenc.c
@@ -165,7 +165,7 @@ static av_cold int encode_init(AVCodecContext *avctx)
}
avctx->frame_size = NELLY_SAMPLES;
- avctx->delay = NELLY_BUF_LEN;
+ avctx->initial_padding = NELLY_BUF_LEN;
ff_af_queue_init(avctx, &s->afq);
s->avctx = avctx;
if ((ret = ff_mdct_init(&s->mdct_ctx, 8, 0, 32768.0)) < 0)
diff --git a/libavcodec/ra144enc.c b/libavcodec/ra144enc.c
index 7627adc0a7..fd04766561 100644
--- a/libavcodec/ra144enc.c
+++ b/libavcodec/ra144enc.c
@@ -56,7 +56,7 @@ static av_cold int ra144_encode_init(AVCodecContext * avctx)
return -1;
}
avctx->frame_size = NBLOCKS * BLOCKSIZE;
- avctx->delay = avctx->frame_size;
+ avctx->initial_padding = avctx->frame_size;
avctx->bit_rate = 8000;
ractx = avctx->priv_data;
ractx->lpc_coef[0] = ractx->lpc_tables[0];
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index 89f249f093..b28a659f0a 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -1240,6 +1240,11 @@ int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *code
}
}
+#if FF_API_AUDIOENC_DELAY
+ if (av_codec_is_encoder(avctx->codec))
+ avctx->delay = avctx->initial_padding;
+#endif
+
if (av_codec_is_decoder(avctx->codec)) {
/* validate channel layout from the decoder */
if (avctx->channel_layout) {
@@ -1447,6 +1452,10 @@ int attribute_align_arg avcodec_encode_audio2(AVCodecContext *avctx,
end:
av_frame_free(&padded_frame);
+#if FF_API_AUDIOENC_DELAY
+ avctx->delay = avctx->initial_padding;
+#endif
+
return ret;
}
diff --git a/libavcodec/version.h b/libavcodec/version.h
index 90b1f10f65..c44686d6ec 100644
--- a/libavcodec/version.h
+++ b/libavcodec/version.h
@@ -29,8 +29,8 @@
#include "libavutil/version.h"
#define LIBAVCODEC_VERSION_MAJOR 56
-#define LIBAVCODEC_VERSION_MINOR 2
-#define LIBAVCODEC_VERSION_MICRO 2
+#define LIBAVCODEC_VERSION_MINOR 3
+#define LIBAVCODEC_VERSION_MICRO 0
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \
@@ -153,5 +153,8 @@
#ifndef FF_API_AFD
#define FF_API_AFD (LIBAVCODEC_VERSION_MAJOR < 57)
#endif
+#ifndef FF_API_AUDIOENC_DELAY
+#define FF_API_AUDIOENC_DELAY (LIBAVCODEC_VERSION_MAJOR < 58)
+#endif
#endif /* AVCODEC_VERSION_H */
diff --git a/libavcodec/wmaenc.c b/libavcodec/wmaenc.c
index 95fc199ef8..e801663d66 100644
--- a/libavcodec/wmaenc.c
+++ b/libavcodec/wmaenc.c
@@ -92,8 +92,7 @@ static av_cold int encode_init(AVCodecContext *avctx)
avctx->block_align = block_align;
avctx->bit_rate = avctx->block_align * 8LL * avctx->sample_rate /
s->frame_len;
- avctx->frame_size =
- avctx->delay = s->frame_len;
+ avctx->frame_size = avctx->initial_padding = s->frame_len;
return 0;
}
@@ -420,7 +419,7 @@ static int encode_superframe(AVCodecContext *avctx, AVPacket *avpkt,
flush_put_bits(&s->pb);
if (frame->pts != AV_NOPTS_VALUE)
- avpkt->pts = frame->pts - ff_samples_to_time_base(avctx, avctx->delay);
+ avpkt->pts = frame->pts - ff_samples_to_time_base(avctx, avctx->initial_padding);
avpkt->size = avctx->block_align;
*got_packet_ptr = 1;