From c7acd6788e9fd404777cd06178ad6b3a99946c10 Mon Sep 17 00:00:00 2001 From: Sil Vilerino Date: Tue, 6 Sep 2022 10:31:51 -0400 Subject: [PATCH] frontends/va: Add HEVC decode args: IntraPicFlag, no_pic_reordering_flag, no_bipred_flag Reviewed-by: Ruijing Dong Part-of: --- src/gallium/frontends/va/picture_hevc.c | 5 +++++ src/gallium/include/pipe/p_video_state.h | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/gallium/frontends/va/picture_hevc.c b/src/gallium/frontends/va/picture_hevc.c index 2dd77878609..a51b083d384 100644 --- a/src/gallium/frontends/va/picture_hevc.c +++ b/src/gallium/frontends/va/picture_hevc.c @@ -37,6 +37,10 @@ void vlVaHandlePictureParameterBufferHEVC(vlVaDriver *drv, vlVaContext *context, context->desc.h265.pps->sps->chroma_format_idc = hevc->pic_fields.bits.chroma_format_idc; context->desc.h265.pps->sps->separate_colour_plane_flag = hevc->pic_fields.bits.separate_colour_plane_flag; + context->desc.h265.pps->sps->no_pic_reordering_flag = + hevc->pic_fields.bits.NoPicReorderingFlag; + context->desc.h265.pps->sps->no_bi_pred_flag = + hevc->pic_fields.bits.NoBiPredFlag; context->desc.h265.pps->sps->pic_width_in_luma_samples = hevc->pic_width_in_luma_samples; context->desc.h265.pps->sps->pic_height_in_luma_samples = hevc->pic_height_in_luma_samples; context->desc.h265.pps->sps->bit_depth_luma_minus8 = hevc->bit_depth_luma_minus8; @@ -143,6 +147,7 @@ void vlVaHandlePictureParameterBufferHEVC(vlVaDriver *drv, vlVaContext *context, context->desc.h265.IDRPicFlag = hevc->slice_parsing_fields.bits.IdrPicFlag; context->desc.h265.RAPPicFlag = hevc->slice_parsing_fields.bits.RapPicFlag; + context->desc.h265.IntraPicFlag = hevc->slice_parsing_fields.bits.IntraPicFlag; context->desc.h265.CurrPicOrderCntVal = hevc->CurrPic.pic_order_cnt; diff --git a/src/gallium/include/pipe/p_video_state.h b/src/gallium/include/pipe/p_video_state.h index 185b600fada..629bd0cfbc3 100644 --- a/src/gallium/include/pipe/p_video_state.h +++ b/src/gallium/include/pipe/p_video_state.h @@ -600,6 +600,8 @@ struct pipe_h265_sps uint8_t num_long_term_ref_pics_sps; uint8_t sps_temporal_mvp_enabled_flag; uint8_t strong_intra_smoothing_enabled_flag; + uint8_t no_pic_reordering_flag; + uint8_t no_bi_pred_flag; }; struct pipe_h265_pps @@ -652,6 +654,16 @@ struct pipe_h265_picture_desc uint8_t IDRPicFlag; uint8_t RAPPicFlag; + /* + When the current picture is an IRAP picture, IntraPicFlag shall be equal to 1. + When the current picture is not an IRAP picture, the host software decoder is + not required to determine whether all slices of the current picture are I slices + – i.e. it may simply set IntraPicFlag to 0 in this case.... + + Some frontends have IntraPicFlag defined (ie. VAPictureParameterBufferHEVC) + and some others like VDPAU/OMX can derive it from RAPPicFlag + */ + uint8_t IntraPicFlag; uint8_t CurrRpsIdx; uint32_t NumPocTotalCurr; uint32_t NumDeltaPocsOfRefRpsIdx;