[Libva] [PATCH V3: 3/4] HEVC10bit ENC:enable hevc 10bit encoding pipeline
Zhao Yakui
yakui.zhao at intel.com
Tue Sep 6 00:44:38 UTC 2016
On 09/06/2016 08:09 AM, Pengfei Qu wrote:
> Signed-off-by: Pengfei Qu<Pengfei.Qu at intel.com>
This looks good to me.
Add: Reviewed-by: Zhao Yakui <yakui.zhao at intel.com>
> ---
> src/i965_device_info.c | 1 +
> src/i965_drv_video.c | 20 +++++++++++++++-----
> src/i965_drv_video.h | 1 +
> src/i965_encoder.c | 18 +++++++++++++-----
> 4 files changed, 30 insertions(+), 10 deletions(-)
>
> diff --git a/src/i965_device_info.c b/src/i965_device_info.c
> index 47fd50a..1633924 100644
> --- a/src/i965_device_info.c
> +++ b/src/i965_device_info.c
> @@ -469,6 +469,7 @@ static struct hw_codec_info kbl_hw_codec_info = {
> .has_h264_mvc_encoding = 1,
> .has_hevc_decoding = 1,
> .has_hevc_encoding = 1,
> + .has_hevc10_encoding = 1,
> .has_hevc10_decoding = 1,
> .has_vp9_decoding = 1,
> .has_vpp_p010 = 1,
> diff --git a/src/i965_drv_video.c b/src/i965_drv_video.c
> index 77b9f37..9e9393e 100644
> --- a/src/i965_drv_video.c
> +++ b/src/i965_drv_video.c
> @@ -120,6 +120,8 @@
>
> #define HAS_HEVC10_DECODING(ctx) ((ctx)->codec_info->has_hevc10_decoding&& \
> (ctx)->intel.has_bsd)
> +#define HAS_HEVC10_ENCODING(ctx) ((ctx)->codec_info->has_hevc10_encoding&& \
> + (ctx)->intel.has_bsd)
>
> #define HAS_VPP_P010(ctx) ((ctx)->codec_info->has_vpp_p010&& \
> (ctx)->intel.has_bsd)
> @@ -605,7 +607,8 @@ i965_QueryConfigProfiles(VADriverContextP ctx,
> profile_list[i++] = VAProfileHEVCMain;
> }
>
> - if (HAS_HEVC10_DECODING(i965)) {
> + if (HAS_HEVC10_DECODING(i965)||
> + HAS_HEVC10_ENCODING(i965)) {
> profile_list[i++] = VAProfileHEVCMain10;
> }
>
> @@ -728,6 +731,9 @@ i965_QueryConfigEntrypoints(VADriverContextP ctx,
> if (HAS_HEVC10_DECODING(i965))
> entrypoint_list[n++] = VAEntrypointVLD;
>
> + if (HAS_HEVC10_ENCODING(i965))
> + entrypoint_list[n++] = VAEntrypointEncSlice;
> +
> break;
>
> case VAProfileVP9Profile0:
> @@ -852,7 +858,8 @@ i965_validate_config(VADriverContextP ctx, VAProfile profile,
> break;
>
> case VAProfileHEVCMain10:
> - if (HAS_HEVC10_DECODING(i965)&& (entrypoint == VAEntrypointVLD))
> + if ((HAS_HEVC10_DECODING(i965)&& (entrypoint == VAEntrypointVLD))||
> + (HAS_HEVC10_ENCODING(i965)&& (entrypoint == VAEntrypointEncSlice)))
> va_status = VA_STATUS_SUCCESS;
> else
> va_status = VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT;
> @@ -988,7 +995,8 @@ i965_GetConfigAttributes(VADriverContextP ctx,
> profile == VAProfileH264High ||
> profile == VAProfileH264StereoHigh ||
> profile == VAProfileH264MultiviewHigh ||
> - profile == VAProfileHEVCMain) {
> + profile == VAProfileHEVCMain ||
> + profile == VAProfileHEVCMain10) {
> attrib_list[i].value |= (VA_ENC_PACKED_HEADER_RAW_DATA |
> VA_ENC_PACKED_HEADER_SLICE);
> }
> @@ -3270,7 +3278,8 @@ i965_encoder_render_picture(VADriverContextP ctx,
> if ((param->type == VAEncPackedHeaderRawData) ||
> (param->type == VAEncPackedHeaderSlice)) {
> vaStatus = I965_RENDER_ENCODE_BUFFER(packed_header_params_ext);
> - } else if((obj_config->profile == VAProfileHEVCMain)&&
> + } else if((obj_config->profile == VAProfileHEVCMain ||
> + obj_config->profile == VAProfileHEVCMain10)&&
> (encode->last_packed_header_type == VAEncPackedHeaderSequence)) {
> vaStatus = i965_encoder_render_packed_header_parameter_buffer(ctx,
> obj_context,
> @@ -3368,7 +3377,8 @@ i965_encoder_render_picture(VADriverContextP ctx,
> ((encode->last_packed_header_type& (~VAEncPackedHeaderMiscMask)) != 0)),
> VA_STATUS_ERROR_ENCODING_ERROR);
>
> - if((obj_config->profile == VAProfileHEVCMain)&&
> + if((obj_config->profile == VAProfileHEVCMain ||
> + obj_config->profile == VAProfileHEVCMain10)&&
> (encode->last_packed_header_type == VAEncPackedHeaderSequence)) {
>
> vaStatus = i965_encoder_render_packed_header_data_buffer(ctx,
> diff --git a/src/i965_drv_video.h b/src/i965_drv_video.h
> index 9fe042f..d9644a7 100644
> --- a/src/i965_drv_video.h
> +++ b/src/i965_drv_video.h
> @@ -404,6 +404,7 @@ struct hw_codec_info
> unsigned int has_h264_mvc_encoding:1;
> unsigned int has_hevc_decoding:1;
> unsigned int has_hevc_encoding:1;
> + unsigned int has_hevc10_encoding:1;
> unsigned int has_hevc10_decoding:1;
> unsigned int has_vp9_decoding:1;
> unsigned int has_vpp_p010:1;
> diff --git a/src/i965_encoder.c b/src/i965_encoder.c
> index 47368fb..0304d4a 100644
> --- a/src/i965_encoder.c
> +++ b/src/i965_encoder.c
> @@ -126,9 +126,15 @@ intel_encoder_check_yuv_surface(VADriverContextP ctx,
> if (!obj_surface || !obj_surface->bo)
> return VA_STATUS_ERROR_INVALID_PARAMETER;
>
> - if (obj_surface->fourcc == VA_FOURCC_NV12) {
> - unsigned int tiling = 0, swizzle = 0;
> + if (VAProfileHEVCMain10 == profile&&
> + obj_surface->fourcc != VA_FOURCC_P010)
> + return VA_STATUS_ERROR_INVALID_PARAMETER;
> +
> + if (obj_surface->fourcc == VA_FOURCC_NV12 ||
> + (VAProfileHEVCMain10 == profile&&
> + obj_surface->fourcc == VA_FOURCC_P010)) {
>
> + unsigned int tiling = 0, swizzle = 0;
> dri_bo_get_tiling(obj_surface->bo,&tiling,&swizzle);
>
> if (tiling == I915_TILING_Y) {
> @@ -493,7 +499,7 @@ intel_encoder_check_vp8_parameter(VADriverContextP ctx,
> if (!obj_surface)
> goto error;
>
> - encode_state->reconstructed_object = obj_surface;
> + encode_state->reconstructed_object = obj_surface;
> obj_buffer = BUFFER(pic_param->coded_buf);
> assert(obj_buffer&& obj_buffer->buffer_store&& obj_buffer->buffer_store->bo);
>
> @@ -725,7 +731,8 @@ intel_encoder_sanity_check_input(VADriverContextP ctx,
> break;
> }
>
> - case VAProfileHEVCMain: {
> + case VAProfileHEVCMain:
> + case VAProfileHEVCMain10: {
> vaStatus = intel_encoder_check_hevc_parameter(ctx, encode_state, encoder_context);
> if (vaStatus != VA_STATUS_SUCCESS)
> goto out;
> @@ -867,6 +874,7 @@ intel_enc_hw_context_init(VADriverContextP ctx,
> break;
>
> case VAProfileHEVCMain:
> + case VAProfileHEVCMain10:
> encoder_context->codec = CODEC_HEVC;
> break;
>
> @@ -947,7 +955,7 @@ gen9_enc_hw_context_init(VADriverContextP ctx, struct object_config *obj_config)
> if (obj_config->entrypoint == VAEntrypointEncSliceLP) {
> return intel_enc_hw_context_init(ctx, obj_config, NULL, gen9_vdenc_context_init);
> } else {
> - if (obj_config->profile == VAProfileHEVCMain) {
> + if ((obj_config->profile == VAProfileHEVCMain) || (obj_config->profile == VAProfileHEVCMain10)) {
> return intel_enc_hw_context_init(ctx, obj_config, gen9_vme_context_init, gen9_hcpe_context_init);
> } else if (obj_config->profile == VAProfileJPEGBaseline)
> return intel_enc_hw_context_init(ctx, obj_config, gen8_vme_context_init, gen8_mfc_context_init);
More information about the Libva
mailing list