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 | |
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>
-rw-r--r-- | src/i965_drv_video.c | 4 | ||||
-rw-r--r-- | src/i965_drv_video.h | 2 | ||||
-rw-r--r-- | src/i965_encoder.c | 32 |
3 files changed, 33 insertions, 5 deletions
diff --git a/src/i965_drv_video.c b/src/i965_drv_video.c index 1d24ec3a..2405c3bb 100644 --- a/src/i965_drv_video.c +++ b/src/i965_drv_video.c @@ -1045,7 +1045,9 @@ i965_GetConfigAttributes(VADriverContextP ctx, if (IS_GEN9(i965->intel.device_info)) attrib_list[i].value = ENCODER_QUALITY_RANGE_AVC; } - } + } else if (profile == VAProfileHEVCMain || + profile == VAProfileHEVCMain10) + attrib_list[i].value = ENCODER_QUALITY_RANGE_HEVC; break; } break; diff --git a/src/i965_drv_video.h b/src/i965_drv_video.h index 362b435a..b37d6847 100644 --- a/src/i965_drv_video.h +++ b/src/i965_drv_video.h @@ -70,8 +70,10 @@ #define ENCODER_QUALITY_RANGE 2 #define ENCODER_QUALITY_RANGE_AVC 8 +#define ENCODER_QUALITY_RANGE_HEVC 8 #define ENCODER_DEFAULT_QUALITY 1 #define ENCODER_DEFAULT_QUALITY_AVC 4 +#define ENCODER_DEFAULT_QUALITY_HEVC 4 #define ENCODER_HIGH_QUALITY ENCODER_DEFAULT_QUALITY #define ENCODER_LOW_QUALITY 2 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: |