@ -515,6 +515,66 @@ static void set_color_range(AVCodecContext *avctx)
# endif
# endif
/**
* Set the target bitrate to VPX library default . Also set CRF to 32 if needed .
*/
static void set_vp8_defaults ( AVCodecContext * avctx ,
struct vpx_codec_enc_cfg * enccfg )
{
VPxContext * ctx = avctx - > priv_data ;
av_assert0 ( ! avctx - > bit_rate ) ;
avctx - > bit_rate = enccfg - > rc_target_bitrate * 1000 ;
if ( enccfg - > rc_end_usage = = VPX_CQ ) {
av_log ( avctx , AV_LOG_WARNING ,
" Bitrate not specified for constrained quality mode, using default of %dkbit/sec \n " ,
enccfg - > rc_target_bitrate ) ;
} else {
enccfg - > rc_end_usage = VPX_CQ ;
ctx - > crf = 32 ;
av_log ( avctx , AV_LOG_WARNING ,
" Neither bitrate nor constrained quality specified, using default CRF of %d and bitrate of %dkbit/sec \n " ,
ctx - > crf , enccfg - > rc_target_bitrate ) ;
}
}
# if CONFIG_LIBVPX_VP9_ENCODER
/**
* Keep the target bitrate at 0 to engage constant quality mode . If CRF is not
* set , use 32.
*/
static void set_vp9_defaults ( AVCodecContext * avctx ,
struct vpx_codec_enc_cfg * enccfg )
{
VPxContext * ctx = avctx - > priv_data ;
av_assert0 ( ! avctx - > bit_rate ) ;
if ( enccfg - > rc_end_usage ! = VPX_Q & & ctx - > lossless < 0 ) {
enccfg - > rc_end_usage = VPX_Q ;
ctx - > crf = 32 ;
av_log ( avctx , AV_LOG_WARNING ,
" Neither bitrate nor constrained quality specified, using default CRF of %d \n " ,
ctx - > crf ) ;
}
}
# endif
/**
* Called when the bitrate is not set . It sets appropriate default values for
* bitrate and CRF .
*/
static void set_vpx_defaults ( AVCodecContext * avctx ,
struct vpx_codec_enc_cfg * enccfg )
{
av_assert0 ( ! avctx - > bit_rate ) ;
# if CONFIG_LIBVPX_VP9_ENCODER
if ( avctx - > codec_id = = AV_CODEC_ID_VP9 ) {
set_vp9_defaults ( avctx , enccfg ) ;
return ;
}
# endif
set_vp8_defaults ( avctx , enccfg ) ;
}
static av_cold int vpx_init ( AVCodecContext * avctx ,
const struct vpx_codec_iface * iface )
{
@ -585,18 +645,9 @@ static av_cold int vpx_init(AVCodecContext *avctx,
if ( avctx - > bit_rate ) {
enccfg . rc_target_bitrate = av_rescale_rnd ( avctx - > bit_rate , 1 , 1000 ,
AV_ROUND_NEAR_INF ) ;
# if CONFIG_LIBVPX_VP9_ENCODER
} else if ( enccfg . rc_end_usage = = VPX_Q ) {
# endif
} else {
if ( enccfg . rc_end_usage = = VPX_CQ ) {
enccfg . rc_target_bitrate = 1000000 ;
} else {
avctx - > bit_rate = enccfg . rc_target_bitrate * 1000 ;
av_log ( avctx , AV_LOG_WARNING ,
" Neither bitrate nor constrained quality specified, using default bitrate of %dkbit/sec \n " ,
enccfg . rc_target_bitrate ) ;
}
// Set bitrate to default value. Also sets CRF to default if needed.
set_vpx_defaults ( avctx , & enccfg ) ;
}
if ( avctx - > codec_id = = AV_CODEC_ID_VP9 & & ctx - > lossless = = 1 ) {
@ -1459,6 +1510,7 @@ static const AVOption vp9_options[] = {
# undef LEGACY_OPTIONS
static const AVCodecDefault defaults [ ] = {
{ " b " , " 0 " } ,
{ " qmin " , " -1 " } ,
{ " qmax " , " -1 " } ,
{ " g " , " -1 " } ,