[Libva] [libva-intel-driver PATCH 02/10] support HEVC 10bits decoding
Emil Velikov
emil.l.velikov at gmail.com
Fri Dec 4 06:10:00 PST 2015
On 3 December 2015 at 18:13, Xiang, Haihao <haihao.xiang at intel.com> wrote:
> From: Peng Chen <peng.c.chen at intel.com>
>
> Signed-off-by: Peng Chen <peng.c.chen at intel.com>
> [Haihao: code cleanup]
> Signed-off-by: Xiang, Haihao <haihao.xiang at intel.com>
> ---
> 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;
You can simplify this whole lot (and make it more readable) if you
just store the shift in a const int at the top :-)
-Emil
More information about the Libva
mailing list