[FFmpeg-devel] [PATCH 1/3] lavf/mp3dec: pass Xing gapless metadata to AVCodecParameters
Jon Toohill
jtoohill at google.com
Thu Jun 16 20:16:05 CEST 2016
Also removes decoder delay compensation from libmp3lame and mp3enc.
initial_padding specifies only encoder delay, decoder delay is
handled by start_skip_samples.
---
libavcodec/libmp3lame.c | 2 +-
libavformat/mp3dec.c | 2 ++
libavformat/mp3enc.c | 9 ++++++---
3 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/libavcodec/libmp3lame.c b/libavcodec/libmp3lame.c
index 5642264..198ac94 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->initial_padding = lame_get_encoder_delay(s->gfp) + 528 + 1;
+ avctx->initial_padding = lame_get_encoder_delay(s->gfp);
ff_af_queue_init(avctx, &s->afq);
avctx->frame_size = lame_get_framesize(s->gfp);
diff --git a/libavformat/mp3dec.c b/libavformat/mp3dec.c
index 56c7f8c..345fa88 100644
--- a/libavformat/mp3dec.c
+++ b/libavformat/mp3dec.c
@@ -239,6 +239,8 @@ static void mp3_parse_info_tag(AVFormatContext *s, AVStream *st,
mp3->start_pad = v>>12;
mp3-> end_pad = v&4095;
+ st->codecpar->initial_padding = mp3->start_pad;
+ st->codecpar->trailing_padding = mp3->end_pad;
st->start_skip_samples = mp3->start_pad + 528 + 1;
if (mp3->frames) {
st->first_discard_sample = -mp3->end_pad + 528 + 1 + mp3->frames * (int64_t)spf;
diff --git a/libavformat/mp3enc.c b/libavformat/mp3enc.c
index de63401..da70d13 100644
--- a/libavformat/mp3enc.c
+++ b/libavformat/mp3enc.c
@@ -248,11 +248,14 @@ static int mp3_write_xing(AVFormatContext *s)
avio_w8(dyn_ctx, 0); // unknown encoding flags
avio_w8(dyn_ctx, 0); // unknown abr/minimal bitrate
- // encoder delay
- if (par->initial_padding - 528 - 1 >= 1 << 12) {
+ // encoder delay/padding
+ if (par->initial_padding >= 1 << 12) {
av_log(s, AV_LOG_WARNING, "Too many samples of initial padding.\n");
}
- avio_wb24(dyn_ctx, FFMAX(par->initial_padding - 528 - 1, 0)<<12);
+ if (par->trailing_padding >= 1 << 12) {
+ av_log(s, AV_LOG_WARNING, "Too many samples of trailing padding.\n");
+ }
+ avio_wb24(dyn_ctx, (par->initial_padding << 12) | (par->trailing_padding & 0xFFF));
avio_w8(dyn_ctx, 0); // misc
avio_w8(dyn_ctx, 0); // mp3gain
--
2.8.0.rc3.226.g39d4020
More information about the ffmpeg-devel
mailing list