Message ID | 1474910019-13882-4-git-send-email-jtoohill@google.com |
---|---|
State | Superseded |
Headers | show |
On 9/26/2016 2:13 PM, Jon Toohill wrote: > trailing_padding is not known before encoding. > --- > libavformat/mp3enc.c | 20 +++++++++++++------- > 1 file changed, 13 insertions(+), 7 deletions(-) > > diff --git a/libavformat/mp3enc.c b/libavformat/mp3enc.c > index de63401..433b070 100644 > --- a/libavformat/mp3enc.c > +++ b/libavformat/mp3enc.c > @@ -247,12 +247,7 @@ static int mp3_write_xing(AVFormatContext *s) > ffio_fill(dyn_ctx, 0, 8); // empty replaygain fields > 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) { > - 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); > + avio_wb24(dyn_ctx, 0); // empty encoder delay/padding > > avio_w8(dyn_ctx, 0); // misc > avio_w8(dyn_ctx, 0); // mp3gain > @@ -381,7 +376,7 @@ static void mp3_update_xing(AVFormatContext *s) > AVReplayGain *rg; > uint16_t tag_crc; > uint8_t *toc; > - int i, rg_size; > + int i, rg_size, delay, padding; > > /* replace "Xing" identification string with "Info" for CBR files. */ > if (!mp3->has_variable_bitrate) > @@ -422,6 +417,17 @@ static void mp3_update_xing(AVFormatContext *s) > } > } > > + /* write encoder delay/padding */ > + delay = FFMAX(s->streams[0]->codec->initial_padding - 528 - 1, 0); > + padding = s->streams[0]->codec->trailing_padding; codecpar. > + if (delay >= 1 << 12) { > + av_log(s, AV_LOG_WARNING, "Too many samples of initial padding.\n"); > + } > + if (padding >= 1 << 12) { > + av_log(s, AV_LOG_WARNING, "Too many samples of initial padding.\n"); > + } > + AV_WB24(mp3->xing_frame + mp3->xing_offset + 141, (delay << 12) + padding); > + > AV_WB32(mp3->xing_frame + mp3->xing_offset + XING_SIZE - 8, mp3->audio_size); > AV_WB16(mp3->xing_frame + mp3->xing_offset + XING_SIZE - 4, mp3->audio_crc); > >
diff --git a/libavformat/mp3enc.c b/libavformat/mp3enc.c index de63401..433b070 100644 --- a/libavformat/mp3enc.c +++ b/libavformat/mp3enc.c @@ -247,12 +247,7 @@ static int mp3_write_xing(AVFormatContext *s) ffio_fill(dyn_ctx, 0, 8); // empty replaygain fields 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) { - 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); + avio_wb24(dyn_ctx, 0); // empty encoder delay/padding avio_w8(dyn_ctx, 0); // misc avio_w8(dyn_ctx, 0); // mp3gain @@ -381,7 +376,7 @@ static void mp3_update_xing(AVFormatContext *s) AVReplayGain *rg; uint16_t tag_crc; uint8_t *toc; - int i, rg_size; + int i, rg_size, delay, padding; /* replace "Xing" identification string with "Info" for CBR files. */ if (!mp3->has_variable_bitrate) @@ -422,6 +417,17 @@ static void mp3_update_xing(AVFormatContext *s) } } + /* write encoder delay/padding */ + delay = FFMAX(s->streams[0]->codec->initial_padding - 528 - 1, 0); + padding = s->streams[0]->codec->trailing_padding; + if (delay >= 1 << 12) { + av_log(s, AV_LOG_WARNING, "Too many samples of initial padding.\n"); + } + if (padding >= 1 << 12) { + av_log(s, AV_LOG_WARNING, "Too many samples of initial padding.\n"); + } + AV_WB24(mp3->xing_frame + mp3->xing_offset + 141, (delay << 12) + padding); + AV_WB32(mp3->xing_frame + mp3->xing_offset + XING_SIZE - 8, mp3->audio_size); AV_WB16(mp3->xing_frame + mp3->xing_offset + XING_SIZE - 4, mp3->audio_crc);