VAAPIEncodeVP9Context *priv = avctx->priv_data;
if (ctx->rc_mode->quality) {
- priv->q_idx_p = av_clip(ctx->rc_quality, 0, VP9_MAX_QUANT);
- if (avctx->i_quant_factor > 0.0)
- priv->q_idx_idr = av_clip((priv->q_idx_p *
- avctx->i_quant_factor +
- avctx->i_quant_offset) + 0.5,
- 0, VP9_MAX_QUANT);
- else
- priv->q_idx_idr = priv->q_idx_p;
- if (avctx->b_quant_factor > 0.0)
- priv->q_idx_b = av_clip((priv->q_idx_p *
- avctx->b_quant_factor +
- avctx->b_quant_offset) + 0.5,
- 0, VP9_MAX_QUANT);
- else
- priv->q_idx_b = priv->q_idx_p;
+ priv->q_idx_p = av_clip(ctx->rc_quality, 0, VP9_MAX_QUANT);
+ if (avctx->i_quant_factor > 0.0)
+ priv->q_idx_idr =
+ av_clip((avctx->i_quant_factor * priv->q_idx_p +
+ avctx->i_quant_offset) + 0.5,
+ 0, VP9_MAX_QUANT);
+ else
+ priv->q_idx_idr = priv->q_idx_p;
+ if (avctx->b_quant_factor > 0.0)
+ priv->q_idx_b =
+ av_clip((avctx->b_quant_factor * priv->q_idx_p +
+ avctx->b_quant_offset) + 0.5,
+ 0, VP9_MAX_QUANT);
+ else
+ priv->q_idx_b = priv->q_idx_p;
} else {
// Arbitrary value.
priv->q_idx_idr = priv->q_idx_p = priv->q_idx_b = 100;
}
+ ctx->roi_quant_range = VP9_MAX_QUANT;
+
return 0;
}
.version = LIBAVUTIL_VERSION_INT,
};
-AVCodec ff_vp9_vaapi_encoder = {
+const AVCodec ff_vp9_vaapi_encoder = {
.name = "vp9_vaapi",
.long_name = NULL_IF_CONFIG_SMALL("VP9 (VAAPI)"),
.type = AVMEDIA_TYPE_VIDEO,
.id = AV_CODEC_ID_VP9,
.priv_data_size = sizeof(VAAPIEncodeVP9Context),
.init = &vaapi_encode_vp9_init,
- .send_frame = &ff_vaapi_encode_send_frame,
.receive_packet = &ff_vaapi_encode_receive_packet,
.close = &ff_vaapi_encode_close,
.priv_class = &vaapi_encode_vp9_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_vp9_defaults,
.pix_fmts = (const enum AVPixelFormat[]) {
AV_PIX_FMT_VAAPI,
AV_PIX_FMT_NONE,
},
+ .hw_configs = ff_vaapi_encode_hw_configs,
.wrapper_name = "vaapi",
};