@ -718,43 +718,66 @@ static int vp8_encode(AVCodecContext *avctx, AVPacket *pkt,
# define OFFSET(x) offsetof(VP8Context, x)
# define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
static const AVOption options [ ] = {
{ " cpu-used " , " Quality/Speed ratio modifier " , OFFSET ( cpu_used ) , AV_OPT_TYPE_INT , { . i64 = INT_MIN } , INT_MIN , INT_MAX , VE } ,
{ " auto-alt-ref " , " Enable use of alternate reference "
" frames (2-pass only) " , OFFSET ( auto_alt_ref ) , AV_OPT_TYPE_INT , { . i64 = - 1 } , - 1 , 1 , VE } ,
{ " lag-in-frames " , " Number of frames to look ahead for "
" alternate reference frame selection " , OFFSET ( lag_in_frames ) , AV_OPT_TYPE_INT , { . i64 = - 1 } , - 1 , INT_MAX , VE } ,
{ " arnr-maxframes " , " altref noise reduction max frame count " , OFFSET ( arnr_max_frames ) , AV_OPT_TYPE_INT , { . i64 = - 1 } , - 1 , INT_MAX , VE } ,
{ " arnr-strength " , " altref noise reduction filter strength " , OFFSET ( arnr_strength ) , AV_OPT_TYPE_INT , { . i64 = - 1 } , - 1 , INT_MAX , VE } ,
{ " arnr-type " , " altref noise reduction filter type " , OFFSET ( arnr_type ) , AV_OPT_TYPE_INT , { . i64 = - 1 } , - 1 , INT_MAX , VE , " arnr_type " } ,
{ " backward " , NULL , 0 , AV_OPT_TYPE_CONST , { . i64 = 1 } , 0 , 0 , VE , " arnr_type " } ,
{ " forward " , NULL , 0 , AV_OPT_TYPE_CONST , { . i64 = 2 } , 0 , 0 , VE , " arnr_type " } ,
{ " centered " , NULL , 0 , AV_OPT_TYPE_CONST , { . i64 = 3 } , 0 , 0 , VE , " arnr_type " } ,
{ " deadline " , " Time to spend encoding, in microseconds. " , OFFSET ( deadline ) , AV_OPT_TYPE_INT , { . i64 = VPX_DL_GOOD_QUALITY } , INT_MIN , INT_MAX , VE , " quality " } ,
{ " best " , NULL , 0 , AV_OPT_TYPE_CONST , { . i64 = VPX_DL_BEST_QUALITY } , 0 , 0 , VE , " quality " } ,
{ " good " , NULL , 0 , AV_OPT_TYPE_CONST , { . i64 = VPX_DL_GOOD_QUALITY } , 0 , 0 , VE , " quality " } ,
{ " realtime " , NULL , 0 , AV_OPT_TYPE_CONST , { . i64 = VPX_DL_REALTIME } , 0 , 0 , VE , " quality " } ,
{ " error-resilient " , " Error resilience configuration " , OFFSET ( error_resilient ) , AV_OPT_TYPE_FLAGS , { . i64 = 0 } , INT_MIN , INT_MAX , VE , " er " } ,
{ " max-intra-rate " , " Maximum I-frame bitrate (pct) 0=unlimited " , OFFSET ( max_intra_rate ) , AV_OPT_TYPE_INT , { . i64 = - 1 } , - 1 , INT_MAX , VE } ,
# ifdef VPX_ERROR_RESILIENT_DEFAULT
{ " default " , " Improve resiliency against losses of whole frames " , 0 , AV_OPT_TYPE_CONST , { . i64 = VPX_ERROR_RESILIENT_DEFAULT } , 0 , 0 , VE , " er " } ,
{ " partitions " , " The frame partitions are independently decodable "
" by the bool decoder, meaning that partitions can be decoded even "
" though earlier partitions have been lost. Note that intra predicition "
" is still done over the partition boundary. " , 0 , AV_OPT_TYPE_CONST , { . i64 = VPX_ERROR_RESILIENT_PARTITIONS } , 0 , 0 , VE , " er " } ,
# ifndef VPX_ERROR_RESILIENT_DEFAULT
# define VPX_ERROR_RESILIENT_DEFAULT 1
# define VPX_ERROR_RESILIENT_PARTITIONS 2
# endif
{ " speed " , " " , offsetof ( VP8Context , cpu_used ) , AV_OPT_TYPE_INT , { . i64 = 3 } , - 16 , 16 , VE } ,
{ " quality " , " " , offsetof ( VP8Context , deadline ) , AV_OPT_TYPE_INT , { . i64 = VPX_DL_GOOD_QUALITY } , INT_MIN , INT_MAX , VE , " quality " } ,
{ " vp8flags " , " " , offsetof ( VP8Context , flags ) , FF_OPT_TYPE_FLAGS , { . i64 = 0 } , 0 , UINT_MAX , VE , " flags " } ,
{ " error_resilient " , " enable error resilience " , 0 , FF_OPT_TYPE_CONST , { . dbl = VP8F_ERROR_RESILIENT } , INT_MIN , INT_MAX , VE , " flags " } ,
{ " altref " , " enable use of alternate reference frames (VP8/2-pass only) " , 0 , FF_OPT_TYPE_CONST , { . dbl = VP8F_AUTO_ALT_REF } , INT_MIN , INT_MAX , VE , " flags " } ,
{ " arnr_max_frames " , " altref noise reduction max frame count " , offsetof ( VP8Context , arnr_max_frames ) , AV_OPT_TYPE_INT , { . i64 = 0 } , 0 , 15 , VE } ,
{ " arnr_strength " , " altref noise reduction filter strength " , offsetof ( VP8Context , arnr_strength ) , AV_OPT_TYPE_INT , { . i64 = 3 } , 0 , 6 , VE } ,
{ " arnr_type " , " altref noise reduction filter type " , offsetof ( VP8Context , arnr_type ) , AV_OPT_TYPE_INT , { . i64 = 3 } , 1 , 3 , VE } ,
{ " rc_lookahead " , " Number of frames to look ahead for alternate reference frame selection " , offsetof ( VP8Context , lag_in_frames ) , AV_OPT_TYPE_INT , { . i64 = 25 } , 0 , 25 , VE } ,
{ " crf " , " Select the quality for constant quality mode " , offsetof ( VP8Context , crf ) , AV_OPT_TYPE_INT , { . i64 = 0 } , 0 , 63 , VE } ,
# define COMMON_OPTIONS \
{ " cpu-used " , " Quality/Speed ratio modifier " , OFFSET ( cpu_used ) , AV_OPT_TYPE_INT , { . i64 = INT_MIN } , INT_MIN , INT_MAX , VE } , \
{ " auto-alt-ref " , " Enable use of alternate reference " \
" frames (2-pass only) " , OFFSET ( auto_alt_ref ) , AV_OPT_TYPE_INT , { . i64 = - 1 } , - 1 , 1 , VE } , \
{ " lag-in-frames " , " Number of frames to look ahead for " \
" alternate reference frame selection " , OFFSET ( lag_in_frames ) , AV_OPT_TYPE_INT , { . i64 = - 1 } , - 1 , INT_MAX , VE } , \
{ " arnr-maxframes " , " altref noise reduction max frame count " , OFFSET ( arnr_max_frames ) , AV_OPT_TYPE_INT , { . i64 = - 1 } , - 1 , INT_MAX , VE } , \
{ " arnr-strength " , " altref noise reduction filter strength " , OFFSET ( arnr_strength ) , AV_OPT_TYPE_INT , { . i64 = - 1 } , - 1 , INT_MAX , VE } , \
{ " arnr-type " , " altref noise reduction filter type " , OFFSET ( arnr_type ) , AV_OPT_TYPE_INT , { . i64 = - 1 } , - 1 , INT_MAX , VE , " arnr_type " } , \
{ " backward " , NULL , 0 , AV_OPT_TYPE_CONST , { . i64 = 1 } , 0 , 0 , VE , " arnr_type " } , \
{ " forward " , NULL , 0 , AV_OPT_TYPE_CONST , { . i64 = 2 } , 0 , 0 , VE , " arnr_type " } , \
{ " centered " , NULL , 0 , AV_OPT_TYPE_CONST , { . i64 = 3 } , 0 , 0 , VE , " arnr_type " } , \
{ " deadline " , " Time to spend encoding, in microseconds. " , OFFSET ( deadline ) , AV_OPT_TYPE_INT , { . i64 = VPX_DL_GOOD_QUALITY } , INT_MIN , INT_MAX , VE , " quality " } , \
{ " best " , NULL , 0 , AV_OPT_TYPE_CONST , { . i64 = VPX_DL_BEST_QUALITY } , 0 , 0 , VE , " quality " } , \
{ " good " , NULL , 0 , AV_OPT_TYPE_CONST , { . i64 = VPX_DL_GOOD_QUALITY } , 0 , 0 , VE , " quality " } , \
{ " realtime " , NULL , 0 , AV_OPT_TYPE_CONST , { . i64 = VPX_DL_REALTIME } , 0 , 0 , VE , " quality " } , \
{ " error-resilient " , " Error resilience configuration " , OFFSET ( error_resilient ) , AV_OPT_TYPE_FLAGS , { . i64 = 0 } , INT_MIN , INT_MAX , VE , " er " } , \
{ " max-intra-rate " , " Maximum I-frame bitrate (pct) 0=unlimited " , OFFSET ( max_intra_rate ) , AV_OPT_TYPE_INT , { . i64 = - 1 } , - 1 , INT_MAX , VE } , \
{ " default " , " Improve resiliency against losses of whole frames " , 0 , AV_OPT_TYPE_CONST , { . i64 = VPX_ERROR_RESILIENT_DEFAULT } , 0 , 0 , VE , " er " } , \
{ " partitions " , " The frame partitions are independently decodable " \
" by the bool decoder, meaning that partitions can be decoded even " \
" though earlier partitions have been lost. Note that intra predicition " \
" is still done over the partition boundary. " , 0 , AV_OPT_TYPE_CONST , { . i64 = VPX_ERROR_RESILIENT_PARTITIONS } , 0 , 0 , VE , " er " } , \
{ " crf " , " Select the quality for constant quality mode " , offsetof ( VP8Context , crf ) , AV_OPT_TYPE_INT , { . i64 = 0 } , 0 , 63 , VE } , \
# define LEGACY_OPTIONS \
{ " speed " , " " , offsetof ( VP8Context , cpu_used ) , AV_OPT_TYPE_INT , { . i64 = 3 } , - 16 , 16 , VE } , \
{ " quality " , " " , offsetof ( VP8Context , deadline ) , AV_OPT_TYPE_INT , { . i64 = VPX_DL_GOOD_QUALITY } , INT_MIN , INT_MAX , VE , " quality " } , \
{ " vp8flags " , " " , offsetof ( VP8Context , flags ) , FF_OPT_TYPE_FLAGS , { . i64 = 0 } , 0 , UINT_MAX , VE , " flags " } , \
{ " error_resilient " , " enable error resilience " , 0 , FF_OPT_TYPE_CONST , { . dbl = VP8F_ERROR_RESILIENT } , INT_MIN , INT_MAX , VE , " flags " } , \
{ " altref " , " enable use of alternate reference frames (VP8/2-pass only) " , 0 , FF_OPT_TYPE_CONST , { . dbl = VP8F_AUTO_ALT_REF } , INT_MIN , INT_MAX , VE , " flags " } , \
{ " arnr_max_frames " , " altref noise reduction max frame count " , offsetof ( VP8Context , arnr_max_frames ) , AV_OPT_TYPE_INT , { . i64 = 0 } , 0 , 15 , VE } , \
{ " arnr_strength " , " altref noise reduction filter strength " , offsetof ( VP8Context , arnr_strength ) , AV_OPT_TYPE_INT , { . i64 = 3 } , 0 , 6 , VE } , \
{ " arnr_type " , " altref noise reduction filter type " , offsetof ( VP8Context , arnr_type ) , AV_OPT_TYPE_INT , { . i64 = 3 } , 1 , 3 , VE } , \
{ " rc_lookahead " , " Number of frames to look ahead for alternate reference frame selection " , offsetof ( VP8Context , lag_in_frames ) , AV_OPT_TYPE_INT , { . i64 = 25 } , 0 , 25 , VE } , \
# if CONFIG_LIBVPX_VP8_ENCODER
static const AVOption vp8_options [ ] = {
COMMON_OPTIONS
LEGACY_OPTIONS
{ NULL }
} ;
# endif
# if CONFIG_LIBVPX_VP9_ENCODER
static const AVOption vp9_options [ ] = {
COMMON_OPTIONS
LEGACY_OPTIONS
{ NULL }
} ;
# endif
# undef COMMON_OPTIONS
# undef LEGACY_OPTIONS
static const AVCodecDefault defaults [ ] = {
{ " qmin " , " -1 " } ,
@ -773,7 +796,7 @@ static av_cold int vp8_init(AVCodecContext *avctx)
static const AVClass class_vp8 = {
. class_name = " libvpx-vp8 encoder " ,
. item_name = av_default_item_name ,
. option = options ,
. option = vp8_ options,
. version = LIBAVUTIL_VERSION_INT ,
} ;
@ -802,7 +825,7 @@ static av_cold int vp9_init(AVCodecContext *avctx)
static const AVClass class_vp9 = {
. class_name = " libvpx-vp9 encoder " ,
. item_name = av_default_item_name ,
. option = options ,
. option = vp9_ options,
. version = LIBAVUTIL_VERSION_INT ,
} ;