avcodec/libmp3lame: add ABR support
Signed-off-by: Timothy Gu <timothygu99@gmail.com> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
		
							parent
							
								
									67d1d06225
								
							
						
					
					
						commit
						d3211cfaed
					
				@ -785,7 +785,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})
 | 
			
		||||
@ -807,6 +807,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.
 | 
			
		||||
 | 
			
		||||
@item abr (@emph{--abr})
 | 
			
		||||
Enable the encoder to use ABR when set to 1. The @command{lame}
 | 
			
		||||
@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
 | 
			
		||||
 | 
			
		||||
@ -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(s->gfp, vbr_abr);
 | 
			
		||||
                lame_set_VBR_mean_bitrate_kbps(s->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 */
 | 
			
		||||
@ -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 },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user