[FFmpeg-devel] [PATCH] avcodec/libmp3lame: add ABR support

Michael Niedermayer michaelni at gmx.at
Wed Oct 30 16:49:01 CET 2013


On Thu, Oct 24, 2013 at 08:19:48PM -0700, Timothy Gu wrote:
> Signed-off-by: Timothy Gu <timothygu99 at gmail.com>
> ---
>  doc/encoders.texi       |  7 ++++++-
>  libavcodec/libmp3lame.c | 11 +++++++++--
>  2 files changed, 15 insertions(+), 3 deletions(-)
> 
> diff --git a/doc/encoders.texi b/doc/encoders.texi
> index 0c01364..2c7d9cb 100644
> --- a/doc/encoders.texi
> +++ b/doc/encoders.texi
> @@ -509,7 +509,7 @@ The following options are supported by the libmp3lame wrapper. The
>  
>  @table @option
>  @item b (@emph{-b})
> -Set bitrate expressed in bits/s for CBR. LAME @code{bitrate} is
> +Set bitrate expressed in bits/s for CBR or ABR. LAME @code{bitrate} is
>  expressed in kilobits/s.
>  
>  @item q (@emph{-V})
> @@ -531,6 +531,11 @@ has this enabled by default, but can be overriden by use
>  Enable the encoder to use (on a frame by frame basis) either L/R
>  stereo or mid/side stereo. Default value is 1.
>  
> + at item abr (@emph{--abr})
> +Enable the encoder to use ABR when set to 1. The @command{lame}
> + at option{--abr} sets the target bitrate, while this options only
> +tells FFmpeg to use ABR still relies on @option{b} to set bitrate.
> +
>  @end table
>  
>  @section libopencore-amrnb
> diff --git a/libavcodec/libmp3lame.c b/libavcodec/libmp3lame.c
> index 0fb9c6a..ac40674 100644
> --- a/libavcodec/libmp3lame.c
> +++ b/libavcodec/libmp3lame.c
> @@ -49,6 +49,7 @@ typedef struct LAMEContext {
>      int buffer_size;
>      int reservoir;
>      int joint_stereo;
> +    int abr;
>      float *samples_flt[2];
>      AudioFrameQueue afq;
>      AVFloatDSPContext fdsp;
> @@ -119,8 +120,13 @@ static av_cold int mp3lame_encode_init(AVCodecContext *avctx)
>          lame_set_VBR(s->gfp, vbr_default);
>          lame_set_VBR_quality(s->gfp, avctx->global_quality / (float)FF_QP2LAMBDA);
>      } else {
> -        if (avctx->bit_rate)                // CBR
> -            lame_set_brate(s->gfp, avctx->bit_rate / 1000);
> +        if (avctx->bit_rate) {
> +            if (s->abr) {                   // ABR
> +                lame_set_VBR(gfp, vbr_abr);
> +                lame_set_VBR_mean_bitrate_kbps(gfp, avctx->bit_rate / 1000);
> +            } else                          // CBR
> +                lame_set_brate(s->gfp, avctx->bit_rate / 1000);
> +        }
>      }
>  
>      /* do not get a Xing VBR header frame from LAME */

doesnt build:
In file included from libavcodec/libmp3lame.c:1:
libavcodec/libmp3lame.c:125:30: error: use of undeclared identifier 'gfp'
                lame_set_VBR(gfp, vbr_abr);
                             ^
libavcodec/libmp3lame.c:126:48: error: use of undeclared identifier 'gfp'
                lame_set_VBR_mean_bitrate_kbps(gfp, avctx->bit_rate / 1000);



> @@ -265,6 +271,7 @@ static int mp3lame_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
>  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 },
>      { NULL },
>  };
>  
> -- 
> 1.8.1.2
> 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

You can kill me, but you cannot change the truth.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20131030/fb90cce1/attachment.asc>


More information about the ffmpeg-devel mailing list