xref: /aosp_15_r20/external/libva/va/va_dec_hevc.h (revision 54e60f844a168e9a219354de272cd517ee8cd4b7)
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