@ -61,6 +61,12 @@ static const AVOption options[] = {
{ " iblock " , " Sets the impulse block bias " , offsetof ( OggVorbisContext , iblock ) , AV_OPT_TYPE_DOUBLE , { . dbl = 0 } , - 15 , 0 , AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM } ,
{ NULL }
} ;
static const AVCodecDefault defaults [ ] = {
{ " b " , " 0 " } ,
{ NULL } ,
} ;
static const AVClass class = { " libvorbis " , av_default_item_name , options , LIBAVUTIL_VERSION_INT } ;
@ -81,12 +87,15 @@ static av_cold int oggvorbis_init_encoder(vorbis_info *vi,
double cfreq ;
int ret ;
if ( avctx - > flags & CODEC_FLAG_QSCALE ) {
if ( avctx - > flags & CODEC_FLAG_QSCALE | | ! avctx - > bit_rate ) {
/* variable bitrate
* NOTE : we use the oggenc range of - 1 to 10 for global_quality for
* user convenience , but libvorbis uses - 0.1 to 1.0
* user convenience , but libvorbis uses - 0.1 to 1.0 .
*/
float q = avctx - > global_quality / ( float ) FF_QP2LAMBDA ;
/* default to 3 if the user did not set quality or bitrate */
if ( ! ( avctx - > flags & CODEC_FLAG_QSCALE ) )
q = 3.0 ;
if ( ( ret = vorbis_encode_setup_vbr ( vi , avctx - > channels ,
avctx - > sample_rate ,
q / 10.0 ) ) )
@ -307,4 +316,5 @@ AVCodec ff_libvorbis_encoder = {
AV_SAMPLE_FMT_NONE } ,
. long_name = NULL_IF_CONFIG_SMALL ( " libvorbis Vorbis " ) ,
. priv_class = & class ,
. defaults = defaults ,
} ;