X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fvaapi_encode_vp8.c;h=7d4578f6747497931ba857c9ca85a7ee8a5e9908;hb=d92f38c179591a608390ffa9fee59c309142e79d;hp=166636cd8429542a0bd48c2b1e0ab738cd42f4a7;hpb=f32d2939555706365ad1d39aadd5ee7ce1d9fa4f;p=ffmpeg diff --git a/libavcodec/vaapi_encode_vp8.c b/libavcodec/vaapi_encode_vp8.c index 166636cd842..7d4578f6747 100644 --- a/libavcodec/vaapi_encode_vp8.c +++ b/libavcodec/vaapi_encode_vp8.c @@ -161,17 +161,20 @@ static int vaapi_encode_vp8_write_quant_table(AVCodecContext *avctx, static av_cold int vaapi_encode_vp8_configure(AVCodecContext *avctx) { + VAAPIEncodeContext *ctx = avctx->priv_data; VAAPIEncodeVP8Context *priv = avctx->priv_data; - priv->q_index_p = av_clip(avctx->global_quality, 0, VP8_MAX_QUANT); + priv->q_index_p = av_clip(ctx->rc_quality, 0, VP8_MAX_QUANT); if (avctx->i_quant_factor > 0.0) - priv->q_index_i = av_clip((avctx->global_quality * - avctx->i_quant_factor + - avctx->i_quant_offset) + 0.5, - 0, VP8_MAX_QUANT); + priv->q_index_i = + av_clip((avctx->i_quant_factor * priv->q_index_p + + avctx->i_quant_offset) + 0.5, + 0, VP8_MAX_QUANT); else priv->q_index_i = priv->q_index_p; + ctx->roi_quant_range = VP8_MAX_QUANT; + return 0; } @@ -185,6 +188,8 @@ static const VAAPIEncodeType vaapi_encode_type_vp8 = { .configure = &vaapi_encode_vp8_configure, + .default_quality = 40, + .sequence_params_size = sizeof(VAEncSequenceParameterBufferVP8), .init_sequence_params = &vaapi_encode_vp8_init_sequence_params, @@ -215,6 +220,8 @@ static av_cold int vaapi_encode_vp8_init(AVCodecContext *avctx) #define FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM) static const AVOption vaapi_encode_vp8_options[] = { VAAPI_ENCODE_COMMON_OPTIONS, + VAAPI_ENCODE_RC_OPTIONS, + { "loop_filter_level", "Loop filter level", OFFSET(loop_filter_level), AV_OPT_TYPE_INT, { .i64 = 16 }, 0, 63, FLAGS }, { "loop_filter_sharpness", "Loop filter sharpness", @@ -226,7 +233,6 @@ static const AVCodecDefault vaapi_encode_vp8_defaults[] = { { "b", "0" }, { "bf", "0" }, { "g", "120" }, - { "global_quality", "40" }, { "qmin", "-1" }, { "qmax", "-1" }, { NULL }, @@ -239,22 +245,24 @@ static const AVClass vaapi_encode_vp8_class = { .version = LIBAVUTIL_VERSION_INT, }; -AVCodec ff_vp8_vaapi_encoder = { +const AVCodec ff_vp8_vaapi_encoder = { .name = "vp8_vaapi", .long_name = NULL_IF_CONFIG_SMALL("VP8 (VAAPI)"), .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_VP8, .priv_data_size = sizeof(VAAPIEncodeVP8Context), .init = &vaapi_encode_vp8_init, - .send_frame = &ff_vaapi_encode_send_frame, .receive_packet = &ff_vaapi_encode_receive_packet, .close = &ff_vaapi_encode_close, .priv_class = &vaapi_encode_vp8_class, - .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE | + AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .defaults = vaapi_encode_vp8_defaults, .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_VAAPI, AV_PIX_FMT_NONE, }, + .hw_configs = ff_vaapi_encode_hw_configs, .wrapper_name = "vaapi", };