1*54e60f84SAndroid Build Coastguard Worker /* 2*54e60f84SAndroid Build Coastguard Worker * Copyright (c) 2014 Intel Corporation. All Rights Reserved. 3*54e60f84SAndroid Build Coastguard Worker * 4*54e60f84SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a 5*54e60f84SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the 6*54e60f84SAndroid Build Coastguard Worker * "Software"), to deal in the Software without restriction, including 7*54e60f84SAndroid Build Coastguard Worker * without limitation the rights to use, copy, modify, merge, publish, 8*54e60f84SAndroid Build Coastguard Worker * distribute, sub license, and/or sell copies of the Software, and to 9*54e60f84SAndroid Build Coastguard Worker * permit persons to whom the Software is furnished to do so, subject to 10*54e60f84SAndroid Build Coastguard Worker * the following conditions: 11*54e60f84SAndroid Build Coastguard Worker * 12*54e60f84SAndroid Build Coastguard Worker * The above copyright notice and this permission notice (including the 13*54e60f84SAndroid Build Coastguard Worker * next paragraph) shall be included in all copies or substantial portions 14*54e60f84SAndroid Build Coastguard Worker * of the Software. 15*54e60f84SAndroid Build Coastguard Worker * 16*54e60f84SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 17*54e60f84SAndroid Build Coastguard Worker * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18*54e60f84SAndroid Build Coastguard Worker * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 19*54e60f84SAndroid Build Coastguard Worker * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR 20*54e60f84SAndroid Build Coastguard Worker * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21*54e60f84SAndroid Build Coastguard Worker * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22*54e60f84SAndroid Build Coastguard Worker * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23*54e60f84SAndroid Build Coastguard Worker */ 24*54e60f84SAndroid Build Coastguard Worker 25*54e60f84SAndroid Build Coastguard Worker /** 26*54e60f84SAndroid Build Coastguard Worker * \file va_dec_hevc.h 27*54e60f84SAndroid Build Coastguard Worker * \brief The HEVC decoding API 28*54e60f84SAndroid Build Coastguard Worker * 29*54e60f84SAndroid Build Coastguard Worker * This file contains the \ref api_dec_hevc "HEVC decoding API". 30*54e60f84SAndroid Build Coastguard Worker */ 31*54e60f84SAndroid Build Coastguard Worker 32*54e60f84SAndroid Build Coastguard Worker #ifndef VA_DEC_HEVC_H 33*54e60f84SAndroid Build Coastguard Worker #define VA_DEC_HEVC_H 34*54e60f84SAndroid Build Coastguard Worker 35*54e60f84SAndroid Build Coastguard Worker #include <stdint.h> 36*54e60f84SAndroid Build Coastguard Worker 37*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus 38*54e60f84SAndroid Build Coastguard Worker extern "C" { 39*54e60f84SAndroid Build Coastguard Worker #endif 40*54e60f84SAndroid Build Coastguard Worker 41*54e60f84SAndroid Build Coastguard Worker /** 42*54e60f84SAndroid Build Coastguard Worker * \defgroup api_dec_hevc HEVC decoding API 43*54e60f84SAndroid Build Coastguard Worker * 44*54e60f84SAndroid Build Coastguard Worker * This HEVC decoding API supports Main and Main Still Picture profiles. 45*54e60f84SAndroid Build Coastguard Worker * And it supports both short slice format and long slice format. 46*54e60f84SAndroid Build Coastguard Worker * 47*54e60f84SAndroid Build Coastguard Worker * @{ 48*54e60f84SAndroid Build Coastguard Worker */ 49*54e60f84SAndroid Build Coastguard Worker 50*54e60f84SAndroid Build Coastguard Worker /** 51*54e60f84SAndroid Build Coastguard Worker * \brief HEVC Decoding Picture Parameter Buffer Structure 52*54e60f84SAndroid Build Coastguard Worker * 53*54e60f84SAndroid Build Coastguard Worker * This structure conveys picture level parameters and should be sent once 54*54e60f84SAndroid Build Coastguard Worker * per frame. 55*54e60f84SAndroid Build Coastguard Worker * 56*54e60f84SAndroid Build Coastguard Worker */ 57*54e60f84SAndroid Build Coastguard Worker typedef struct _VAPictureParameterBufferHEVC { 58*54e60f84SAndroid Build Coastguard Worker /** \brief buffer description of decoded current picture 59*54e60f84SAndroid Build Coastguard Worker * only VA_PICTURE_HEVC_FIELD_PIC and VA_PICTURE_HEVC_BOTTOM_FIELD 60*54e60f84SAndroid Build Coastguard Worker * of "flags" fields are meaningful. 61*54e60f84SAndroid Build Coastguard Worker */ 62*54e60f84SAndroid Build Coastguard Worker VAPictureHEVC CurrPic; 63*54e60f84SAndroid Build Coastguard Worker /** \brief buffer description of reference frames in DPB */ 64*54e60f84SAndroid Build Coastguard Worker VAPictureHEVC ReferenceFrames[15]; 65*54e60f84SAndroid Build Coastguard Worker /** \brief picture width, shall be integer multiple of minimum CB size. */ 66*54e60f84SAndroid Build Coastguard Worker uint16_t pic_width_in_luma_samples; 67*54e60f84SAndroid Build Coastguard Worker /** \brief picture height, shall be integer multiple of minimum CB size. */ 68*54e60f84SAndroid Build Coastguard Worker uint16_t pic_height_in_luma_samples; 69*54e60f84SAndroid Build Coastguard Worker 70*54e60f84SAndroid Build Coastguard Worker 71*54e60f84SAndroid Build Coastguard Worker union { 72*54e60f84SAndroid Build Coastguard Worker struct { 73*54e60f84SAndroid Build Coastguard Worker /** following flags have same syntax and semantic as those in HEVC spec */ 74*54e60f84SAndroid Build Coastguard Worker uint32_t chroma_format_idc : 2; 75*54e60f84SAndroid Build Coastguard Worker uint32_t separate_colour_plane_flag : 1; 76*54e60f84SAndroid Build Coastguard Worker uint32_t pcm_enabled_flag : 1; 77*54e60f84SAndroid Build Coastguard Worker uint32_t scaling_list_enabled_flag : 1; 78*54e60f84SAndroid Build Coastguard Worker uint32_t transform_skip_enabled_flag : 1; 79*54e60f84SAndroid Build Coastguard Worker uint32_t amp_enabled_flag : 1; 80*54e60f84SAndroid Build Coastguard Worker uint32_t strong_intra_smoothing_enabled_flag : 1; 81*54e60f84SAndroid Build Coastguard Worker uint32_t sign_data_hiding_enabled_flag : 1; 82*54e60f84SAndroid Build Coastguard Worker uint32_t constrained_intra_pred_flag : 1; 83*54e60f84SAndroid Build Coastguard Worker uint32_t cu_qp_delta_enabled_flag : 1; 84*54e60f84SAndroid Build Coastguard Worker uint32_t weighted_pred_flag : 1; 85*54e60f84SAndroid Build Coastguard Worker uint32_t weighted_bipred_flag : 1; 86*54e60f84SAndroid Build Coastguard Worker uint32_t transquant_bypass_enabled_flag : 1; 87*54e60f84SAndroid Build Coastguard Worker uint32_t tiles_enabled_flag : 1; 88*54e60f84SAndroid Build Coastguard Worker uint32_t entropy_coding_sync_enabled_flag : 1; 89*54e60f84SAndroid Build Coastguard Worker uint32_t pps_loop_filter_across_slices_enabled_flag : 1; 90*54e60f84SAndroid Build Coastguard Worker uint32_t loop_filter_across_tiles_enabled_flag : 1; 91*54e60f84SAndroid Build Coastguard Worker uint32_t pcm_loop_filter_disabled_flag : 1; 92*54e60f84SAndroid Build Coastguard Worker /** set based on sps_max_num_reorder_pics of current temporal layer. */ 93*54e60f84SAndroid Build Coastguard Worker uint32_t NoPicReorderingFlag : 1; 94*54e60f84SAndroid Build Coastguard Worker /** picture has no B slices */ 95*54e60f84SAndroid Build Coastguard Worker uint32_t NoBiPredFlag : 1; 96*54e60f84SAndroid Build Coastguard Worker 97*54e60f84SAndroid Build Coastguard Worker uint32_t ReservedBits : 11; 98*54e60f84SAndroid Build Coastguard Worker } bits; 99*54e60f84SAndroid Build Coastguard Worker uint32_t value; 100*54e60f84SAndroid Build Coastguard Worker } pic_fields; 101*54e60f84SAndroid Build Coastguard Worker 102*54e60f84SAndroid Build Coastguard Worker /** following parameters have same syntax with those in HEVC spec */ 103*54e60f84SAndroid Build Coastguard Worker /** \brief DPB size for current temporal layer */ 104*54e60f84SAndroid Build Coastguard Worker uint8_t sps_max_dec_pic_buffering_minus1; 105*54e60f84SAndroid Build Coastguard Worker uint8_t bit_depth_luma_minus8; 106*54e60f84SAndroid Build Coastguard Worker uint8_t bit_depth_chroma_minus8; 107*54e60f84SAndroid Build Coastguard Worker uint8_t pcm_sample_bit_depth_luma_minus1; 108*54e60f84SAndroid Build Coastguard Worker uint8_t pcm_sample_bit_depth_chroma_minus1; 109*54e60f84SAndroid Build Coastguard Worker uint8_t log2_min_luma_coding_block_size_minus3; 110*54e60f84SAndroid Build Coastguard Worker uint8_t log2_diff_max_min_luma_coding_block_size; 111*54e60f84SAndroid Build Coastguard Worker uint8_t log2_min_transform_block_size_minus2; 112*54e60f84SAndroid Build Coastguard Worker uint8_t log2_diff_max_min_transform_block_size; 113*54e60f84SAndroid Build Coastguard Worker uint8_t log2_min_pcm_luma_coding_block_size_minus3; 114*54e60f84SAndroid Build Coastguard Worker uint8_t log2_diff_max_min_pcm_luma_coding_block_size; 115*54e60f84SAndroid Build Coastguard Worker uint8_t max_transform_hierarchy_depth_intra; 116*54e60f84SAndroid Build Coastguard Worker uint8_t max_transform_hierarchy_depth_inter; 117*54e60f84SAndroid Build Coastguard Worker int8_t init_qp_minus26; 118*54e60f84SAndroid Build Coastguard Worker uint8_t diff_cu_qp_delta_depth; 119*54e60f84SAndroid Build Coastguard Worker int8_t pps_cb_qp_offset; 120*54e60f84SAndroid Build Coastguard Worker int8_t pps_cr_qp_offset; 121*54e60f84SAndroid Build Coastguard Worker uint8_t log2_parallel_merge_level_minus2; 122*54e60f84SAndroid Build Coastguard Worker uint8_t num_tile_columns_minus1; 123*54e60f84SAndroid Build Coastguard Worker uint8_t num_tile_rows_minus1; 124*54e60f84SAndroid Build Coastguard Worker /** 125*54e60f84SAndroid Build Coastguard Worker * when uniform_spacing_flag equals 1, application should populate 126*54e60f84SAndroid Build Coastguard Worker * column_width_minus[], and row_height_minus1[] with approperiate values. 127*54e60f84SAndroid Build Coastguard Worker */ 128*54e60f84SAndroid Build Coastguard Worker uint16_t column_width_minus1[19]; 129*54e60f84SAndroid Build Coastguard Worker uint16_t row_height_minus1[21]; 130*54e60f84SAndroid Build Coastguard Worker 131*54e60f84SAndroid Build Coastguard Worker /** 132*54e60f84SAndroid Build Coastguard Worker * The Following Parameters are needed for Short Slice Format Only. 133*54e60f84SAndroid Build Coastguard Worker * Only format decoding can ignore them. 134*54e60f84SAndroid Build Coastguard Worker */ 135*54e60f84SAndroid Build Coastguard Worker 136*54e60f84SAndroid Build Coastguard Worker /** 137*54e60f84SAndroid Build Coastguard Worker * \brief Parameters needed for parsing slice segment headers 138*54e60f84SAndroid Build Coastguard Worker */ 139*54e60f84SAndroid Build Coastguard Worker union { 140*54e60f84SAndroid Build Coastguard Worker struct { 141*54e60f84SAndroid Build Coastguard Worker /** following parameters have same syntax with those in HEVC spec */ 142*54e60f84SAndroid Build Coastguard Worker uint32_t lists_modification_present_flag : 1; 143*54e60f84SAndroid Build Coastguard Worker uint32_t long_term_ref_pics_present_flag : 1; 144*54e60f84SAndroid Build Coastguard Worker uint32_t sps_temporal_mvp_enabled_flag : 1; 145*54e60f84SAndroid Build Coastguard Worker uint32_t cabac_init_present_flag : 1; 146*54e60f84SAndroid Build Coastguard Worker uint32_t output_flag_present_flag : 1; 147*54e60f84SAndroid Build Coastguard Worker uint32_t dependent_slice_segments_enabled_flag : 1; 148*54e60f84SAndroid Build Coastguard Worker uint32_t pps_slice_chroma_qp_offsets_present_flag : 1; 149*54e60f84SAndroid Build Coastguard Worker uint32_t sample_adaptive_offset_enabled_flag : 1; 150*54e60f84SAndroid Build Coastguard Worker uint32_t deblocking_filter_override_enabled_flag : 1; 151*54e60f84SAndroid Build Coastguard Worker uint32_t pps_disable_deblocking_filter_flag : 1; 152*54e60f84SAndroid Build Coastguard Worker uint32_t slice_segment_header_extension_present_flag : 1; 153*54e60f84SAndroid Build Coastguard Worker 154*54e60f84SAndroid Build Coastguard Worker /** current picture with NUT between 16 and 21 inclusive */ 155*54e60f84SAndroid Build Coastguard Worker uint32_t RapPicFlag : 1; 156*54e60f84SAndroid Build Coastguard Worker /** current picture with NUT between 19 and 20 inclusive */ 157*54e60f84SAndroid Build Coastguard Worker uint32_t IdrPicFlag : 1; 158*54e60f84SAndroid Build Coastguard Worker /** current picture has only intra slices */ 159*54e60f84SAndroid Build Coastguard Worker uint32_t IntraPicFlag : 1; 160*54e60f84SAndroid Build Coastguard Worker 161*54e60f84SAndroid Build Coastguard Worker uint32_t ReservedBits : 18; 162*54e60f84SAndroid Build Coastguard Worker } bits; 163*54e60f84SAndroid Build Coastguard Worker uint32_t value; 164*54e60f84SAndroid Build Coastguard Worker } slice_parsing_fields; 165*54e60f84SAndroid Build Coastguard Worker 166*54e60f84SAndroid Build Coastguard Worker /** following parameters have same syntax with those in HEVC spec */ 167*54e60f84SAndroid Build Coastguard Worker uint8_t log2_max_pic_order_cnt_lsb_minus4; 168*54e60f84SAndroid Build Coastguard Worker uint8_t num_short_term_ref_pic_sets; 169*54e60f84SAndroid Build Coastguard Worker uint8_t num_long_term_ref_pic_sps; 170*54e60f84SAndroid Build Coastguard Worker uint8_t num_ref_idx_l0_default_active_minus1; 171*54e60f84SAndroid Build Coastguard Worker uint8_t num_ref_idx_l1_default_active_minus1; 172*54e60f84SAndroid Build Coastguard Worker int8_t pps_beta_offset_div2; 173*54e60f84SAndroid Build Coastguard Worker int8_t pps_tc_offset_div2; 174*54e60f84SAndroid Build Coastguard Worker uint8_t num_extra_slice_header_bits; 175*54e60f84SAndroid Build Coastguard Worker 176*54e60f84SAndroid Build Coastguard Worker /** 177*54e60f84SAndroid Build Coastguard Worker * \brief number of bits that structure 178*54e60f84SAndroid Build Coastguard Worker * short_term_ref_pic_set( num_short_term_ref_pic_sets ) takes in slice 179*54e60f84SAndroid Build Coastguard Worker * segment header when short_term_ref_pic_set_sps_flag equals 0. 180*54e60f84SAndroid Build Coastguard Worker * if short_term_ref_pic_set_sps_flag equals 1, the value should be 0. 181*54e60f84SAndroid Build Coastguard Worker * the bit count is calculated after emulation prevention bytes are removed 182*54e60f84SAndroid Build Coastguard Worker * from bit streams. 183*54e60f84SAndroid Build Coastguard Worker * This variable is used for accelorater to skip parsing the 184*54e60f84SAndroid Build Coastguard Worker * short_term_ref_pic_set( num_short_term_ref_pic_sets ) structure. 185*54e60f84SAndroid Build Coastguard Worker */ 186*54e60f84SAndroid Build Coastguard Worker uint32_t st_rps_bits; 187*54e60f84SAndroid Build Coastguard Worker 188*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 189*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_MEDIUM]; 190*54e60f84SAndroid Build Coastguard Worker } VAPictureParameterBufferHEVC; 191*54e60f84SAndroid Build Coastguard Worker 192*54e60f84SAndroid Build Coastguard Worker /** 193*54e60f84SAndroid Build Coastguard Worker * \brief HEVC Decoding Picture Parameter Buffer Structure for Range Extension 194*54e60f84SAndroid Build Coastguard Worker * 195*54e60f84SAndroid Build Coastguard Worker * This structure conveys picture level HEVC Range Extension parameters 196*54e60f84SAndroid Build Coastguard Worker * and should be sent once per frame. This data structure should be sent 197*54e60f84SAndroid Build Coastguard Worker * together with VAPictureParameterBufferHEVC in a single buffer of 198*54e60f84SAndroid Build Coastguard Worker * \ref VAPictureParameterBufferHEVCExtension since each frame 199*54e60f84SAndroid Build Coastguard Worker * of HEVC range extension contains both picture level parameters and picture 200*54e60f84SAndroid Build Coastguard Worker * level range extension parameters. They should be parsed together. The buffer 201*54e60f84SAndroid Build Coastguard Worker * type is same as \ref VAPictureParameterBufferHEVC. 202*54e60f84SAndroid Build Coastguard Worker * 203*54e60f84SAndroid Build Coastguard Worker */ 204*54e60f84SAndroid Build Coastguard Worker typedef struct _VAPictureParameterBufferHEVCRext { 205*54e60f84SAndroid Build Coastguard Worker union { 206*54e60f84SAndroid Build Coastguard Worker struct { 207*54e60f84SAndroid Build Coastguard Worker /** \brief HEVC range extension flags 208*54e60f84SAndroid Build Coastguard Worker * The following flags bears the same syntax and semantics as 209*54e60f84SAndroid Build Coastguard Worker * those defined in HEVC bit stream spec. 210*54e60f84SAndroid Build Coastguard Worker */ 211*54e60f84SAndroid Build Coastguard Worker uint32_t transform_skip_rotation_enabled_flag : 1; 212*54e60f84SAndroid Build Coastguard Worker uint32_t transform_skip_context_enabled_flag : 1; 213*54e60f84SAndroid Build Coastguard Worker uint32_t implicit_rdpcm_enabled_flag : 1; 214*54e60f84SAndroid Build Coastguard Worker uint32_t explicit_rdpcm_enabled_flag : 1; 215*54e60f84SAndroid Build Coastguard Worker uint32_t extended_precision_processing_flag : 1; 216*54e60f84SAndroid Build Coastguard Worker uint32_t intra_smoothing_disabled_flag : 1; 217*54e60f84SAndroid Build Coastguard Worker uint32_t high_precision_offsets_enabled_flag : 1; 218*54e60f84SAndroid Build Coastguard Worker uint32_t persistent_rice_adaptation_enabled_flag : 1; 219*54e60f84SAndroid Build Coastguard Worker uint32_t cabac_bypass_alignment_enabled_flag : 1; 220*54e60f84SAndroid Build Coastguard Worker uint32_t cross_component_prediction_enabled_flag : 1; 221*54e60f84SAndroid Build Coastguard Worker uint32_t chroma_qp_offset_list_enabled_flag : 1; 222*54e60f84SAndroid Build Coastguard Worker 223*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 224*54e60f84SAndroid Build Coastguard Worker uint32_t reserved : 21; 225*54e60f84SAndroid Build Coastguard Worker } bits; 226*54e60f84SAndroid Build Coastguard Worker uint32_t value; 227*54e60f84SAndroid Build Coastguard Worker } range_extension_pic_fields; 228*54e60f84SAndroid Build Coastguard Worker 229*54e60f84SAndroid Build Coastguard Worker /** \brief HEVC range extension flags 230*54e60f84SAndroid Build Coastguard Worker * The following flags bears the same syntax and semantics as 231*54e60f84SAndroid Build Coastguard Worker * those defined in HEVC bit stream spec. 232*54e60f84SAndroid Build Coastguard Worker */ 233*54e60f84SAndroid Build Coastguard Worker uint8_t diff_cu_chroma_qp_offset_depth; 234*54e60f84SAndroid Build Coastguard Worker uint8_t chroma_qp_offset_list_len_minus1; 235*54e60f84SAndroid Build Coastguard Worker uint8_t log2_sao_offset_scale_luma; 236*54e60f84SAndroid Build Coastguard Worker uint8_t log2_sao_offset_scale_chroma; 237*54e60f84SAndroid Build Coastguard Worker uint8_t log2_max_transform_skip_block_size_minus2; 238*54e60f84SAndroid Build Coastguard Worker int8_t cb_qp_offset_list[6]; 239*54e60f84SAndroid Build Coastguard Worker int8_t cr_qp_offset_list[6]; 240*54e60f84SAndroid Build Coastguard Worker } VAPictureParameterBufferHEVCRext; 241*54e60f84SAndroid Build Coastguard Worker 242*54e60f84SAndroid Build Coastguard Worker /** 243*54e60f84SAndroid Build Coastguard Worker *\brief HEVC Decoding Picture Parameter Buffer Structure for 244*54e60f84SAndroid Build Coastguard Worker *Screen Content extension 245*54e60f84SAndroid Build Coastguard Worker * 246*54e60f84SAndroid Build Coastguard Worker *This structure conveys picture level HEVC Scc parameters 247*54e60f84SAndroid Build Coastguard Worker *and should be sent once per frame. This data structure should be sent 248*54e60f84SAndroid Build Coastguard Worker *together with VAPictureParameterBufferHEVC and VAPictureParameterBufferHEVCRext 249*54e60f84SAndroid Build Coastguard Worker *in a single buffer of \ref VAPictureParameterBufferHEVCExtension since each 250*54e60f84SAndroid Build Coastguard Worker *frame of HEVC SCC contains picture level parameters, picture level range 251*54e60f84SAndroid Build Coastguard Worker *extension parameters and picture level Scc parameters. They should be parsed 252*54e60f84SAndroid Build Coastguard Worker *together and the buffer type is same as \ref VAPictureParameterBufferHEVC. 253*54e60f84SAndroid Build Coastguard Worker * 254*54e60f84SAndroid Build Coastguard Worker */ 255*54e60f84SAndroid Build Coastguard Worker typedef struct _VAPictureParameterBufferHEVCScc { 256*54e60f84SAndroid Build Coastguard Worker union { 257*54e60f84SAndroid Build Coastguard Worker struct { 258*54e60f84SAndroid Build Coastguard Worker /** \brief HEVC Scc extension flags 259*54e60f84SAndroid Build Coastguard Worker * The following flags bears the same syntax and semantics as 260*54e60f84SAndroid Build Coastguard Worker * those defined in HEVC bit stream spec. 261*54e60f84SAndroid Build Coastguard Worker */ 262*54e60f84SAndroid Build Coastguard Worker /* indicates if intra block copy (IBC) is enabled or not. */ 263*54e60f84SAndroid Build Coastguard Worker uint32_t pps_curr_pic_ref_enabled_flag : 1; 264*54e60f84SAndroid Build Coastguard Worker /* indicates if Palette Mode is enabled or not. */ 265*54e60f84SAndroid Build Coastguard Worker uint32_t palette_mode_enabled_flag : 1; 266*54e60f84SAndroid Build Coastguard Worker /* controls the presence and inference of the use_integer_mv_flag syntax 267*54e60f84SAndroid Build Coastguard Worker * in slice segment header that specifies the resolution of motion 268*54e60f84SAndroid Build Coastguard Worker * vectors for inter prediction. 269*54e60f84SAndroid Build Coastguard Worker */ 270*54e60f84SAndroid Build Coastguard Worker uint32_t motion_vector_resolution_control_idc : 2; 271*54e60f84SAndroid Build Coastguard Worker /* specifies that the intra boundary filtering process is 272*54e60f84SAndroid Build Coastguard Worker * disabled or not for intra prediction. 273*54e60f84SAndroid Build Coastguard Worker */ 274*54e60f84SAndroid Build Coastguard Worker uint32_t intra_boundary_filtering_disabled_flag : 1; 275*54e60f84SAndroid Build Coastguard Worker /* specifies that an adaptive colour transform may be applied 276*54e60f84SAndroid Build Coastguard Worker * to the residual in the decoding process. 277*54e60f84SAndroid Build Coastguard Worker */ 278*54e60f84SAndroid Build Coastguard Worker uint32_t residual_adaptive_colour_transform_enabled_flag : 1; 279*54e60f84SAndroid Build Coastguard Worker 280*54e60f84SAndroid Build Coastguard Worker /* specifies that slice_act_y_qp_offset, slice_act_cb_qp_offset, 281*54e60f84SAndroid Build Coastguard Worker * slice_act_cr_qp_offset are present in the slice header 282*54e60f84SAndroid Build Coastguard Worker */ 283*54e60f84SAndroid Build Coastguard Worker uint32_t pps_slice_act_qp_offsets_present_flag : 1; 284*54e60f84SAndroid Build Coastguard Worker 285*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 286*54e60f84SAndroid Build Coastguard Worker uint32_t reserved : 25; 287*54e60f84SAndroid Build Coastguard Worker } bits; 288*54e60f84SAndroid Build Coastguard Worker uint32_t value; 289*54e60f84SAndroid Build Coastguard Worker } screen_content_pic_fields; 290*54e60f84SAndroid Build Coastguard Worker 291*54e60f84SAndroid Build Coastguard Worker /* specifies the maximum allowed palette size. */ 292*54e60f84SAndroid Build Coastguard Worker uint8_t palette_max_size; 293*54e60f84SAndroid Build Coastguard Worker /* Correspond to HEVC syntax elements of the same names. 294*54e60f84SAndroid Build Coastguard Worker * It specifies the difference between the maximum allowed palette 295*54e60f84SAndroid Build Coastguard Worker * predictor size and the maximum allowed palette size. 296*54e60f84SAndroid Build Coastguard Worker * App needs to enforce that the variable PaletteMaxPredictorSize, 297*54e60f84SAndroid Build Coastguard Worker * which is derived as follows: 298*54e60f84SAndroid Build Coastguard Worker * PaletteMaxPredictorSize = palette_max_size + delta_palette_max_predictor_size 299*54e60f84SAndroid Build Coastguard Worker * should have a value range of [0..128]. 300*54e60f84SAndroid Build Coastguard Worker */ 301*54e60f84SAndroid Build Coastguard Worker uint8_t delta_palette_max_predictor_size; 302*54e60f84SAndroid Build Coastguard Worker /** \brief Size of initial palette predictor. 303*54e60f84SAndroid Build Coastguard Worker * It is derived from pps_num_palette_predictor_initializer or 304*54e60f84SAndroid Build Coastguard Worker * sps_num_palette_predictor_initializer_minus1. 305*54e60f84SAndroid Build Coastguard Worker * Details in HEVC SCC spec section 9.3.2.3. 306*54e60f84SAndroid Build Coastguard Worker */ 307*54e60f84SAndroid Build Coastguard Worker uint8_t predictor_palette_size; 308*54e60f84SAndroid Build Coastguard Worker /** \brief Palette predictor initializer. 309*54e60f84SAndroid Build Coastguard Worker * It is derived from pps_palette_predictor_initializers[][] 310*54e60f84SAndroid Build Coastguard Worker * or sps_palette_predictor_initializers[][]. 311*54e60f84SAndroid Build Coastguard Worker * Details in HEVC SCC spec section 9.3.2.3. 312*54e60f84SAndroid Build Coastguard Worker */ 313*54e60f84SAndroid Build Coastguard Worker uint16_t predictor_palette_entries[3][128]; 314*54e60f84SAndroid Build Coastguard Worker /* are used to determine the offsets that are applied to the 315*54e60f84SAndroid Build Coastguard Worker * quantization parameter values for the luma, Cb and Cr 316*54e60f84SAndroid Build Coastguard Worker * components, respectively. 317*54e60f84SAndroid Build Coastguard Worker */ 318*54e60f84SAndroid Build Coastguard Worker int8_t pps_act_y_qp_offset_plus5; 319*54e60f84SAndroid Build Coastguard Worker int8_t pps_act_cb_qp_offset_plus5; 320*54e60f84SAndroid Build Coastguard Worker int8_t pps_act_cr_qp_offset_plus3; 321*54e60f84SAndroid Build Coastguard Worker } VAPictureParameterBufferHEVCScc; 322*54e60f84SAndroid Build Coastguard Worker 323*54e60f84SAndroid Build Coastguard Worker /** 324*54e60f84SAndroid Build Coastguard Worker * \brief HEVC Decoding Picture Parameter Buffer Structure including Extensions 325*54e60f84SAndroid Build Coastguard Worker * 326*54e60f84SAndroid Build Coastguard Worker * This structure conveys picture level HEVC parameters including basic version 1 327*54e60f84SAndroid Build Coastguard Worker * and range extension and screen content extension. 328*54e60f84SAndroid Build Coastguard Worker * The data buffer should be sent once per frame. 329*54e60f84SAndroid Build Coastguard Worker * 330*54e60f84SAndroid Build Coastguard Worker */ 331*54e60f84SAndroid Build Coastguard Worker typedef struct _VAPictureParameterBufferHEVCExtension { 332*54e60f84SAndroid Build Coastguard Worker /** \brief basic HEVC picture parameters data structure 333*54e60f84SAndroid Build Coastguard Worker */ 334*54e60f84SAndroid Build Coastguard Worker VAPictureParameterBufferHEVC base; 335*54e60f84SAndroid Build Coastguard Worker 336*54e60f84SAndroid Build Coastguard Worker /** \brief HEVC range extension picture parameters data structure 337*54e60f84SAndroid Build Coastguard Worker */ 338*54e60f84SAndroid Build Coastguard Worker VAPictureParameterBufferHEVCRext rext; 339*54e60f84SAndroid Build Coastguard Worker 340*54e60f84SAndroid Build Coastguard Worker /** \brief HEVC screen content picture parameters data structure 341*54e60f84SAndroid Build Coastguard Worker */ 342*54e60f84SAndroid Build Coastguard Worker VAPictureParameterBufferHEVCScc scc; 343*54e60f84SAndroid Build Coastguard Worker } VAPictureParameterBufferHEVCExtension; 344*54e60f84SAndroid Build Coastguard Worker 345*54e60f84SAndroid Build Coastguard Worker /** 346*54e60f84SAndroid Build Coastguard Worker * \brief HEVC Slice Parameter Buffer Structure For Long Format 347*54e60f84SAndroid Build Coastguard Worker * 348*54e60f84SAndroid Build Coastguard Worker * VASliceParameterBufferHEVC structure should be accompanied by a 349*54e60f84SAndroid Build Coastguard Worker * slice data buffer, which holds the whole raw slice NAL unit bit streams 350*54e60f84SAndroid Build Coastguard Worker * including start code prefix and emulation prevention bytes not removed. 351*54e60f84SAndroid Build Coastguard Worker * 352*54e60f84SAndroid Build Coastguard Worker * This structure conveys parameters related to slice segment header and should 353*54e60f84SAndroid Build Coastguard Worker * be sent once per slice. 354*54e60f84SAndroid Build Coastguard Worker * 355*54e60f84SAndroid Build Coastguard Worker * For short format, this data structure is not sent by application. 356*54e60f84SAndroid Build Coastguard Worker * 357*54e60f84SAndroid Build Coastguard Worker */ 358*54e60f84SAndroid Build Coastguard Worker typedef struct _VASliceParameterBufferHEVC { 359*54e60f84SAndroid Build Coastguard Worker /** @name Codec-independent Slice Parameter Buffer base. */ 360*54e60f84SAndroid Build Coastguard Worker 361*54e60f84SAndroid Build Coastguard Worker /**@{*/ 362*54e60f84SAndroid Build Coastguard Worker 363*54e60f84SAndroid Build Coastguard Worker /** \brief Number of bytes in the slice data buffer for this slice 364*54e60f84SAndroid Build Coastguard Worker * counting from and including NAL unit header. 365*54e60f84SAndroid Build Coastguard Worker */ 366*54e60f84SAndroid Build Coastguard Worker uint32_t slice_data_size; 367*54e60f84SAndroid Build Coastguard Worker /** \brief The offset to the NAL unit header for this slice */ 368*54e60f84SAndroid Build Coastguard Worker uint32_t slice_data_offset; 369*54e60f84SAndroid Build Coastguard Worker /** \brief Slice data buffer flags. See \c VA_SLICE_DATA_FLAG_XXX. */ 370*54e60f84SAndroid Build Coastguard Worker uint32_t slice_data_flag; 371*54e60f84SAndroid Build Coastguard Worker /** 372*54e60f84SAndroid Build Coastguard Worker * \brief Byte offset from NAL unit header to the begining of slice_data(). 373*54e60f84SAndroid Build Coastguard Worker * 374*54e60f84SAndroid Build Coastguard Worker * This byte offset is relative to and includes the NAL unit header 375*54e60f84SAndroid Build Coastguard Worker * and represents the number of bytes parsed in the slice_header() 376*54e60f84SAndroid Build Coastguard Worker * after the removal of any emulation prevention bytes in 377*54e60f84SAndroid Build Coastguard Worker * there. However, the slice data buffer passed to the hardware is 378*54e60f84SAndroid Build Coastguard Worker * the original bitstream, thus including any emulation prevention 379*54e60f84SAndroid Build Coastguard Worker * bytes. 380*54e60f84SAndroid Build Coastguard Worker */ 381*54e60f84SAndroid Build Coastguard Worker uint32_t slice_data_byte_offset; 382*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 383*54e60f84SAndroid Build Coastguard Worker uint32_t slice_segment_address; 384*54e60f84SAndroid Build Coastguard Worker /** \brief index into ReferenceFrames[] 385*54e60f84SAndroid Build Coastguard Worker * RefPicList[0][] corresponds to RefPicList0[] of HEVC variable. 386*54e60f84SAndroid Build Coastguard Worker * RefPicList[1][] corresponds to RefPicList1[] of HEVC variable. 387*54e60f84SAndroid Build Coastguard Worker * value range [0..14, 0xFF], where 0xFF indicates invalid entry. 388*54e60f84SAndroid Build Coastguard Worker */ 389*54e60f84SAndroid Build Coastguard Worker uint8_t RefPicList[2][15]; 390*54e60f84SAndroid Build Coastguard Worker union { 391*54e60f84SAndroid Build Coastguard Worker uint32_t value; 392*54e60f84SAndroid Build Coastguard Worker struct { 393*54e60f84SAndroid Build Coastguard Worker /** current slice is last slice of picture. */ 394*54e60f84SAndroid Build Coastguard Worker uint32_t LastSliceOfPic : 1; 395*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 396*54e60f84SAndroid Build Coastguard Worker uint32_t dependent_slice_segment_flag : 1; 397*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 398*54e60f84SAndroid Build Coastguard Worker uint32_t slice_type : 2; 399*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 400*54e60f84SAndroid Build Coastguard Worker uint32_t color_plane_id : 2; 401*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 402*54e60f84SAndroid Build Coastguard Worker uint32_t slice_sao_luma_flag : 1; 403*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 404*54e60f84SAndroid Build Coastguard Worker uint32_t slice_sao_chroma_flag : 1; 405*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 406*54e60f84SAndroid Build Coastguard Worker uint32_t mvd_l1_zero_flag : 1; 407*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 408*54e60f84SAndroid Build Coastguard Worker uint32_t cabac_init_flag : 1; 409*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 410*54e60f84SAndroid Build Coastguard Worker uint32_t slice_temporal_mvp_enabled_flag : 1; 411*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 412*54e60f84SAndroid Build Coastguard Worker uint32_t slice_deblocking_filter_disabled_flag : 1; 413*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 414*54e60f84SAndroid Build Coastguard Worker uint32_t collocated_from_l0_flag : 1; 415*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 416*54e60f84SAndroid Build Coastguard Worker uint32_t slice_loop_filter_across_slices_enabled_flag : 1; 417*54e60f84SAndroid Build Coastguard Worker uint32_t reserved : 18; 418*54e60f84SAndroid Build Coastguard Worker } fields; 419*54e60f84SAndroid Build Coastguard Worker } LongSliceFlags; 420*54e60f84SAndroid Build Coastguard Worker 421*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. Collocated Reference Picture Index. 422*54e60f84SAndroid Build Coastguard Worker * index to RefPicList[0][] or RefPicList[1][]. 423*54e60f84SAndroid Build Coastguard Worker * when slice_temporal_mvp_enabled_flag equals 0, it should take value 0xFF. 424*54e60f84SAndroid Build Coastguard Worker * value range [0..14, 0xFF]. 425*54e60f84SAndroid Build Coastguard Worker */ 426*54e60f84SAndroid Build Coastguard Worker uint8_t collocated_ref_idx; 427*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. 428*54e60f84SAndroid Build Coastguard Worker * if num_ref_idx_active_override_flag equals 0, host decoder should 429*54e60f84SAndroid Build Coastguard Worker * set its value to num_ref_idx_l0_default_active_minus1. 430*54e60f84SAndroid Build Coastguard Worker */ 431*54e60f84SAndroid Build Coastguard Worker uint8_t num_ref_idx_l0_active_minus1; 432*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. 433*54e60f84SAndroid Build Coastguard Worker * if num_ref_idx_active_override_flag equals 0, host decoder should 434*54e60f84SAndroid Build Coastguard Worker * set its value to num_ref_idx_l1_default_active_minus1. 435*54e60f84SAndroid Build Coastguard Worker */ 436*54e60f84SAndroid Build Coastguard Worker uint8_t num_ref_idx_l1_active_minus1; 437*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 438*54e60f84SAndroid Build Coastguard Worker int8_t slice_qp_delta; 439*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 440*54e60f84SAndroid Build Coastguard Worker int8_t slice_cb_qp_offset; 441*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 442*54e60f84SAndroid Build Coastguard Worker int8_t slice_cr_qp_offset; 443*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 444*54e60f84SAndroid Build Coastguard Worker int8_t slice_beta_offset_div2; 445*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 446*54e60f84SAndroid Build Coastguard Worker int8_t slice_tc_offset_div2; 447*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 448*54e60f84SAndroid Build Coastguard Worker uint8_t luma_log2_weight_denom; 449*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 450*54e60f84SAndroid Build Coastguard Worker int8_t delta_chroma_log2_weight_denom; 451*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 452*54e60f84SAndroid Build Coastguard Worker int8_t delta_luma_weight_l0[15]; 453*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 454*54e60f84SAndroid Build Coastguard Worker int8_t luma_offset_l0[15]; 455*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 456*54e60f84SAndroid Build Coastguard Worker int8_t delta_chroma_weight_l0[15][2]; 457*54e60f84SAndroid Build Coastguard Worker /** corresponds to HEVC spec variable of the same name. */ 458*54e60f84SAndroid Build Coastguard Worker int8_t ChromaOffsetL0[15][2]; 459*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 460*54e60f84SAndroid Build Coastguard Worker int8_t delta_luma_weight_l1[15]; 461*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 462*54e60f84SAndroid Build Coastguard Worker int8_t luma_offset_l1[15]; 463*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 464*54e60f84SAndroid Build Coastguard Worker int8_t delta_chroma_weight_l1[15][2]; 465*54e60f84SAndroid Build Coastguard Worker /** corresponds to HEVC spec variable of the same name. */ 466*54e60f84SAndroid Build Coastguard Worker int8_t ChromaOffsetL1[15][2]; 467*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 468*54e60f84SAndroid Build Coastguard Worker uint8_t five_minus_max_num_merge_cand; 469*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 470*54e60f84SAndroid Build Coastguard Worker uint16_t num_entry_point_offsets; 471*54e60f84SAndroid Build Coastguard Worker /** HEVC syntax element. */ 472*54e60f84SAndroid Build Coastguard Worker uint16_t entry_offset_to_subset_array; 473*54e60f84SAndroid Build Coastguard Worker /** \brief Number of emulation prevention bytes in slice header. */ 474*54e60f84SAndroid Build Coastguard Worker uint16_t slice_data_num_emu_prevn_bytes; 475*54e60f84SAndroid Build Coastguard Worker /**@}*/ 476*54e60f84SAndroid Build Coastguard Worker 477*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 478*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_LOW - 2]; 479*54e60f84SAndroid Build Coastguard Worker } VASliceParameterBufferHEVC; 480*54e60f84SAndroid Build Coastguard Worker 481*54e60f84SAndroid Build Coastguard Worker /** 482*54e60f84SAndroid Build Coastguard Worker * \brief HEVC Extented Slice Parameter Buffer Structure For Long Format 483*54e60f84SAndroid Build Coastguard Worker * 484*54e60f84SAndroid Build Coastguard Worker * This data structure contains extension profiles (range extension and screen content). 485*54e60f84SAndroid Build Coastguard Worker * 486*54e60f84SAndroid Build Coastguard Worker * VASliceParameterBufferHEVCRext structure should be accompanied by a 487*54e60f84SAndroid Build Coastguard Worker * slice data buffer, which holds the whole raw slice NAL unit bit streams 488*54e60f84SAndroid Build Coastguard Worker * including start code prefix and emulation prevention bytes not removed. 489*54e60f84SAndroid Build Coastguard Worker * 490*54e60f84SAndroid Build Coastguard Worker * This structure conveys parameters related to slice segment header and should 491*54e60f84SAndroid Build Coastguard Worker * be sent once per slice with VASliceParameterBufferHEVC in a single buffer of 492*54e60f84SAndroid Build Coastguard Worker * \ref VASliceParameterBufferHEVCExtension and the buffer type is same as \ref 493*54e60f84SAndroid Build Coastguard Worker * VASliceParameterBufferHEVC. 494*54e60f84SAndroid Build Coastguard Worker * 495*54e60f84SAndroid Build Coastguard Worker * For short format, this data structure is not sent by application. 496*54e60f84SAndroid Build Coastguard Worker * 497*54e60f84SAndroid Build Coastguard Worker */ 498*54e60f84SAndroid Build Coastguard Worker typedef struct _VASliceParameterBufferHEVCRext { 499*54e60f84SAndroid Build Coastguard Worker /* below four parameters are used to replace data types of the 500*54e60f84SAndroid Build Coastguard Worker * corresponding parameters of those in \# VASliceParameterBufferHEVC. 501*54e60f84SAndroid Build Coastguard Worker */ 502*54e60f84SAndroid Build Coastguard Worker int16_t luma_offset_l0[15]; 503*54e60f84SAndroid Build Coastguard Worker int16_t ChromaOffsetL0[15][2]; 504*54e60f84SAndroid Build Coastguard Worker int16_t luma_offset_l1[15]; 505*54e60f84SAndroid Build Coastguard Worker int16_t ChromaOffsetL1[15][2]; 506*54e60f84SAndroid Build Coastguard Worker 507*54e60f84SAndroid Build Coastguard Worker union { 508*54e60f84SAndroid Build Coastguard Worker struct { 509*54e60f84SAndroid Build Coastguard Worker uint32_t cu_chroma_qp_offset_enabled_flag : 1; 510*54e60f84SAndroid Build Coastguard Worker uint32_t use_integer_mv_flag : 1; 511*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 512*54e60f84SAndroid Build Coastguard Worker uint32_t reserved : 30; 513*54e60f84SAndroid Build Coastguard Worker } bits; 514*54e60f84SAndroid Build Coastguard Worker uint32_t value; 515*54e60f84SAndroid Build Coastguard Worker } slice_ext_flags; 516*54e60f84SAndroid Build Coastguard Worker 517*54e60f84SAndroid Build Coastguard Worker /** \brief Screen Content Extension parameters. 518*54e60f84SAndroid Build Coastguard Worker * data range [-12..12] 519*54e60f84SAndroid Build Coastguard Worker */ 520*54e60f84SAndroid Build Coastguard Worker int8_t slice_act_y_qp_offset; 521*54e60f84SAndroid Build Coastguard Worker int8_t slice_act_cb_qp_offset; 522*54e60f84SAndroid Build Coastguard Worker int8_t slice_act_cr_qp_offset; 523*54e60f84SAndroid Build Coastguard Worker } VASliceParameterBufferHEVCRext; 524*54e60f84SAndroid Build Coastguard Worker 525*54e60f84SAndroid Build Coastguard Worker /** 526*54e60f84SAndroid Build Coastguard Worker * \brief HEVC Decoding Slice Parameter Buffer Structure For Long Format including Extensions 527*54e60f84SAndroid Build Coastguard Worker * 528*54e60f84SAndroid Build Coastguard Worker * This data structure contains both baseline HEVC profiles (main, main10) 529*54e60f84SAndroid Build Coastguard Worker * and extension profiles (range extension and screen content). 530*54e60f84SAndroid Build Coastguard Worker * 531*54e60f84SAndroid Build Coastguard Worker * VASliceParameterBufferHEVCExtension structure should be accompanied by a 532*54e60f84SAndroid Build Coastguard Worker * slice data buffer, which holds the whole raw slice NAL unit bit streams 533*54e60f84SAndroid Build Coastguard Worker * including start code prefix and emulation prevention bytes not removed. 534*54e60f84SAndroid Build Coastguard Worker * 535*54e60f84SAndroid Build Coastguard Worker * This structure conveys parameters related to slice segment header and should 536*54e60f84SAndroid Build Coastguard Worker * be sent once per slice. For HEVC range extension and HEVC Scc decoding, 537*54e60f84SAndroid Build Coastguard Worker * application should parse both basic slice parameters and extented slice 538*54e60f84SAndroid Build Coastguard Worker * parameters into this buffer structure and sent it. 539*54e60f84SAndroid Build Coastguard Worker * 540*54e60f84SAndroid Build Coastguard Worker * For short format, this data structure is not sent by application. 541*54e60f84SAndroid Build Coastguard Worker * 542*54e60f84SAndroid Build Coastguard Worker */ 543*54e60f84SAndroid Build Coastguard Worker typedef struct _VASliceParameterBufferHEVCExtension { 544*54e60f84SAndroid Build Coastguard Worker /** \brief baseline HEVC slice parameters data structure */ 545*54e60f84SAndroid Build Coastguard Worker VASliceParameterBufferHEVC base; 546*54e60f84SAndroid Build Coastguard Worker 547*54e60f84SAndroid Build Coastguard Worker /** \brief extented HEVC slice parameters data structure */ 548*54e60f84SAndroid Build Coastguard Worker VASliceParameterBufferHEVCRext rext; 549*54e60f84SAndroid Build Coastguard Worker } VASliceParameterBufferHEVCExtension; 550*54e60f84SAndroid Build Coastguard Worker 551*54e60f84SAndroid Build Coastguard Worker /** 552*54e60f84SAndroid Build Coastguard Worker * \brief HEVC Inverse Quantization Matrix Buffer Structure 553*54e60f84SAndroid Build Coastguard Worker * 554*54e60f84SAndroid Build Coastguard Worker * This structure is sent once per frame, 555*54e60f84SAndroid Build Coastguard Worker * and only when scaling_list_enabled_flag = 1. 556*54e60f84SAndroid Build Coastguard Worker * When sps_scaling_list_data_present_flag = 0, app still 557*54e60f84SAndroid Build Coastguard Worker * needs to send in this structure with default matrix values. 558*54e60f84SAndroid Build Coastguard Worker * 559*54e60f84SAndroid Build Coastguard Worker * Matrix entries are in raster scan order which follows HEVC spec. 560*54e60f84SAndroid Build Coastguard Worker */ 561*54e60f84SAndroid Build Coastguard Worker typedef struct _VAIQMatrixBufferHEVC { 562*54e60f84SAndroid Build Coastguard Worker /** 563*54e60f84SAndroid Build Coastguard Worker * \brief scaling lists, 564*54e60f84SAndroid Build Coastguard Worker * corresponds to same HEVC spec syntax element 565*54e60f84SAndroid Build Coastguard Worker * ScalingList[ i ][ MatrixID ][ j ]. 566*54e60f84SAndroid Build Coastguard Worker * 567*54e60f84SAndroid Build Coastguard Worker * \brief 4x4 scaling, 568*54e60f84SAndroid Build Coastguard Worker * correspongs i = 0, MatrixID is in the range of 0 to 5, 569*54e60f84SAndroid Build Coastguard Worker * inclusive. And j is in the range of 0 to 15, inclusive. 570*54e60f84SAndroid Build Coastguard Worker */ 571*54e60f84SAndroid Build Coastguard Worker uint8_t ScalingList4x4[6][16]; 572*54e60f84SAndroid Build Coastguard Worker /** 573*54e60f84SAndroid Build Coastguard Worker * \brief 8x8 scaling, 574*54e60f84SAndroid Build Coastguard Worker * correspongs i = 1, MatrixID is in the range of 0 to 5, 575*54e60f84SAndroid Build Coastguard Worker * inclusive. And j is in the range of 0 to 63, inclusive. 576*54e60f84SAndroid Build Coastguard Worker */ 577*54e60f84SAndroid Build Coastguard Worker uint8_t ScalingList8x8[6][64]; 578*54e60f84SAndroid Build Coastguard Worker /** 579*54e60f84SAndroid Build Coastguard Worker * \brief 16x16 scaling, 580*54e60f84SAndroid Build Coastguard Worker * correspongs i = 2, MatrixID is in the range of 0 to 5, 581*54e60f84SAndroid Build Coastguard Worker * inclusive. And j is in the range of 0 to 63, inclusive. 582*54e60f84SAndroid Build Coastguard Worker */ 583*54e60f84SAndroid Build Coastguard Worker uint8_t ScalingList16x16[6][64]; 584*54e60f84SAndroid Build Coastguard Worker /** 585*54e60f84SAndroid Build Coastguard Worker * \brief 32x32 scaling, 586*54e60f84SAndroid Build Coastguard Worker * correspongs i = 3, MatrixID is in the range of 0 to 1, 587*54e60f84SAndroid Build Coastguard Worker * inclusive. And j is in the range of 0 to 63, inclusive. 588*54e60f84SAndroid Build Coastguard Worker */ 589*54e60f84SAndroid Build Coastguard Worker uint8_t ScalingList32x32[2][64]; 590*54e60f84SAndroid Build Coastguard Worker /** 591*54e60f84SAndroid Build Coastguard Worker * \brief DC values of the 16x16 scaling lists, 592*54e60f84SAndroid Build Coastguard Worker * corresponds to HEVC spec syntax 593*54e60f84SAndroid Build Coastguard Worker * scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8 594*54e60f84SAndroid Build Coastguard Worker * with sizeID = 2 and matrixID in the range of 0 to 5, inclusive. 595*54e60f84SAndroid Build Coastguard Worker */ 596*54e60f84SAndroid Build Coastguard Worker uint8_t ScalingListDC16x16[6]; 597*54e60f84SAndroid Build Coastguard Worker /** 598*54e60f84SAndroid Build Coastguard Worker * \brief DC values of the 32x32 scaling lists, 599*54e60f84SAndroid Build Coastguard Worker * corresponds to HEVC spec syntax 600*54e60f84SAndroid Build Coastguard Worker * scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8 601*54e60f84SAndroid Build Coastguard Worker * with sizeID = 3 and matrixID in the range of 0 to 1, inclusive. 602*54e60f84SAndroid Build Coastguard Worker */ 603*54e60f84SAndroid Build Coastguard Worker uint8_t ScalingListDC32x32[2]; 604*54e60f84SAndroid Build Coastguard Worker 605*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 606*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_LOW]; 607*54e60f84SAndroid Build Coastguard Worker } VAIQMatrixBufferHEVC; 608*54e60f84SAndroid Build Coastguard Worker 609*54e60f84SAndroid Build Coastguard Worker 610*54e60f84SAndroid Build Coastguard Worker /**@}*/ 611*54e60f84SAndroid Build Coastguard Worker 612*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus 613*54e60f84SAndroid Build Coastguard Worker } 614*54e60f84SAndroid Build Coastguard Worker #endif 615*54e60f84SAndroid Build Coastguard Worker 616*54e60f84SAndroid Build Coastguard Worker #endif /* VA_DEC_HEVC_H */ 617