Thanks for the comment, I will cleanup the code.
> On 12/04/2015 02:13 AM, Xiang, Haihao wrote: > > From: Peng Chen<[email protected]> > > > > Signed-off-by: Peng Chen<[email protected]> > > [Haihao: code cleanup] > > Signed-off-by: Xiang, Haihao<[email protected]> > > As a whole, this looks good to me. > > But it seems that it includes some unrelated code. The comment is > inlined. > > > --- > > src/gen9_mfd.c | 61 +++++++++++++++++++--- > > src/i965_decoder_utils.c | 21 +++++++- > > src/i965_defines.h | 2 + > > src/i965_device_info.c | 7 ++- > > src/i965_drv_video.c | 130 +++++++++++++++++++++++++++++++++- > > ------------- > > src/i965_drv_video.h | 3 ++ > > src/i965_encoder.c | 4 +- > > 7 files changed, 178 insertions(+), 50 deletions(-) > > > > diff --git a/src/gen9_mfd.c b/src/gen9_mfd.c > > index da76378..44b343f 100644 > > --- a/src/gen9_mfd.c > > +++ b/src/gen9_mfd.c > > @@ -109,6 +109,7 @@ gen9_hcpd_hevc_decode_init(VADriverContextP > > ctx, > > VAPictureParameterBufferHEVC *pic_param; > > struct object_surface *obj_surface; > > uint32_t size; > > + int hevc_10bit = 0; > > > > assert(decode_state->pic_param&& decode_state->pic_param- > > >buffer); > > pic_param = (VAPictureParameterBufferHEVC *)decode_state- > > >pic_param->buffer; > > @@ -134,12 +135,22 @@ gen9_hcpd_hevc_decode_init(VADriverContextP > > ctx, > > hevc_ensure_surface_bo(ctx, decode_state, obj_surface, > > pic_param); > > gen9_hcpd_init_hevc_surface(ctx, pic_param, obj_surface, > > gen9_hcpd_context); > > > > - size = ALIGN(gen9_hcpd_context->picture_width_in_pixels, > > 32)>> 3; > > + if((pic_param->bit_depth_luma_minus8> 0) > > + || (pic_param->bit_depth_chroma_minus8> 0)) > > + hevc_10bit = 1; > > + > > + if(hevc_10bit) > > + size = ALIGN(gen9_hcpd_context->picture_width_in_pixels, > > 32)>> 2; > > + else > > + size = ALIGN(gen9_hcpd_context->picture_width_in_pixels, > > 32)>> 3; > > size<<= 6; > > ALLOC_GEN_BUFFER((&gen9_hcpd_context- > > >deblocking_filter_line_buffer), "line buffer", size); > > ALLOC_GEN_BUFFER((&gen9_hcpd_context- > > >deblocking_filter_tile_line_buffer), "tile line buffer", size); > > > > - size = ALIGN(gen9_hcpd_context->picture_height_in_pixels + 6 * > > gen9_hcpd_context->picture_height_in_ctbs, 32)>> 3; > > + if(hevc_10bit) > > + size = ALIGN(gen9_hcpd_context->picture_height_in_pixels + > > 6 * gen9_hcpd_context->picture_height_in_ctbs, 32)>> 2; > > + else > > + size = ALIGN(gen9_hcpd_context->picture_height_in_pixels + > > 6 * gen9_hcpd_context->picture_height_in_ctbs, 32)>> 3; > > size<<= 6; > > ALLOC_GEN_BUFFER((&gen9_hcpd_context- > > >deblocking_filter_tile_column_buffer), "tile column buffer", > > size); > > > > @@ -158,15 +169,24 @@ gen9_hcpd_hevc_decode_init(VADriverContextP > > ctx, > > size<<= 6; > > ALLOC_GEN_BUFFER((&gen9_hcpd_context- > > >metadata_tile_column_buffer), "metadata tile column buffer", > > size); > > > > - size = ALIGN(((gen9_hcpd_context- > > >picture_width_in_pixels>> 1) + 3 * gen9_hcpd_context- > > >picture_width_in_ctbs), 16)>> 3; > > + if(hevc_10bit) > > + size = ALIGN(((gen9_hcpd_context- > > >picture_width_in_pixels>> 1) + 3 * gen9_hcpd_context- > > >picture_width_in_ctbs), 16)>> 2; > > + else > > + size = ALIGN(((gen9_hcpd_context- > > >picture_width_in_pixels>> 1) + 3 * gen9_hcpd_context- > > >picture_width_in_ctbs), 16)>> 3; > > size<<= 6; > > ALLOC_GEN_BUFFER((&gen9_hcpd_context->sao_line_buffer), "sao > > line buffer", size); > > > > - size = ALIGN(((gen9_hcpd_context- > > >picture_width_in_pixels>> 1) + 6 * gen9_hcpd_context- > > >picture_width_in_ctbs), 16)>> 3; > > + if(hevc_10bit) > > + size = ALIGN(((gen9_hcpd_context- > > >picture_width_in_pixels>> 1) + 6 * gen9_hcpd_context- > > >picture_width_in_ctbs), 16)>> 2; > > + else > > + size = ALIGN(((gen9_hcpd_context- > > >picture_width_in_pixels>> 1) + 6 * gen9_hcpd_context- > > >picture_width_in_ctbs), 16)>> 3; > > size<<= 6; > > ALLOC_GEN_BUFFER((&gen9_hcpd_context->sao_tile_line_buffer), > > "sao tile line buffer", size); > > > > - size = ALIGN(((gen9_hcpd_context- > > >picture_height_in_pixels>> 1) + 6 * gen9_hcpd_context- > > >picture_height_in_ctbs), 16)>> 3; > > + if(hevc_10bit) > > + size = ALIGN(((gen9_hcpd_context- > > >picture_height_in_pixels>> 1) + 6 * gen9_hcpd_context- > > >picture_height_in_ctbs), 16)>> 2; > > + else > > + size = ALIGN(((gen9_hcpd_context- > > >picture_height_in_pixels>> 1) + 6 * gen9_hcpd_context- > > >picture_height_in_ctbs), 16)>> 3; > > size<<= 6; > > ALLOC_GEN_BUFFER((&gen9_hcpd_context- > > >sao_tile_column_buffer), "sao tile column buffer", size); > > > > @@ -208,9 +228,11 @@ gen9_hcpd_surface_state(VADriverContextP ctx, > > struct intel_batchbuffer *batch = gen9_hcpd_context- > > >base.batch; > > struct object_surface *obj_surface = decode_state- > > >render_object; > > unsigned int y_cb_offset; > > + VAPictureParameterBufferHEVC *pic_param; > > > > assert(obj_surface); > > > > + pic_param = (VAPictureParameterBufferHEVC *)decode_state- > > >pic_param->buffer; > > y_cb_offset = obj_surface->y_cb_offset; > > > > BEGIN_BCS_BATCH(batch, 3); > > @@ -219,9 +241,19 @@ gen9_hcpd_surface_state(VADriverContextP ctx, > > OUT_BCS_BATCH(batch, > > (0<< 28) | /* surface id */ > > (obj_surface->width - 1)); /* pitch - 1 */ > > - OUT_BCS_BATCH(batch, > > + if((pic_param->bit_depth_luma_minus8> 0) > > + || (pic_param->bit_depth_chroma_minus8> 0)) > > + { > > + OUT_BCS_BATCH(batch, > > + (SURFACE_FORMAT_P010<< 28) | > > + y_cb_offset); > > + } > > + else > > + { > > + OUT_BCS_BATCH(batch, > > (SURFACE_FORMAT_PLANAR_420_8<< 28) | > > y_cb_offset); > > + } > > > > ADVANCE_BCS_BATCH(batch); > > } > > @@ -466,6 +498,8 @@ gen9_hcpd_pic_state(VADriverContextP ctx, > > pic_param- > > >slice_parsing_fields.bits.sample_adaptive_offset_enabled_flag<< 3 > > | > > 0); > > OUT_BCS_BATCH(batch, > > + pic_param->bit_depth_luma_minus8<< 27 | > > + pic_param->bit_depth_chroma_minus8<< 24 | > > pcm_sample_bit_depth_luma_minus1<< 20 | > > pcm_sample_bit_depth_chroma_minus1<< 16 | > > pic_param- > > >max_transform_hierarchy_depth_inter<< 13 | > > @@ -760,6 +794,7 @@ gen9_hcpd_slice_state(VADriverContextP ctx, > > struct intel_batchbuffer *batch = gen9_hcpd_context- > > >base.batch; > > int slice_hor_pos, slice_ver_pos, next_slice_hor_pos, > > next_slice_ver_pos; > > unsigned short collocated_ref_idx, collocated_from_l0_flag; > > + int sliceqp_sign_flag = 0, sliceqp = 0; > > > > slice_hor_pos = slice_param->slice_segment_address % > > gen9_hcpd_context->picture_width_in_ctbs; > > slice_ver_pos = slice_param->slice_segment_address / > > gen9_hcpd_context->picture_width_in_ctbs; > > @@ -791,6 +826,17 @@ gen9_hcpd_slice_state(VADriverContextP ctx, > > collocated_from_l0_flag = gen9_hcpd_context- > > >first_inter_slice_collocated_from_l0_flag; > > } > > > > + sliceqp = pic_param->init_qp_minus26 + 26 + slice_param- > > >slice_qp_delta; > > + if((pic_param->bit_depth_luma_minus8> 0) > > + || (pic_param->bit_depth_chroma_minus8> 0)) > > + { > > + if(sliceqp< 0) > > + { > > + sliceqp_sign_flag = 1; > > + sliceqp = -sliceqp; > > + } > > + } > > + > > BEGIN_BCS_BATCH(batch, 9); > > > > OUT_BCS_BATCH(batch, HCP_SLICE_STATE | (9 - 2)); > > @@ -804,9 +850,10 @@ gen9_hcpd_slice_state(VADriverContextP ctx, > > OUT_BCS_BATCH(batch, > > (slice_param->slice_cr_qp_offset& 0x1f)<< 17 > > | > > (slice_param->slice_cb_qp_offset& 0x1f)<< 12 > > | > > - (pic_param->init_qp_minus26 + 26 + slice_param- > > >slice_qp_delta)<< 6 | > > + sliceqp<< 6 | > > slice_param- > > >LongSliceFlags.fields.slice_temporal_mvp_enabled_flag<< 5 | > > slice_param- > > >LongSliceFlags.fields.dependent_slice_segment_flag<< 4 | > > + sliceqp_sign_flag<< 3 | > > !next_slice_param<< 2 | > > slice_param->LongSliceFlags.fields.slice_type); > > OUT_BCS_BATCH(batch, > > diff --git a/src/i965_decoder_utils.c b/src/i965_decoder_utils.c > > index 3085a56..53a5aa1 100644 > > --- a/src/i965_decoder_utils.c > > +++ b/src/i965_decoder_utils.c > > @@ -1121,9 +1121,26 @@ hevc_ensure_surface_bo( > > ) > > { > > VAStatus va_status = VA_STATUS_SUCCESS; > > + int update = 0; > > + unsigned int fourcc = VA_FOURCC_NV12; > > + > > + if((pic_param->bit_depth_luma_minus8> 0) > > + || (pic_param->bit_depth_chroma_minus8> 0)) > > + { > > + if(obj_surface->fourcc != VA_FOURCC_P010) > > + { > > + update = 1; > > + fourcc = VA_FOURCC_P010; > > + } > > + } > > + else if(obj_surface->fourcc != VA_FOURCC_NV12) > > + { > > + update = 1; > > + fourcc = VA_FOURCC_NV12; > > + } > > > > /* (Re-)allocate the underlying surface buffer store, if > > necessary */ > > - if (!obj_surface->bo || obj_surface->fourcc != VA_FOURCC_NV12) > > { > > + if (!obj_surface->bo || update) { > > struct i965_driver_data * const i965 = > > i965_driver_data(ctx); > > > > i965_destroy_surface_storage(obj_surface); > > @@ -1131,7 +1148,7 @@ hevc_ensure_surface_bo( > > va_status = i965_check_alloc_surface_bo(ctx, > > obj_surface, > > i965->codec_info- > > >has_tiled_surface, > > - VA_FOURCC_NV12, > > + fourcc, > > SUBSAMPLE_YUV420) > > ; > > } > > > > diff --git a/src/i965_defines.h b/src/i965_defines.h > > index 86a3725..65c0b11 100755 > > --- a/src/i965_defines.h > > +++ b/src/i965_defines.h > > @@ -797,6 +797,8 @@ > > #define SURFACE_FORMAT_R8B8_UNORM 10 > > #define SURFACE_FORMAT_R8_UNORM 11 > > #define SURFACE_FORMAT_Y8_UNORM 12 > > +#define SURFACE_FORMAT_P010 13 > > +#define SURFACE_FORMAT_P016 14 > > > > #define AVS_FILTER_ADAPTIVE_8_TAP 0 > > #define AVS_FILTER_NEAREST 1 > > diff --git a/src/i965_device_info.c b/src/i965_device_info.c > > index a844374..db904ae 100644 > > --- a/src/i965_device_info.c > > +++ b/src/i965_device_info.c > > @@ -44,7 +44,10 @@ > > /* Extra set of chroma formats supported for JPEG encoding > > (beyond YUV 4:2:0) */ > > #define EXTRA_JPEG_ENC_CHROMA_FORMATS \ > > (VA_RT_FORMAT_YUV400| VA_RT_FORMAT_YUV422 | > > VA_RT_FORMAT_YUV444 | VA_RT_FORMAT_RGB32) > > - > > + > > +#define EXTRA_HEVC_DEC_CHROMA_FORMATS \ > > + (VA_RT_FORMAT_YUV420_10BPP) > > + > > /* Defines VA profile as a 32-bit unsigned integer mask */ > > #define VA_PROFILE_MASK(PROFILE) \ > > (1U<< VAProfile##PROFILE) > > @@ -377,6 +380,7 @@ static struct hw_codec_info bxt_hw_codec_info = > > { > > .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS, > > .jpeg_dec_chroma_formats = EXTRA_JPEG_DEC_CHROMA_FORMATS, > > .jpeg_enc_chroma_formats = EXTRA_JPEG_ENC_CHROMA_FORMATS, > > + .hevc_dec_chroma_formats = EXTRA_HEVC_DEC_CHROMA_FORMATS, > > > > .has_mpeg2_decoding = 1, > > .has_h264_decoding = 1, > > @@ -395,6 +399,7 @@ static struct hw_codec_info bxt_hw_codec_info = > > { > > .has_h264_mvc_encoding = 1, > > .has_hevc_decoding = 1, > > .has_hevc_encoding = 1, > > + .has_hevc10_decoding = 1, > > > > .num_filters = 5, > > .filters = { > > diff --git a/src/i965_drv_video.c b/src/i965_drv_video.c > > index 54c7030..53829e1 100644 > > --- a/src/i965_drv_video.c > > +++ b/src/i965_drv_video.c > > @@ -106,6 +106,9 @@ > > #define HAS_HEVC_ENCODING(ctx) ((ctx)->codec_info- > > >has_hevc_encoding&& \ > > (ctx)->intel.has_bsd) > > > > +#define HAS_HEVC10_DECODING(ctx) ((ctx)->codec_info- > > >has_hevc10_decoding&& \ > > + (ctx)->intel.has_bsd) > > + > > static int get_sampling_from_fourcc(unsigned int fourcc); > > > > /* Check whether we are rendering to X11 (VA/X11 or VA/GLX API) > > */ > > @@ -141,6 +144,8 @@ static int get_sampling_from_fourcc(unsigned > > int fourcc); > > #define I_YV12 2, 2, 3, {I965_8BITS, I965_2BITS, I965_2BITS}, 3, > > { {PLANE_0, OFFSET_0}, {PLANE_2, OFFSET_0}, {PLANE_1, OFFSET_0} } > > #define I_IMC1 I_YV12 > > > > +#define I_P010 2, 2, 2, {I965_16BITS, I965_8BITS}, 3, { {PLANE_0, > > OFFSET_0}, {PLANE_1, OFFSET_0}, {PLANE_1, OFFSET_16} } > > + > > #define I_422H 2, 1, 3, {I965_8BITS, I965_4BITS, I965_4BITS}, 3, > > { {PLANE_0, OFFSET_0}, {PLANE_1, OFFSET_0}, {PLANE_2, OFFSET_0} } > > #define I_422V 1, 2, 3, {I965_8BITS, I965_4BITS, I965_4BITS}, 3, > > { {PLANE_0, OFFSET_0}, {PLANE_1, OFFSET_0}, {PLANE_2, OFFSET_0} } > > #define I_YV16 2, 1, 3, {I965_8BITS, I965_4BITS, I965_4BITS}, 3, > > { {PLANE_0, OFFSET_0}, {PLANE_2, OFFSET_0}, {PLANE_1, OFFSET_0} } > > @@ -185,6 +190,8 @@ static const i965_fourcc_info > > i965_fourcc_infos[] = { > > DEF_YUV(YV12, YUV420, I_SI), > > DEF_YUV(IMC1, YUV420, I_S), > > > > + DEF_YUV(P010, YUV420, I_SI), > > + > > DEF_YUV(422H, YUV422H, I_SI), > > DEF_YUV(422V, YUV422V, I_S), > > DEF_YUV(YV16, YUV422H, I_S), > > @@ -580,6 +587,10 @@ i965_QueryConfigProfiles(VADriverContextP ctx, > > profile_list[i++] = VAProfileHEVCMain; > > } > > > > + if (HAS_HEVC10_DECODING(i965)) { > > + profile_list[i++] = VAProfileHEVCMain10; > > + } > > + > > if (i965->wrapper_pdrvctx) { > > VAProfile wrapper_list[4]; > > int wrapper_num; > > @@ -683,6 +694,12 @@ i965_QueryConfigEntrypoints(VADriverContextP > > ctx, > > > > break; > > > > + case VAProfileHEVCMain10: > > + if (HAS_HEVC10_DECODING(i965)) > > + entrypoint_list[n++] = VAEntrypointVLD; > > + > > + break; > > + > > case VAProfileVP9Profile0: > > if (i965->wrapper_pdrvctx) { > > VAStatus va_status = VA_STATUS_SUCCESS; > > @@ -794,6 +811,14 @@ i965_validate_config(VADriverContextP ctx, > > VAProfile profile, > > > > break; > > > > + case VAProfileHEVCMain10: > > + if (HAS_HEVC10_DECODING(i965)&& (entrypoint == > > VAEntrypointVLD)) > > + va_status = VA_STATUS_SUCCESS; > > + else > > + va_status = VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT; > > + > > + break; > > + > > case VAProfileVP9Profile0: > > if (i965->wrapper_pdrvctx) > > va_status = VA_STATUS_SUCCESS; > > @@ -834,9 +859,13 @@ > > i965_get_default_chroma_formats(VADriverContextP ctx, VAProfile > > profile, > > chroma_formats |= i965->codec_info- > > >jpeg_dec_chroma_formats; > > if (HAS_JPEG_ENCODING(i965)&& entrypoint == > > VAEntrypointEncPicture) > > chroma_formats |= i965->codec_info- > > >jpeg_enc_chroma_formats; > > - > > break; > > > > + case VAProfileHEVCMain10: > > + chroma_formats = 0; // clear YUV420 8bits format support > > + if (HAS_HEVC10_DECODING(i965)&& entrypoint == > > VAEntrypointVLD) > > + chroma_formats |= i965->codec_info- > > >hevc_dec_chroma_formats; > > + break; > > default: > > break; > > } > > @@ -886,7 +915,8 @@ i965_GetConfigAttributes(VADriverContextP ctx, > > profile == VAProfileH264High || > > profile == VAProfileH264StereoHigh || > > profile == VAProfileH264MultiviewHigh || > > - profile == VAProfileHEVCMain) { > > + profile == VAProfileHEVCMain || > > + profile == VAProfileHEVCMain10) { > > [Yakui]: This is for the encoding and not used for 10-bit decoding. > > > attrib_list[i].value |= > > (VA_ENC_PACKED_HEADER_RAW_DATA | > > VA_ENC_PACKED_HEADER > > _SLICE); > > } > > @@ -1197,6 +1227,7 @@ i965_suface_external_memory(VADriverContextP > > ctx, > > > > switch (obj_surface->fourcc) { > > case VA_FOURCC_NV12: > > + case VA_FOURCC_P010: > > ASSERT_RET(memory_attibute->num_planes == 2, > > VA_STATUS_ERROR_INVALID_PARAMETER); > > ASSERT_RET(memory_attibute->pitches[0] == > > memory_attibute->pitches[1], VA_STATUS_ERROR_INVALID_PARAMETER); > > > > @@ -1424,6 +1455,7 @@ i965_CreateSurfaces2( > > /* support 420& 422& RGB32 format, 422 and RGB32 are only > > used > > * for post-processing (including color conversion) */ > > if (VA_RT_FORMAT_YUV420 != format&& > > + VA_RT_FORMAT_YUV420_10BPP != format&& > > VA_RT_FORMAT_YUV422 != format&& > > VA_RT_FORMAT_YUV444 != format&& > > VA_RT_FORMAT_YUV411 != format&& > > @@ -1488,10 +1520,10 @@ i965_CreateSurfaces2( > > if (memory_attibute->pitches[0]) { > > int bpp_1stplane = > > bpp_1stplane_by_fourcc(expected_fourcc); > > ASSERT_RET(bpp_1stplane, > > VA_STATUS_ERROR_INVALID_PARAMETER); > > - obj_surface->width = memory_attibute- > > >pitches[0]/bpp_1stplane; > > + obj_surface->width = memory_attibute- > > >pitches[0]; > > obj_surface->user_h_stride_set = true; > > ASSERT_RET(IS_ALIGNED(obj_surface->width, > > 16), VA_STATUS_ERROR_INVALID_PARAMETER); > > - ASSERT_RET(obj_surface->width>= width, > > VA_STATUS_ERROR_INVALID_PARAMETER); > > + ASSERT_RET(obj_surface->width>= width * > > bpp_1stplane, VA_STATUS_ERROR_INVALID_PARAMETER); > > > > if (memory_attibute->offsets[1]) { > > ASSERT_RET(!memory_attibute->offsets[0], > > VA_STATUS_ERROR_INVALID_PARAMETER); > > @@ -3086,7 +3118,7 @@ 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)&& > > [Yakui]: This is also not used for decoding. > > > (encode->last_packed_header_type == > > VAEncPackedHeaderSequence)) { > > vaStatus = > > i965_encoder_render_packed_header_parameter_buffer(ctx, > > > > obj_context, > > @@ -3180,7 +3212,7 @@ 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)) { > > > > [Yakui]: This is not used for decoding. > > > vaStatus = > > i965_encoder_render_packed_header_data_buffer(ctx, > > @@ -3774,25 +3806,29 @@ > > i965_check_alloc_surface_bo(VADriverContextP ctx, > > obj_surface->x_cb_offset = 0; /* X offset is always 0 */ > > obj_surface->x_cr_offset = 0; > > > > + int bpp_1stplane = bpp_1stplane_by_fourcc(fourcc); > > + > > + if (obj_surface->user_h_stride_set) { > > + ASSERT_RET(IS_ALIGNED(obj_surface->width, 128), > > VA_STATUS_ERROR_INVALID_PARAMETER); > > + } else > > + obj_surface->width = ALIGN(obj_surface->orig_width * > > bpp_1stplane, 128); > > + > > + if (obj_surface->user_v_stride_set) { > > + ASSERT_RET(IS_ALIGNED(obj_surface->height, 32), > > VA_STATUS_ERROR_INVALID_PARAMETER); > > + } else > > + obj_surface->height = ALIGN(obj_surface->orig_height, 32); > > + > > if ((tiled&& !obj_surface->user_disable_tiling)) { > > ASSERT_RET(fourcc != VA_FOURCC_I420&& > > fourcc != VA_FOURCC_IYUV&& > > fourcc != VA_FOURCC_YV12, > > VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT); > > - if (obj_surface->user_h_stride_set) { > > - ASSERT_RET(IS_ALIGNED(obj_surface->width, 128), > > VA_STATUS_ERROR_INVALID_PARAMETER); > > - } else > > - obj_surface->width = ALIGN(obj_surface->orig_width, > > 128); > > - > > - if (obj_surface->user_v_stride_set) { > > - ASSERT_RET(IS_ALIGNED(obj_surface->height, 32), > > VA_STATUS_ERROR_INVALID_PARAMETER); > > - } else > > - obj_surface->height = ALIGN(obj_surface->orig_height, > > 32); > > > > region_height = obj_surface->height; > > > > switch (fourcc) { > > case VA_FOURCC_NV12: > > + case VA_FOURCC_P010: > > assert(subsampling == SUBSAMPLE_YUV420); > > obj_surface->cb_cr_pitch = obj_surface->width; > > obj_surface->cb_cr_width = obj_surface->orig_width / > > 2; > > @@ -3929,6 +3965,7 @@ i965_check_alloc_surface_bo(VADriverContextP > > ctx, > > > > switch (fourcc) { > > case VA_FOURCC_NV12: > > + case VA_FOURCC_P010: > > obj_surface->y_cb_offset = obj_surface->height; > > obj_surface->y_cr_offset = obj_surface->height; > > obj_surface->cb_cr_width = obj_surface->orig_width / > > 2; > > @@ -4103,6 +4140,7 @@ VAStatus i965_DeriveImage(VADriverContextP > > ctx, > > break; > > > > case VA_FOURCC_NV12: > > + case VA_FOURCC_P010: > > image->num_planes = 2; > > image->pitches[0] = w_pitch; /* Y */ > > image->offsets[0] = 0; > > @@ -5439,7 +5477,13 @@ i965_QuerySurfaceAttributes(VADriverContextP > > ctx, > > attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | > > VA_SURFACE_ATTRIB_SETTABLE; > > attribs[i].value.value.i = VA_FOURCC_444P; > > i++; > > - } else { > > + } else if (obj_config->profile == VAProfileHEVCMain10) > > { > > + attribs[i].type = VASurfaceAttribPixelFormat; > > + attribs[i].value.type = VAGenericValueTypeInteger; > > + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | > > VA_SURFACE_ATTRIB_SETTABLE; > > + attribs[i].value.value.i = VA_FOURCC_P010; > > + i++; > > + } else { > > attribs[i].type = VASurfaceAttribPixelFormat; > > attribs[i].value.type = > > VAGenericValueTypeInteger; > > attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | > > VA_SURFACE_ATTRIB_SETTABLE; > > @@ -5565,29 +5609,37 @@ > > i965_QuerySurfaceAttributes(VADriverContextP ctx, > > } else if (obj_config->entrypoint == VAEntrypointEncSlice > > || /* encode */ > > obj_config->entrypoint == > > VAEntrypointVideoProc) { /* vpp */ > > > > - attribs[i].type = VASurfaceAttribPixelFormat; > > - attribs[i].value.type = VAGenericValueTypeInteger; > > - attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | > > VA_SURFACE_ATTRIB_SETTABLE; > > - attribs[i].value.value.i = VA_FOURCC_NV12; > > - i++; > > - > > - attribs[i].type = VASurfaceAttribPixelFormat; > > - attribs[i].value.type = VAGenericValueTypeInteger; > > - attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | > > VA_SURFACE_ATTRIB_SETTABLE; > > - attribs[i].value.value.i = VA_FOURCC_I420; > > - i++; > > - > > - attribs[i].type = VASurfaceAttribPixelFormat; > > - attribs[i].value.type = VAGenericValueTypeInteger; > > - attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | > > VA_SURFACE_ATTRIB_SETTABLE; > > - attribs[i].value.value.i = VA_FOURCC_YV12; > > - i++; > > - > > - attribs[i].type = VASurfaceAttribPixelFormat; > > - attribs[i].value.type = VAGenericValueTypeInteger; > > - attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | > > VA_SURFACE_ATTRIB_SETTABLE; > > - attribs[i].value.value.i = VA_FOURCC_IMC3; > > - i++; > > + if (obj_config->profile == VAProfileHEVCMain10) { > > + attribs[i].type = VASurfaceAttribPixelFormat; > > + attribs[i].value.type = VAGenericValueTypeInteger; > > + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | > > VA_SURFACE_ATTRIB_SETTABLE; > > + attribs[i].value.value.i = VA_FOURCC_P010; > > + i++; > > + } else { > > + attribs[i].type = VASurfaceAttribPixelFormat; > > + attribs[i].value.type = VAGenericValueTypeInteger; > > + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | > > VA_SURFACE_ATTRIB_SETTABLE; > > + attribs[i].value.value.i = VA_FOURCC_NV12; > > + i++; > > + > > + attribs[i].type = VASurfaceAttribPixelFormat; > > + attribs[i].value.type = VAGenericValueTypeInteger; > > + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | > > VA_SURFACE_ATTRIB_SETTABLE; > > + attribs[i].value.value.i = VA_FOURCC_I420; > > + i++; > > + > > + attribs[i].type = VASurfaceAttribPixelFormat; > > + attribs[i].value.type = VAGenericValueTypeInteger; > > + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | > > VA_SURFACE_ATTRIB_SETTABLE; > > + attribs[i].value.value.i = VA_FOURCC_YV12; > > + i++; > > + > > + attribs[i].type = VASurfaceAttribPixelFormat; > > + attribs[i].value.type = VAGenericValueTypeInteger; > > + attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | > > VA_SURFACE_ATTRIB_SETTABLE; > > + attribs[i].value.value.i = VA_FOURCC_IMC3; > > + i++; > > + } > > > > if (obj_config->entrypoint == VAEntrypointVideoProc) > > { > > attribs[i].type = VASurfaceAttribPixelFormat; > > diff --git a/src/i965_drv_video.h b/src/i965_drv_video.h > > index f688ec2..eb82983 100644 > > --- a/src/i965_drv_video.h > > +++ b/src/i965_drv_video.h > > @@ -365,6 +365,8 @@ struct hw_codec_info > > unsigned int h264_dec_chroma_formats; > > unsigned int jpeg_dec_chroma_formats; > > unsigned int jpeg_enc_chroma_formats; > > + unsigned int hevc_dec_chroma_formats; > > + unsigned int hevc_enc_chroma_formats; > > > > unsigned int has_mpeg2_decoding:1; > > unsigned int has_mpeg2_encoding:1; > > @@ -385,6 +387,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_decoding:1; > > > > unsigned int num_filters; > > struct i965_filter filters[VAProcFilterCount]; > > diff --git a/src/i965_encoder.c b/src/i965_encoder.c > > index 30f86d1..0d1febf 100644 > > --- a/src/i965_encoder.c > > +++ b/src/i965_encoder.c > > @@ -603,7 +603,8 @@ > > intel_encoder_sanity_check_input(VADriverContextP ctx, > > break; > > } > > > > - case VAProfileHEVCMain: { > > + case VAProfileHEVCMain: > > + case VAProfileHEVCMain10: { /* Use seperate source block if > > there are too many differences */ > > vaStatus = intel_encoder_check_hevc_parameter(ctx, > > encode_state, encoder_context); > > if (vaStatus != VA_STATUS_SUCCESS) > > goto out; > > @@ -711,6 +712,7 @@ intel_enc_hw_context_init(VADriverContextP ctx, > > break; > > > > case VAProfileHEVCMain: > > + case VAProfileHEVCMain10: /* Add CODEC_HEVC10 if there are too > > many differences */ > > encoder_context->codec = CODEC_HEVC; > > break; > > > _______________________________________________ Libva mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libva
