diff options
author | peng.chen <peng.c.chen@intel.com> | 2017-04-13 13:23:17 +0800 |
---|---|---|
committer | Xiang, Haihao <haihao.xiang@intel.com> | 2017-04-13 13:59:57 +0800 |
commit | bb253641eab36261add539967bedf8cbdb9dfacb (patch) | |
tree | 0eb2654352fcadfc27ef987d82833d79fb7585b9 /src/i965_encoder.c | |
parent | 294b90c063d5342d9cd9df53f598999ab6d3080e (diff) | |
download | libva-intel-driver-bb253641eab36261add539967bedf8cbdb9dfacb.tar.gz |
Set the quality range and default level for hevc encoder
Signed-off-by: peng.chen <peng.c.chen@intel.com>
Diffstat (limited to 'src/i965_encoder.c')
-rw-r--r-- | src/i965_encoder.c | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/src/i965_encoder.c b/src/i965_encoder.c index e6defcae..bd6cc8a4 100644 --- a/src/i965_encoder.c +++ b/src/i965_encoder.c @@ -813,9 +813,11 @@ intel_encoder_check_temporal_layer_structure(VADriverContextP ctx, static VAStatus intel_encoder_check_misc_parameter(VADriverContextP ctx, + VAProfile profile, struct encode_state *encode_state, struct intel_encoder_context *encoder_context) { + struct i965_driver_data *i965 = i965_driver_data(ctx); VAStatus ret = VA_STATUS_SUCCESS; if (encode_state->misc_param[VAEncMiscParameterTypeQualityLevel][0] && @@ -824,9 +826,28 @@ intel_encoder_check_misc_parameter(VADriverContextP ctx, VAEncMiscParameterBufferQualityLevel* param_quality_level = (VAEncMiscParameterBufferQualityLevel*)pMiscParam->data; encoder_context->quality_level = param_quality_level->quality_level; - if (encoder_context->quality_level == 0) - encoder_context->quality_level = ENCODER_DEFAULT_QUALITY; - else if (encoder_context->quality_level > encoder_context->quality_range) { + if (encoder_context->quality_level == 0) { + switch (profile) { + case VAProfileH264ConstrainedBaseline: + case VAProfileH264Main: + case VAProfileH264High: + case VAProfileH264MultiviewHigh: + case VAProfileH264StereoHigh: + if (IS_SKL(i965->intel.device_info) || + IS_BXT(i965->intel.device_info)) + encoder_context->quality_level = ENCODER_DEFAULT_QUALITY_AVC; + break; + + case VAProfileHEVCMain: + case VAProfileHEVCMain10: + encoder_context->quality_level = ENCODER_DEFAULT_QUALITY_HEVC; + break; + + default: + encoder_context->quality_level = ENCODER_DEFAULT_QUALITY; + break; + } + } else if (encoder_context->quality_level > encoder_context->quality_range) { ret = VA_STATUS_ERROR_INVALID_PARAMETER; goto out; } @@ -1311,7 +1332,7 @@ intel_encoder_sanity_check_input(VADriverContextP ctx, } if (vaStatus == VA_STATUS_SUCCESS) - vaStatus = intel_encoder_check_misc_parameter(ctx, encode_state, encoder_context); + vaStatus = intel_encoder_check_misc_parameter(ctx, profile, encode_state, encoder_context); out: return vaStatus; @@ -1456,6 +1477,9 @@ intel_enc_hw_context_init(VADriverContextP ctx, case VAProfileHEVCMain: case VAProfileHEVCMain10: encoder_context->codec = CODEC_HEVC; + + encoder_context->quality_level = ENCODER_DEFAULT_QUALITY_HEVC; + encoder_context->quality_range = ENCODER_QUALITY_RANGE_HEVC; break; case VAProfileVP9Profile0: |