diff options
author | Mark Thompson <sw@jkqxz.net> | 2016-04-12 23:13:31 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2016-04-15 10:07:04 +0200 |
commit | f6b85523692b0e7d4c4efb8449fa201d313424fe (patch) | |
tree | ee84ef7e68d38e4dd1db1c3cff9f1e13d4b64b22 /libavcodec/vaapi_encode_h264.c | |
parent | 18019f8cb9663dd1032c65aa453eaec18d641905 (diff) | |
download | ffmpeg-streaming-f6b85523692b0e7d4c4efb8449fa201d313424fe.zip ffmpeg-streaming-f6b85523692b0e7d4c4efb8449fa201d313424fe.tar.gz |
vaapi_encode: Refactor slightly to allow easier setting of global options
Signed-off-by: Anton Khirnov <anton@khirnov.net>
Diffstat (limited to 'libavcodec/vaapi_encode_h264.c')
-rw-r--r-- | libavcodec/vaapi_encode_h264.c | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/libavcodec/vaapi_encode_h264.c b/libavcodec/vaapi_encode_h264.c index 12a0ec2..6a77ab1 100644 --- a/libavcodec/vaapi_encode_h264.c +++ b/libavcodec/vaapi_encode_h264.c @@ -690,20 +690,21 @@ static int vaapi_encode_h264_init_slice_params(AVCodecContext *avctx, return 0; } -static VAConfigAttrib vaapi_encode_h264_config_attributes[] = { - { .type = VAConfigAttribRTFormat, - .value = VA_RT_FORMAT_YUV420 }, - { .type = VAConfigAttribRateControl, - .value = VA_RC_CQP }, - { .type = VAConfigAttribEncPackedHeaders, - .value = (VA_ENC_PACKED_HEADER_SEQUENCE | - VA_ENC_PACKED_HEADER_SLICE) }, -}; - static av_cold int vaapi_encode_h264_init_internal(AVCodecContext *avctx) { + static const VAConfigAttrib default_config_attributes[] = { + { .type = VAConfigAttribRTFormat, + .value = VA_RT_FORMAT_YUV420 }, + { .type = VAConfigAttribRateControl, + .value = VA_RC_CQP }, + { .type = VAConfigAttribEncPackedHeaders, + .value = (VA_ENC_PACKED_HEADER_SEQUENCE | + VA_ENC_PACKED_HEADER_SLICE) }, + }; + VAAPIEncodeContext *ctx = avctx->priv_data; VAAPIEncodeH264Context *priv = ctx->priv_data; + int i; switch (avctx->profile) { case FF_PROFILE_H264_CONSTRAINED_BASELINE: @@ -759,6 +760,11 @@ static av_cold int vaapi_encode_h264_init_internal(AVCodecContext *avctx) return AVERROR_PATCHWELCOME; } + for (i = 0; i < FF_ARRAY_ELEMS(default_config_attributes); i++) { + ctx->config_attributes[ctx->nb_config_attributes++] = + default_config_attributes[i]; + } + priv->fixed_qp_p = avctx->global_quality; if (avctx->i_quant_factor > 0.0) priv->fixed_qp_idr = (int)((priv->fixed_qp_p * avctx->i_quant_factor + @@ -773,10 +779,6 @@ static av_cold int vaapi_encode_h264_init_internal(AVCodecContext *avctx) av_log(avctx, AV_LOG_DEBUG, "QP = %d / %d / %d for IDR / P / B frames.\n", priv->fixed_qp_idr, priv->fixed_qp_p, priv->fixed_qp_b); - ctx->config_attributes = vaapi_encode_h264_config_attributes; - ctx->nb_config_attributes = - FF_ARRAY_ELEMS(vaapi_encode_h264_config_attributes); - ctx->nb_recon_frames = 20; return 0; |