[FFmpeg-devel] [PATCH 1/3] Add replay_gain and find_peak_sample options to libmp3lame
Michael Niedermayer
michaelni at gmx.at
Sat May 24 15:15:06 CEST 2014
On Fri, May 23, 2014 at 07:40:14PM -0700, Giovanni Motta wrote:
> Add Lame tag to the Xing/Info header of mp3 files.
>
> Fixes ticket #3577
>
> A few notes/comments:
>
> - A failing FATE test has been updated with new CRC.
>
> - The Lame info tag is generated by libmp3lame and passed to the mp3enc via extradata.
>
> - To keep the size of the tag constant and simplify the code, vbr_scale is always added.
>
> - The Lame string vendor in the tag is fixed length, so vendor is trimmed
> to 9 bytes and padded with 0x20 if shorter.
>
> - replay_gain and find_peak need a version of lame patched with
> libmp3lame/lame.c Revision 1.367 (patch tracker item #66): http://sourceforge.net/p/lame/patches/66/
> They have no effect otherwise.
>
> - find_peak_sample only works if Lame is configured with --enable-decoder.
> It has no effect otherwise.
there should be an error or warning printed if the user specifies an
option that doesnt work with the used Lame
>
> - Some fields in the Lame tag are not set because not accessible from
> the set/get API (preset and noise shaping, for example). I will bring this to
> the attention of the Lame developers and help there with any change if we
> decide to merge the patch.
>
> Thanks
>
> Giovanni
>
>
>
> ---
> libavcodec/libmp3lame.c | 17 +++++++++++++----
> 1 file changed, 13 insertions(+), 4 deletions(-)
>
> diff --git a/libavcodec/libmp3lame.c b/libavcodec/libmp3lame.c
> index a8c39cc..01b8c7b 100644
> --- a/libavcodec/libmp3lame.c
> +++ b/libavcodec/libmp3lame.c
> @@ -48,6 +48,8 @@ typedef struct LAMEContext {
> int buffer_index;
> int buffer_size;
> int reservoir;
> + int find_peak_sample;
> + int replay_gain;
> int joint_stereo;
> int abr;
> float *samples_flt[2];
> @@ -97,7 +99,6 @@ static av_cold int mp3lame_encode_init(AVCodecContext *avctx)
> if ((s->gfp = lame_init()) == NULL)
> return AVERROR(ENOMEM);
>
> -
> lame_set_num_channels(s->gfp, avctx->channels);
> lame_set_mode(s->gfp, avctx->channels > 1 ? s->joint_stereo ? JOINT_STEREO : STEREO : MONO);
>
> @@ -131,6 +132,12 @@ static av_cold int mp3lame_encode_init(AVCodecContext *avctx)
> /* bit reservoir usage */
> lame_set_disable_reservoir(s->gfp, !s->reservoir);
>
> + /* find peak sample */
> + lame_set_decode_on_the_fly(s->gfp, s->find_peak_sample);
> +
> + /* compute replay gain */
> + lame_set_findReplayGain(s->gfp, s->replay_gain);
> +
> /* set specified parameters */
> if (lame_init_params(s->gfp) < 0) {
> ret = -1;
> @@ -267,9 +274,11 @@ static int mp3lame_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
> #define OFFSET(x) offsetof(LAMEContext, x)
> #define AE AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
> static const AVOption options[] = {
> - { "reservoir", "use bit reservoir", OFFSET(reservoir), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, AE },
> - { "joint_stereo", "use joint stereo", OFFSET(joint_stereo), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, AE },
> - { "abr", "use ABR", OFFSET(abr), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, AE },
> + { "reservoir", "use bit reservoir", OFFSET(reservoir), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, AE },
> + { "find_peak_sample", "find peak sample", OFFSET(find_peak_sample), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, AE },
> + { "replay_gain", "compute replay gain", OFFSET(replay_gain), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, AE },
> + { "joint_stereo", "use joint stereo", OFFSET(joint_stereo), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, AE },
> + { "abr", "use ABR", OFFSET(abr), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, AE },
> { NULL },
missing documentation (in doc/...)
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
Asymptotically faster algorithms should always be preferred if you have
asymptotical amounts of data
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20140524/00a6f4a8/attachment.asc>
More information about the ffmpeg-devel
mailing list