xref: /aosp_15_r20/external/libva/va/va_enc_hevc.h (revision 54e60f844a168e9a219354de272cd517ee8cd4b7)
1*54e60f84SAndroid Build Coastguard Worker /*
2*54e60f84SAndroid Build Coastguard Worker  * Copyright (c) 2007-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_enc_hevc.h
27*54e60f84SAndroid Build Coastguard Worker  * \brief The HEVC encoding API
28*54e60f84SAndroid Build Coastguard Worker  *
29*54e60f84SAndroid Build Coastguard Worker  * This file contains the \ref api_enc_hevc "HEVC encoding API".
30*54e60f84SAndroid Build Coastguard Worker  *
31*54e60f84SAndroid Build Coastguard Worker  */
32*54e60f84SAndroid Build Coastguard Worker 
33*54e60f84SAndroid Build Coastguard Worker #ifndef VA_ENC_HEVC_H
34*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_HEVC_H
35*54e60f84SAndroid Build Coastguard Worker 
36*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus
37*54e60f84SAndroid Build Coastguard Worker extern "C" {
38*54e60f84SAndroid Build Coastguard Worker #endif
39*54e60f84SAndroid Build Coastguard Worker 
40*54e60f84SAndroid Build Coastguard Worker #include <stdint.h>
41*54e60f84SAndroid Build Coastguard Worker 
42*54e60f84SAndroid Build Coastguard Worker /**
43*54e60f84SAndroid Build Coastguard Worker  * \defgroup api_enc_hevc HEVC encoding API
44*54e60f84SAndroid Build Coastguard Worker  *
45*54e60f84SAndroid Build Coastguard Worker  * @{
46*54e60f84SAndroid Build Coastguard Worker  */
47*54e60f84SAndroid Build Coastguard Worker 
48*54e60f84SAndroid Build Coastguard Worker /** Attribute value for VAConfigAttribEncHEVCFeatures.
49*54e60f84SAndroid Build Coastguard Worker  *
50*54e60f84SAndroid Build Coastguard Worker  * This attribute decribes the supported features of an HEVC/H.265
51*54e60f84SAndroid Build Coastguard Worker  * encoder configuration.
52*54e60f84SAndroid Build Coastguard Worker  *
53*54e60f84SAndroid Build Coastguard Worker  * All of the field values in this attribute are VA_FEATURE_* values,
54*54e60f84SAndroid Build Coastguard Worker  * indicating support for the corresponding feature.
55*54e60f84SAndroid Build Coastguard Worker  */
56*54e60f84SAndroid Build Coastguard Worker typedef union VAConfigAttribValEncHEVCFeatures {
57*54e60f84SAndroid Build Coastguard Worker     struct {
58*54e60f84SAndroid Build Coastguard Worker         /** Separate colour planes.
59*54e60f84SAndroid Build Coastguard Worker          *
60*54e60f84SAndroid Build Coastguard Worker          * Allows setting separate_colour_plane_flag in the SPS.
61*54e60f84SAndroid Build Coastguard Worker          */
62*54e60f84SAndroid Build Coastguard Worker         uint32_t separate_colour_planes     : 2;
63*54e60f84SAndroid Build Coastguard Worker         /** Scaling lists.
64*54e60f84SAndroid Build Coastguard Worker          *
65*54e60f84SAndroid Build Coastguard Worker          * Allows scaling_list() elements to be present in both the SPS
66*54e60f84SAndroid Build Coastguard Worker          * and the PPS.  The decoded form of the scaling lists must also
67*54e60f84SAndroid Build Coastguard Worker          * be supplied in a VAQMatrixBufferHEVC buffer when scaling lists
68*54e60f84SAndroid Build Coastguard Worker          * are enabled.
69*54e60f84SAndroid Build Coastguard Worker          */
70*54e60f84SAndroid Build Coastguard Worker         uint32_t scaling_lists              : 2;
71*54e60f84SAndroid Build Coastguard Worker         /** Asymmetric motion partitions.
72*54e60f84SAndroid Build Coastguard Worker          *
73*54e60f84SAndroid Build Coastguard Worker          * Allows setting amp_enabled_flag in the SPS.
74*54e60f84SAndroid Build Coastguard Worker          */
75*54e60f84SAndroid Build Coastguard Worker         uint32_t amp                        : 2;
76*54e60f84SAndroid Build Coastguard Worker         /** Sample adaptive offset filter.
77*54e60f84SAndroid Build Coastguard Worker          *
78*54e60f84SAndroid Build Coastguard Worker          * Allows setting slice_sao_luma_flag and slice_sao_chroma_flag
79*54e60f84SAndroid Build Coastguard Worker          * in slice headers.
80*54e60f84SAndroid Build Coastguard Worker          */
81*54e60f84SAndroid Build Coastguard Worker         uint32_t sao                        : 2;
82*54e60f84SAndroid Build Coastguard Worker         /** PCM sample blocks.
83*54e60f84SAndroid Build Coastguard Worker          *
84*54e60f84SAndroid Build Coastguard Worker          * Allows setting pcm_enabled_flag in the SPS.  When enabled
85*54e60f84SAndroid Build Coastguard Worker          * PCM parameters must be supplied with the sequence parameters,
86*54e60f84SAndroid Build Coastguard Worker          * including block sizes which may be further constrained as
87*54e60f84SAndroid Build Coastguard Worker          * noted in the VAConfigAttribEncHEVCBlockSizes attribute.
88*54e60f84SAndroid Build Coastguard Worker          */
89*54e60f84SAndroid Build Coastguard Worker         uint32_t pcm                        : 2;
90*54e60f84SAndroid Build Coastguard Worker         /** Temporal motion vector Prediction.
91*54e60f84SAndroid Build Coastguard Worker          *
92*54e60f84SAndroid Build Coastguard Worker          * Allows setting slice_temporal_mvp_enabled_flag in slice
93*54e60f84SAndroid Build Coastguard Worker          * headers.
94*54e60f84SAndroid Build Coastguard Worker          */
95*54e60f84SAndroid Build Coastguard Worker         uint32_t temporal_mvp               : 2;
96*54e60f84SAndroid Build Coastguard Worker         /** Strong intra smoothing.
97*54e60f84SAndroid Build Coastguard Worker          *
98*54e60f84SAndroid Build Coastguard Worker          * Allows setting strong_intra_smoothing_enabled_flag in the SPS.
99*54e60f84SAndroid Build Coastguard Worker          */
100*54e60f84SAndroid Build Coastguard Worker         uint32_t strong_intra_smoothing     : 2;
101*54e60f84SAndroid Build Coastguard Worker         /** Dependent slices.
102*54e60f84SAndroid Build Coastguard Worker          *
103*54e60f84SAndroid Build Coastguard Worker          * Allows setting dependent_slice_segment_flag in slice headers.
104*54e60f84SAndroid Build Coastguard Worker          */
105*54e60f84SAndroid Build Coastguard Worker         uint32_t dependent_slices           : 2;
106*54e60f84SAndroid Build Coastguard Worker         /** Sign data hiding.
107*54e60f84SAndroid Build Coastguard Worker          *
108*54e60f84SAndroid Build Coastguard Worker          * Allows setting sign_data_hiding_enable_flag in the PPS.
109*54e60f84SAndroid Build Coastguard Worker          */
110*54e60f84SAndroid Build Coastguard Worker         uint32_t sign_data_hiding           : 2;
111*54e60f84SAndroid Build Coastguard Worker         /** Constrained intra prediction.
112*54e60f84SAndroid Build Coastguard Worker          *
113*54e60f84SAndroid Build Coastguard Worker          * Allows setting constrained_intra_pred_flag in the PPS.
114*54e60f84SAndroid Build Coastguard Worker          */
115*54e60f84SAndroid Build Coastguard Worker         uint32_t constrained_intra_pred     : 2;
116*54e60f84SAndroid Build Coastguard Worker         /** Transform skipping.
117*54e60f84SAndroid Build Coastguard Worker          *
118*54e60f84SAndroid Build Coastguard Worker          * Allows setting transform_skip_enabled_flag in the PPS.
119*54e60f84SAndroid Build Coastguard Worker          */
120*54e60f84SAndroid Build Coastguard Worker         uint32_t transform_skip             : 2;
121*54e60f84SAndroid Build Coastguard Worker         /** QP delta within coding units.
122*54e60f84SAndroid Build Coastguard Worker          *
123*54e60f84SAndroid Build Coastguard Worker          * Allows setting cu_qp_delta_enabled_flag in the PPS.
124*54e60f84SAndroid Build Coastguard Worker          */
125*54e60f84SAndroid Build Coastguard Worker         uint32_t cu_qp_delta                : 2;
126*54e60f84SAndroid Build Coastguard Worker         /** Weighted prediction.
127*54e60f84SAndroid Build Coastguard Worker          *
128*54e60f84SAndroid Build Coastguard Worker          * Allows setting weighted_pred_flag and weighted_bipred_flag in
129*54e60f84SAndroid Build Coastguard Worker          * the PPS.  The pred_weight_table() data must be supplied with
130*54e60f84SAndroid Build Coastguard Worker          * every slice header when weighted prediction is enabled.
131*54e60f84SAndroid Build Coastguard Worker          */
132*54e60f84SAndroid Build Coastguard Worker         uint32_t weighted_prediction        : 2;
133*54e60f84SAndroid Build Coastguard Worker         /** Transform and quantisation bypass.
134*54e60f84SAndroid Build Coastguard Worker          *
135*54e60f84SAndroid Build Coastguard Worker          * Allows setting transquant_bypass_enabled_flag in the PPS.
136*54e60f84SAndroid Build Coastguard Worker          */
137*54e60f84SAndroid Build Coastguard Worker         uint32_t transquant_bypass          : 2;
138*54e60f84SAndroid Build Coastguard Worker         /** Deblocking filter disable.
139*54e60f84SAndroid Build Coastguard Worker          *
140*54e60f84SAndroid Build Coastguard Worker          * Allows setting slice_deblocking_filter_disabled_flag.
141*54e60f84SAndroid Build Coastguard Worker          */
142*54e60f84SAndroid Build Coastguard Worker         uint32_t deblocking_filter_disable  : 2;
143*54e60f84SAndroid Build Coastguard Worker         /* Reserved,should not be used, avoid conflict with VA_ATTRIB_NOT_SUPPORTED. */
144*54e60f84SAndroid Build Coastguard Worker         uint32_t reserved                   : 2;
145*54e60f84SAndroid Build Coastguard Worker     } bits;
146*54e60f84SAndroid Build Coastguard Worker     uint32_t value;
147*54e60f84SAndroid Build Coastguard Worker } VAConfigAttribValEncHEVCFeatures;
148*54e60f84SAndroid Build Coastguard Worker 
149*54e60f84SAndroid Build Coastguard Worker /** Attribute value for VAConfigAttribEncHEVCBlockSizes.
150*54e60f84SAndroid Build Coastguard Worker  *
151*54e60f84SAndroid Build Coastguard Worker  * This attribute describes the supported coding tree and transform block
152*54e60f84SAndroid Build Coastguard Worker  * sizes of an HEVC/H.265 encoder configuration
153*54e60f84SAndroid Build Coastguard Worker  */
154*54e60f84SAndroid Build Coastguard Worker typedef union VAConfigAttribValEncHEVCBlockSizes {
155*54e60f84SAndroid Build Coastguard Worker     struct {
156*54e60f84SAndroid Build Coastguard Worker         /** Largest supported size of coding tree blocks.
157*54e60f84SAndroid Build Coastguard Worker          *
158*54e60f84SAndroid Build Coastguard Worker          * CtbLog2SizeY must not be larger than this.
159*54e60f84SAndroid Build Coastguard Worker          */
160*54e60f84SAndroid Build Coastguard Worker         uint32_t log2_max_coding_tree_block_size_minus3    : 2;
161*54e60f84SAndroid Build Coastguard Worker         /** Smallest supported size of coding tree blocks.
162*54e60f84SAndroid Build Coastguard Worker          *
163*54e60f84SAndroid Build Coastguard Worker          * CtbLog2SizeY must not be smaller than this.
164*54e60f84SAndroid Build Coastguard Worker          *
165*54e60f84SAndroid Build Coastguard Worker          * This may be the same as the maximum size, indicating that only
166*54e60f84SAndroid Build Coastguard Worker          * one CTB size is supported.
167*54e60f84SAndroid Build Coastguard Worker          */
168*54e60f84SAndroid Build Coastguard Worker         uint32_t log2_min_coding_tree_block_size_minus3    : 2;
169*54e60f84SAndroid Build Coastguard Worker 
170*54e60f84SAndroid Build Coastguard Worker         /** Smallest supported size of luma coding blocks.
171*54e60f84SAndroid Build Coastguard Worker          *
172*54e60f84SAndroid Build Coastguard Worker          * MinCbLog2SizeY must not be smaller than this.
173*54e60f84SAndroid Build Coastguard Worker          */
174*54e60f84SAndroid Build Coastguard Worker         uint32_t log2_min_luma_coding_block_size_minus3    : 2;
175*54e60f84SAndroid Build Coastguard Worker 
176*54e60f84SAndroid Build Coastguard Worker         /** Largest supported size of luma transform blocks.
177*54e60f84SAndroid Build Coastguard Worker          *
178*54e60f84SAndroid Build Coastguard Worker          * MaxTbLog2SizeY must not be larger than this.
179*54e60f84SAndroid Build Coastguard Worker          */
180*54e60f84SAndroid Build Coastguard Worker         uint32_t log2_max_luma_transform_block_size_minus2 : 2;
181*54e60f84SAndroid Build Coastguard Worker         /** Smallest supported size of luma transform blocks.
182*54e60f84SAndroid Build Coastguard Worker          *
183*54e60f84SAndroid Build Coastguard Worker          * MinTbLog2SizeY must not be smaller than this.
184*54e60f84SAndroid Build Coastguard Worker          */
185*54e60f84SAndroid Build Coastguard Worker         uint32_t log2_min_luma_transform_block_size_minus2 : 2;
186*54e60f84SAndroid Build Coastguard Worker 
187*54e60f84SAndroid Build Coastguard Worker         /** Largest supported transform hierarchy depth in inter
188*54e60f84SAndroid Build Coastguard Worker          *  coding units.
189*54e60f84SAndroid Build Coastguard Worker          *
190*54e60f84SAndroid Build Coastguard Worker          * max_transform_hierarchy_depth_inter must not be larger
191*54e60f84SAndroid Build Coastguard Worker          * than this.
192*54e60f84SAndroid Build Coastguard Worker          */
193*54e60f84SAndroid Build Coastguard Worker         uint32_t max_max_transform_hierarchy_depth_inter   : 2;
194*54e60f84SAndroid Build Coastguard Worker         /** Smallest supported transform hierarchy depth in inter
195*54e60f84SAndroid Build Coastguard Worker          *  coding units.
196*54e60f84SAndroid Build Coastguard Worker          *
197*54e60f84SAndroid Build Coastguard Worker          * max_transform_hierarchy_depth_inter must not be smaller
198*54e60f84SAndroid Build Coastguard Worker          * than this.
199*54e60f84SAndroid Build Coastguard Worker          */
200*54e60f84SAndroid Build Coastguard Worker         uint32_t min_max_transform_hierarchy_depth_inter   : 2;
201*54e60f84SAndroid Build Coastguard Worker 
202*54e60f84SAndroid Build Coastguard Worker         /** Largest supported transform hierarchy depth in intra
203*54e60f84SAndroid Build Coastguard Worker          *  coding units.
204*54e60f84SAndroid Build Coastguard Worker          *
205*54e60f84SAndroid Build Coastguard Worker          * max_transform_hierarchy_depth_intra must not be larger
206*54e60f84SAndroid Build Coastguard Worker          * than this.
207*54e60f84SAndroid Build Coastguard Worker          */
208*54e60f84SAndroid Build Coastguard Worker         uint32_t max_max_transform_hierarchy_depth_intra   : 2;
209*54e60f84SAndroid Build Coastguard Worker         /** Smallest supported transform hierarchy depth in intra
210*54e60f84SAndroid Build Coastguard Worker          *  coding units.
211*54e60f84SAndroid Build Coastguard Worker          *
212*54e60f84SAndroid Build Coastguard Worker          * max_transform_hierarchy_depth_intra must not be smaller
213*54e60f84SAndroid Build Coastguard Worker          * than this.
214*54e60f84SAndroid Build Coastguard Worker          */
215*54e60f84SAndroid Build Coastguard Worker         uint32_t min_max_transform_hierarchy_depth_intra   : 2;
216*54e60f84SAndroid Build Coastguard Worker 
217*54e60f84SAndroid Build Coastguard Worker         /** Largest supported size of PCM coding blocks.
218*54e60f84SAndroid Build Coastguard Worker          *
219*54e60f84SAndroid Build Coastguard Worker          *  Log2MaxIpcmCbSizeY must not be larger than this.
220*54e60f84SAndroid Build Coastguard Worker          */
221*54e60f84SAndroid Build Coastguard Worker         uint32_t log2_max_pcm_coding_block_size_minus3     : 2;
222*54e60f84SAndroid Build Coastguard Worker         /** Smallest supported size of PCM coding blocks.
223*54e60f84SAndroid Build Coastguard Worker          *
224*54e60f84SAndroid Build Coastguard Worker          *  Log2MinIpcmCbSizeY must not be smaller than this.
225*54e60f84SAndroid Build Coastguard Worker          */
226*54e60f84SAndroid Build Coastguard Worker         uint32_t log2_min_pcm_coding_block_size_minus3     : 2;
227*54e60f84SAndroid Build Coastguard Worker 
228*54e60f84SAndroid Build Coastguard Worker         /** Reserved for future use. */
229*54e60f84SAndroid Build Coastguard Worker         uint32_t reserved                                  : 10;
230*54e60f84SAndroid Build Coastguard Worker     } bits;
231*54e60f84SAndroid Build Coastguard Worker     uint32_t value;
232*54e60f84SAndroid Build Coastguard Worker } VAConfigAttribValEncHEVCBlockSizes;
233*54e60f84SAndroid Build Coastguard Worker 
234*54e60f84SAndroid Build Coastguard Worker /**
235*54e60f84SAndroid Build Coastguard Worker  * @name Picture flags
236*54e60f84SAndroid Build Coastguard Worker  *
237*54e60f84SAndroid Build Coastguard Worker  * Those flags flags are meant to signal when a picture marks the end
238*54e60f84SAndroid Build Coastguard Worker  * of a sequence, a stream, or even both at once.
239*54e60f84SAndroid Build Coastguard Worker  *
240*54e60f84SAndroid Build Coastguard Worker  * @{
241*54e60f84SAndroid Build Coastguard Worker  */
242*54e60f84SAndroid Build Coastguard Worker /**
243*54e60f84SAndroid Build Coastguard Worker  * \brief Marks the last picture in the sequence.
244*54e60f84SAndroid Build Coastguard Worker  *
245*54e60f84SAndroid Build Coastguard Worker  * i.e. the driver appends \c end_of_seq() NAL unit to the encoded frame.
246*54e60f84SAndroid Build Coastguard Worker  */
247*54e60f84SAndroid Build Coastguard Worker #define HEVC_LAST_PICTURE_EOSEQ     0x01
248*54e60f84SAndroid Build Coastguard Worker /**
249*54e60f84SAndroid Build Coastguard Worker  * \brief Marks the last picture in the stream.
250*54e60f84SAndroid Build Coastguard Worker  *
251*54e60f84SAndroid Build Coastguard Worker  * i.e. the driver appends \c end_of_stream() NAL unit to the encoded frame.
252*54e60f84SAndroid Build Coastguard Worker  */
253*54e60f84SAndroid Build Coastguard Worker #define HEVC_LAST_PICTURE_EOSTREAM  0x02
254*54e60f84SAndroid Build Coastguard Worker /**@}*/
255*54e60f84SAndroid Build Coastguard Worker 
256*54e60f84SAndroid Build Coastguard Worker /**
257*54e60f84SAndroid Build Coastguard Worker  * \brief Packed header types specific to HEVC encoding.
258*54e60f84SAndroid Build Coastguard Worker  *
259*54e60f84SAndroid Build Coastguard Worker  * Types of packed headers generally used for HEVC encoding. Each
260*54e60f84SAndroid Build Coastguard Worker  * associated packed header data buffer shall contain the start code
261*54e60f84SAndroid Build Coastguard Worker  * prefix 0x000001 followed by the complete NAL unit, thus also
262*54e60f84SAndroid Build Coastguard Worker  * including the \c nal_unit_type.
263*54e60f84SAndroid Build Coastguard Worker  *
264*54e60f84SAndroid Build Coastguard Worker  * Note: the start code prefix can contain an arbitrary number of leading
265*54e60f84SAndroid Build Coastguard Worker  * zeros. The driver will skip them for emulation prevention bytes insertion,
266*54e60f84SAndroid Build Coastguard Worker  * if necessary.
267*54e60f84SAndroid Build Coastguard Worker  */
268*54e60f84SAndroid Build Coastguard Worker typedef enum {
269*54e60f84SAndroid Build Coastguard Worker     /**
270*54e60f84SAndroid Build Coastguard Worker      * \brief Packed Video Parameter Set (VPS).
271*54e60f84SAndroid Build Coastguard Worker      *
272*54e60f84SAndroid Build Coastguard Worker      * The corresponding packed header data buffer shall contain the
273*54e60f84SAndroid Build Coastguard Worker      * complete video_parameter_set_rbsp() syntax element.
274*54e60f84SAndroid Build Coastguard Worker      *
275*54e60f84SAndroid Build Coastguard Worker      * Note: packed \c nal_unit_type shall be equal to 32.
276*54e60f84SAndroid Build Coastguard Worker      */
277*54e60f84SAndroid Build Coastguard Worker     VAEncPackedHeaderHEVC_VPS   = VAEncPackedHeaderSequence,
278*54e60f84SAndroid Build Coastguard Worker     /**
279*54e60f84SAndroid Build Coastguard Worker      * \brief Packed Sequence Parameter Set (SPS).
280*54e60f84SAndroid Build Coastguard Worker      *
281*54e60f84SAndroid Build Coastguard Worker      * The corresponding packed header data buffer shall contain the
282*54e60f84SAndroid Build Coastguard Worker      * complete seq_parameter_set_rbsp() syntax element.
283*54e60f84SAndroid Build Coastguard Worker      *
284*54e60f84SAndroid Build Coastguard Worker      * Note: packed \c nal_unit_type shall be equal to 33.
285*54e60f84SAndroid Build Coastguard Worker      */
286*54e60f84SAndroid Build Coastguard Worker     VAEncPackedHeaderHEVC_SPS   = VAEncPackedHeaderSequence,
287*54e60f84SAndroid Build Coastguard Worker     /**
288*54e60f84SAndroid Build Coastguard Worker      * \brief Packed Picture Parameter Set (PPS).
289*54e60f84SAndroid Build Coastguard Worker      *
290*54e60f84SAndroid Build Coastguard Worker      * The corresponding packed header data buffer shall contain the
291*54e60f84SAndroid Build Coastguard Worker      * complete pic_parameter_set_rbsp() syntax element.
292*54e60f84SAndroid Build Coastguard Worker      *
293*54e60f84SAndroid Build Coastguard Worker      * Note: packed \c nal_unit_type shall be equal to 34.
294*54e60f84SAndroid Build Coastguard Worker      */
295*54e60f84SAndroid Build Coastguard Worker     VAEncPackedHeaderHEVC_PPS   = VAEncPackedHeaderPicture,
296*54e60f84SAndroid Build Coastguard Worker     /**
297*54e60f84SAndroid Build Coastguard Worker      * \brief Packed slice header.
298*54e60f84SAndroid Build Coastguard Worker      *
299*54e60f84SAndroid Build Coastguard Worker      * The corresponding packed header data buffer shall contain the
300*54e60f84SAndroid Build Coastguard Worker      * \c slice_header() syntax element only, along with any start
301*54e60f84SAndroid Build Coastguard Worker      * code prefix and NAL unit type preceeding it. i.e. this means
302*54e60f84SAndroid Build Coastguard Worker      * that the buffer does not contain any of the \c slice_data() or
303*54e60f84SAndroid Build Coastguard Worker      * the \c rbsp_slice_trailing_bits().
304*54e60f84SAndroid Build Coastguard Worker      *
305*54e60f84SAndroid Build Coastguard Worker      * Note: packed \c nal_unit_type shall be equal to 0 to 9 (non-IRAP
306*54e60f84SAndroid Build Coastguard Worker      * picture), or 16 to 21 (IRAP picture).
307*54e60f84SAndroid Build Coastguard Worker      */
308*54e60f84SAndroid Build Coastguard Worker     VAEncPackedHeaderHEVC_Slice = VAEncPackedHeaderSlice,
309*54e60f84SAndroid Build Coastguard Worker     /**
310*54e60f84SAndroid Build Coastguard Worker      * \brief Packed Supplemental Enhancement Information (SEI).
311*54e60f84SAndroid Build Coastguard Worker      *
312*54e60f84SAndroid Build Coastguard Worker      * The corresponding packed header data buffer shall contain the
313*54e60f84SAndroid Build Coastguard Worker      * complete sei_rbsp() syntax element, thus including several
314*54e60f84SAndroid Build Coastguard Worker      * sei_message() elements if necessary.
315*54e60f84SAndroid Build Coastguard Worker      *
316*54e60f84SAndroid Build Coastguard Worker      * Note: packed \c nal_unit_type shall be equal to 39 or 40.
317*54e60f84SAndroid Build Coastguard Worker      *
318*54e60f84SAndroid Build Coastguard Worker      * @deprecated
319*54e60f84SAndroid Build Coastguard Worker      * This is a deprecated packed header flag, All applications can use
320*54e60f84SAndroid Build Coastguard Worker      * \c VA_ENC_PACKED_HEADER_RAW_DATA to pass the corresponding packed
321*54e60f84SAndroid Build Coastguard Worker      * SEI header data buffer to the driver
322*54e60f84SAndroid Build Coastguard Worker      */
323*54e60f84SAndroid Build Coastguard Worker     VAEncPackedHeaderHEVC_SEI  va_deprecated_enum = (0x80000000 | 1),
324*54e60f84SAndroid Build Coastguard Worker } VAEncPackedHeaderTypeHEVC;
325*54e60f84SAndroid Build Coastguard Worker 
326*54e60f84SAndroid Build Coastguard Worker /**
327*54e60f84SAndroid Build Coastguard Worker  * \brief Sequence parameter for HEVC encoding in main & main 10
328*54e60f84SAndroid Build Coastguard Worker  * profiles.
329*54e60f84SAndroid Build Coastguard Worker  *
330*54e60f84SAndroid Build Coastguard Worker  * This structure holds information for \c seq_parameter_set_data() as
331*54e60f84SAndroid Build Coastguard Worker  * defined by the HEVC specification.
332*54e60f84SAndroid Build Coastguard Worker  *
333*54e60f84SAndroid Build Coastguard Worker  * If packed sequence headers mode is used, i.e. if the encoding
334*54e60f84SAndroid Build Coastguard Worker  * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE
335*54e60f84SAndroid Build Coastguard Worker  * flag, then the driver expects two more buffers to be provided to
336*54e60f84SAndroid Build Coastguard Worker  * the same \c vaRenderPicture() as this buffer:
337*54e60f84SAndroid Build Coastguard Worker  * - a #VAEncPackedHeaderParameterBuffer with type set to
338*54e60f84SAndroid Build Coastguard Worker  *   VAEncPackedHeaderType::VAEncPackedHeaderSequence ;
339*54e60f84SAndroid Build Coastguard Worker  * - a #VAEncPackedHeaderDataBuffer which holds the actual packed
340*54e60f84SAndroid Build Coastguard Worker  *   header data.
341*54e60f84SAndroid Build Coastguard Worker  *
342*54e60f84SAndroid Build Coastguard Worker  * If \c seq_scaling_matrix_present_flag is set to \c 1, then a
343*54e60f84SAndroid Build Coastguard Worker  * #VAQMatrixBufferHEVC buffer shall also be provided within the same
344*54e60f84SAndroid Build Coastguard Worker  * \c vaRenderPicture() call as this sequence parameter buffer.
345*54e60f84SAndroid Build Coastguard Worker  */
346*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncSequenceParameterBufferHEVC {
347*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element.
348*54e60f84SAndroid Build Coastguard Worker      *  value range [1..2].
349*54e60f84SAndroid Build Coastguard Worker      */
350*54e60f84SAndroid Build Coastguard Worker     uint8_t     general_profile_idc;
351*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element.
352*54e60f84SAndroid Build Coastguard Worker      *  general_level_idc shall be set equal to a value of 30 times the level
353*54e60f84SAndroid Build Coastguard Worker      *  numbers allowed [1, 2, 2.1, 3, 3.1, 4, 4.1, 5, 5.1, 5.2, 6, 6.1, 6.2]
354*54e60f84SAndroid Build Coastguard Worker      */
355*54e60f84SAndroid Build Coastguard Worker     uint8_t     general_level_idc;
356*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element.
357*54e60f84SAndroid Build Coastguard Worker      *  Only value 0 is allowed for level value below 4, exclusive.
358*54e60f84SAndroid Build Coastguard Worker      */
359*54e60f84SAndroid Build Coastguard Worker     uint8_t     general_tier_flag;
360*54e60f84SAndroid Build Coastguard Worker     /** \brief Period between I frames. */
361*54e60f84SAndroid Build Coastguard Worker     uint32_t    intra_period;
362*54e60f84SAndroid Build Coastguard Worker     /** \brief Period between IDR frames. */
363*54e60f84SAndroid Build Coastguard Worker     uint32_t    intra_idr_period;
364*54e60f84SAndroid Build Coastguard Worker     /** \brief Period between I/P frames. */
365*54e60f84SAndroid Build Coastguard Worker     uint32_t    ip_period;
366*54e60f84SAndroid Build Coastguard Worker     /**
367*54e60f84SAndroid Build Coastguard Worker      * \brief Initial bitrate set for this sequence in CBR or VBR modes.
368*54e60f84SAndroid Build Coastguard Worker      *
369*54e60f84SAndroid Build Coastguard Worker      * This field represents the initial bitrate value for this
370*54e60f84SAndroid Build Coastguard Worker      * sequence if CBR or VBR mode is used, i.e. if the encoder
371*54e60f84SAndroid Build Coastguard Worker      * pipeline was created with a #VAConfigAttribRateControl
372*54e60f84SAndroid Build Coastguard Worker      * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR.
373*54e60f84SAndroid Build Coastguard Worker      *
374*54e60f84SAndroid Build Coastguard Worker      * The bitrate can be modified later on through
375*54e60f84SAndroid Build Coastguard Worker      * #VAEncMiscParameterRateControl buffers.
376*54e60f84SAndroid Build Coastguard Worker      */
377*54e60f84SAndroid Build Coastguard Worker     uint32_t    bits_per_second;
378*54e60f84SAndroid Build Coastguard Worker     /** \brief Picture width in pixel samples.
379*54e60f84SAndroid Build Coastguard Worker      *  Its value must be multiple of min CU size.
380*54e60f84SAndroid Build Coastguard Worker      */
381*54e60f84SAndroid Build Coastguard Worker     uint16_t    pic_width_in_luma_samples;
382*54e60f84SAndroid Build Coastguard Worker     /** \brief Picture height in pixel samples.
383*54e60f84SAndroid Build Coastguard Worker      *  Its value must be multiple of min CU size.
384*54e60f84SAndroid Build Coastguard Worker      */
385*54e60f84SAndroid Build Coastguard Worker     uint16_t    pic_height_in_luma_samples;
386*54e60f84SAndroid Build Coastguard Worker 
387*54e60f84SAndroid Build Coastguard Worker     union {
388*54e60f84SAndroid Build Coastguard Worker         struct {
389*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the HEVC bitstream syntax element. */
390*54e60f84SAndroid Build Coastguard Worker             uint32_t    chroma_format_idc                              : 2;
391*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the HEVC bitstream syntax element. */
392*54e60f84SAndroid Build Coastguard Worker             uint32_t    separate_colour_plane_flag                     : 1;
393*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the HEVC bitstream syntax element. */
394*54e60f84SAndroid Build Coastguard Worker             uint32_t    bit_depth_luma_minus8                          : 3;
395*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the HEVC bitstream syntax element. */
396*54e60f84SAndroid Build Coastguard Worker             uint32_t    bit_depth_chroma_minus8                        : 3;
397*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the HEVC bitstream syntax element. */
398*54e60f84SAndroid Build Coastguard Worker             uint32_t    scaling_list_enabled_flag                      : 1;
399*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the HEVC bitstream syntax element. */
400*54e60f84SAndroid Build Coastguard Worker             uint32_t    strong_intra_smoothing_enabled_flag            : 1;
401*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the HEVC bitstream syntax element. */
402*54e60f84SAndroid Build Coastguard Worker             uint32_t    amp_enabled_flag                               : 1;
403*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the HEVC bitstream syntax element. */
404*54e60f84SAndroid Build Coastguard Worker             uint32_t    sample_adaptive_offset_enabled_flag            : 1;
405*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the HEVC bitstream syntax element. */
406*54e60f84SAndroid Build Coastguard Worker             uint32_t    pcm_enabled_flag                               : 1;
407*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the HEVC bitstream syntax element. */
408*54e60f84SAndroid Build Coastguard Worker             uint32_t    pcm_loop_filter_disabled_flag                  : 1;
409*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the HEVC bitstream syntax element. */
410*54e60f84SAndroid Build Coastguard Worker             uint32_t    sps_temporal_mvp_enabled_flag                  : 1;
411*54e60f84SAndroid Build Coastguard Worker             /** \brief Indicates whether or not the encoding is in low delay mode.
412*54e60f84SAndroid Build Coastguard Worker               * 0 normal sequence
413*54e60f84SAndroid Build Coastguard Worker               * 1 no random access B will be coded . and the coding type could be only I, P or LDB
414*54e60f84SAndroid Build Coastguard Worker               * this flag only indicates the frame coding type of the sequence.
415*54e60f84SAndroid Build Coastguard Worker               */
416*54e60f84SAndroid Build Coastguard Worker             uint32_t    low_delay_seq                                  : 1;
417*54e60f84SAndroid Build Coastguard Worker             /** \brief Indicates whether or not the encoding is in dyadic hierarchical GOP structure
418*54e60f84SAndroid Build Coastguard Worker               * the default value 0, BRC would treat is as flat structure. if HierachicalFlag == 1,
419*54e60f84SAndroid Build Coastguard Worker               * application would enable Qp Modulation
420*54e60f84SAndroid Build Coastguard Worker               */
421*54e60f84SAndroid Build Coastguard Worker             uint32_t    hierachical_flag                               : 1;
422*54e60f84SAndroid Build Coastguard Worker             /** \brief keep for future , should be set to 0 */
423*54e60f84SAndroid Build Coastguard Worker             uint32_t    reserved_bits                                  : 14;
424*54e60f84SAndroid Build Coastguard Worker         } bits;
425*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
426*54e60f84SAndroid Build Coastguard Worker     } seq_fields;
427*54e60f84SAndroid Build Coastguard Worker 
428*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element.
429*54e60f84SAndroid Build Coastguard Worker      *  value range [0..3]
430*54e60f84SAndroid Build Coastguard Worker      */
431*54e60f84SAndroid Build Coastguard Worker     uint8_t     log2_min_luma_coding_block_size_minus3;
432*54e60f84SAndroid Build Coastguard Worker 
433*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element.
434*54e60f84SAndroid Build Coastguard Worker      */
435*54e60f84SAndroid Build Coastguard Worker     uint8_t     log2_diff_max_min_luma_coding_block_size;
436*54e60f84SAndroid Build Coastguard Worker 
437*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element.
438*54e60f84SAndroid Build Coastguard Worker      *  value range [0..3]
439*54e60f84SAndroid Build Coastguard Worker      */
440*54e60f84SAndroid Build Coastguard Worker     uint8_t     log2_min_transform_block_size_minus2;
441*54e60f84SAndroid Build Coastguard Worker 
442*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element.
443*54e60f84SAndroid Build Coastguard Worker      */
444*54e60f84SAndroid Build Coastguard Worker     uint8_t     log2_diff_max_min_transform_block_size;
445*54e60f84SAndroid Build Coastguard Worker 
446*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element.
447*54e60f84SAndroid Build Coastguard Worker      *  value range [2]
448*54e60f84SAndroid Build Coastguard Worker      */
449*54e60f84SAndroid Build Coastguard Worker     uint8_t     max_transform_hierarchy_depth_inter;
450*54e60f84SAndroid Build Coastguard Worker 
451*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element.
452*54e60f84SAndroid Build Coastguard Worker      *  value range [2]
453*54e60f84SAndroid Build Coastguard Worker      */
454*54e60f84SAndroid Build Coastguard Worker     uint8_t     max_transform_hierarchy_depth_intra;
455*54e60f84SAndroid Build Coastguard Worker 
456*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element. */
457*54e60f84SAndroid Build Coastguard Worker     uint32_t    pcm_sample_bit_depth_luma_minus1;
458*54e60f84SAndroid Build Coastguard Worker 
459*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element. */
460*54e60f84SAndroid Build Coastguard Worker     uint32_t    pcm_sample_bit_depth_chroma_minus1;
461*54e60f84SAndroid Build Coastguard Worker 
462*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element. */
463*54e60f84SAndroid Build Coastguard Worker     uint32_t    log2_min_pcm_luma_coding_block_size_minus3;
464*54e60f84SAndroid Build Coastguard Worker 
465*54e60f84SAndroid Build Coastguard Worker     /** \brief Derived from the HEVC bitstream syntax element.
466*54e60f84SAndroid Build Coastguard Worker     *  log2_min_pcm_luma_coding_block_size_minus3 +
467*54e60f84SAndroid Build Coastguard Worker     *  log2_diff_max_min_pcm_luma_coding_block_size
468*54e60f84SAndroid Build Coastguard Worker     */
469*54e60f84SAndroid Build Coastguard Worker     uint32_t    log2_max_pcm_luma_coding_block_size_minus3;
470*54e60f84SAndroid Build Coastguard Worker 
471*54e60f84SAndroid Build Coastguard Worker     /** @name VUI parameters (optional) */
472*54e60f84SAndroid Build Coastguard Worker     /**@{*/
473*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element. */
474*54e60f84SAndroid Build Coastguard Worker     uint8_t     vui_parameters_present_flag;
475*54e60f84SAndroid Build Coastguard Worker     union {
476*54e60f84SAndroid Build Coastguard Worker         struct {
477*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the HEVC bitstream syntax element. */
478*54e60f84SAndroid Build Coastguard Worker             uint32_t    aspect_ratio_info_present_flag                 : 1;
479*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the HEVC bitstream syntax element. */
480*54e60f84SAndroid Build Coastguard Worker             uint32_t    neutral_chroma_indication_flag                 : 1;
481*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the HEVC bitstream syntax element. */
482*54e60f84SAndroid Build Coastguard Worker             uint32_t    field_seq_flag                                 : 1;
483*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the HEVC bitstream syntax element. */
484*54e60f84SAndroid Build Coastguard Worker             uint32_t    vui_timing_info_present_flag                   : 1;
485*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the HEVC bitstream syntax element. */
486*54e60f84SAndroid Build Coastguard Worker             uint32_t    bitstream_restriction_flag                     : 1;
487*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the HEVC bitstream syntax element. */
488*54e60f84SAndroid Build Coastguard Worker             uint32_t    tiles_fixed_structure_flag                     : 1;
489*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the HEVC bitstream syntax element. */
490*54e60f84SAndroid Build Coastguard Worker             uint32_t    motion_vectors_over_pic_boundaries_flag        : 1;
491*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the HEVC bitstream syntax element. */
492*54e60f84SAndroid Build Coastguard Worker             uint32_t    restricted_ref_pic_lists_flag                  : 1;
493*54e60f84SAndroid Build Coastguard Worker             /** \brief Range: 0 to 16, inclusive. */
494*54e60f84SAndroid Build Coastguard Worker             uint32_t    log2_max_mv_length_horizontal                  : 5;
495*54e60f84SAndroid Build Coastguard Worker             /** \brief Range: 0 to 16, inclusive. */
496*54e60f84SAndroid Build Coastguard Worker             uint32_t    log2_max_mv_length_vertical                    : 5;
497*54e60f84SAndroid Build Coastguard Worker         } bits;
498*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
499*54e60f84SAndroid Build Coastguard Worker     } vui_fields;
500*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element. */
501*54e60f84SAndroid Build Coastguard Worker     uint8_t     aspect_ratio_idc;
502*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element. */
503*54e60f84SAndroid Build Coastguard Worker     uint32_t    sar_width;
504*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element. */
505*54e60f84SAndroid Build Coastguard Worker     uint32_t    sar_height;
506*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element. */
507*54e60f84SAndroid Build Coastguard Worker     uint32_t    vui_num_units_in_tick;
508*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element. */
509*54e60f84SAndroid Build Coastguard Worker     uint32_t    vui_time_scale;
510*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element. */
511*54e60f84SAndroid Build Coastguard Worker     uint16_t    min_spatial_segmentation_idc;
512*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element. */
513*54e60f84SAndroid Build Coastguard Worker     uint8_t     max_bytes_per_pic_denom;
514*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element. */
515*54e60f84SAndroid Build Coastguard Worker     uint8_t     max_bits_per_min_cu_denom;
516*54e60f84SAndroid Build Coastguard Worker 
517*54e60f84SAndroid Build Coastguard Worker     /** \brief SCC flags to enable/disable features, including IBC and palette mode at present.*/
518*54e60f84SAndroid Build Coastguard Worker     union {
519*54e60f84SAndroid Build Coastguard Worker         struct {
520*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the HEVC bitstream syntax element. */
521*54e60f84SAndroid Build Coastguard Worker             uint32_t    palette_mode_enabled_flag                      : 1;
522*54e60f84SAndroid Build Coastguard Worker             /** \brief Reserved bits for future use, must be zero */
523*54e60f84SAndroid Build Coastguard Worker             uint32_t    reserved                                       : 31;
524*54e60f84SAndroid Build Coastguard Worker         } bits;
525*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
526*54e60f84SAndroid Build Coastguard Worker     } scc_fields;
527*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
528*54e60f84SAndroid Build Coastguard Worker     uint32_t   va_reserved[VA_PADDING_MEDIUM - 1];
529*54e60f84SAndroid Build Coastguard Worker     /**@}*/
530*54e60f84SAndroid Build Coastguard Worker } VAEncSequenceParameterBufferHEVC;
531*54e60f84SAndroid Build Coastguard Worker 
532*54e60f84SAndroid Build Coastguard Worker /****************************
533*54e60f84SAndroid Build Coastguard Worker  * HEVC data structures
534*54e60f84SAndroid Build Coastguard Worker  ****************************/
535*54e60f84SAndroid Build Coastguard Worker /**
536*54e60f84SAndroid Build Coastguard Worker  * \brief Picture parameter for HEVC encoding in main & main 10
537*54e60f84SAndroid Build Coastguard Worker  * profiles.
538*54e60f84SAndroid Build Coastguard Worker  *
539*54e60f84SAndroid Build Coastguard Worker  * This structure holds information for \c pic_parameter_set_rbsp() as
540*54e60f84SAndroid Build Coastguard Worker  * defined by the HEVC specification.
541*54e60f84SAndroid Build Coastguard Worker  *
542*54e60f84SAndroid Build Coastguard Worker  * If packed picture headers mode is used, i.e. if the encoding
543*54e60f84SAndroid Build Coastguard Worker  * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE
544*54e60f84SAndroid Build Coastguard Worker  * flag, then the driver expects two more buffers to be provided to
545*54e60f84SAndroid Build Coastguard Worker  * the same \c vaRenderPicture() as this buffer:
546*54e60f84SAndroid Build Coastguard Worker  * - a #VAEncPackedHeaderParameterBuffer with type set to
547*54e60f84SAndroid Build Coastguard Worker  *   VAEncPackedHeaderType::VAEncPackedHeaderPicture ;
548*54e60f84SAndroid Build Coastguard Worker  * - a #VAEncPackedHeaderDataBuffer which holds the actual packed
549*54e60f84SAndroid Build Coastguard Worker  *   header data.
550*54e60f84SAndroid Build Coastguard Worker  *
551*54e60f84SAndroid Build Coastguard Worker  * If \c pic_scaling_matrix_present_flag is set to \c 1, then a
552*54e60f84SAndroid Build Coastguard Worker  * #VAQMatrixBufferHEVC buffer shall also be provided within the same
553*54e60f84SAndroid Build Coastguard Worker  * \c vaRenderPicture() call as this picture parameter buffer.
554*54e60f84SAndroid Build Coastguard Worker  */
555*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncPictureParameterBufferHEVC {
556*54e60f84SAndroid Build Coastguard Worker     /**
557*54e60f84SAndroid Build Coastguard Worker      * \brief Information about the picture to be encoded.
558*54e60f84SAndroid Build Coastguard Worker      *
559*54e60f84SAndroid Build Coastguard Worker      * See #VAPictureHEVC for further description of each field.
560*54e60f84SAndroid Build Coastguard Worker      * Note that decoded_curr_pic.picture_id represents the reconstructed
561*54e60f84SAndroid Build Coastguard Worker      * (decoded) picture. User provides a scratch VA surface ID here.
562*54e60f84SAndroid Build Coastguard Worker      * Long term reference and RPS related fields should be set to 0
563*54e60f84SAndroid Build Coastguard Worker      * and ignored.
564*54e60f84SAndroid Build Coastguard Worker      */
565*54e60f84SAndroid Build Coastguard Worker     VAPictureHEVC   decoded_curr_pic;
566*54e60f84SAndroid Build Coastguard Worker     /**
567*54e60f84SAndroid Build Coastguard Worker      * \brief Decoded Picture Buffer (DPB).
568*54e60f84SAndroid Build Coastguard Worker      *
569*54e60f84SAndroid Build Coastguard Worker      * This array represents the list of reconstructed (decoded)
570*54e60f84SAndroid Build Coastguard Worker      * frames used as reference. It is important to keep track of
571*54e60f84SAndroid Build Coastguard Worker      * reconstructed frames so that they can be used later on as
572*54e60f84SAndroid Build Coastguard Worker      * reference for P or B-frames encoding.
573*54e60f84SAndroid Build Coastguard Worker      */
574*54e60f84SAndroid Build Coastguard Worker     VAPictureHEVC   reference_frames[15];
575*54e60f84SAndroid Build Coastguard Worker     /**
576*54e60f84SAndroid Build Coastguard Worker      * \brief Output encoded bitstream.
577*54e60f84SAndroid Build Coastguard Worker      *
578*54e60f84SAndroid Build Coastguard Worker      * \ref coded_buf has type #VAEncCodedBufferType. It should be
579*54e60f84SAndroid Build Coastguard Worker      * large enough to hold the compressed NAL slice and possibly VPS, SPS
580*54e60f84SAndroid Build Coastguard Worker      * and PPS NAL units, and other NAL units such as SEI.
581*54e60f84SAndroid Build Coastguard Worker      */
582*54e60f84SAndroid Build Coastguard Worker     VABufferID      coded_buf;
583*54e60f84SAndroid Build Coastguard Worker 
584*54e60f84SAndroid Build Coastguard Worker     /** \brief collocated reference picture buffer index of ReferenceFrames[].
585*54e60f84SAndroid Build Coastguard Worker      * Please note it is different from HEVC syntac element collocated_ref_idx.
586*54e60f84SAndroid Build Coastguard Worker      * When  the HEVC syntax element slice_temporal_mvp_enable_flag takes value 0,
587*54e60f84SAndroid Build Coastguard Worker      * collocated_ref_pic_index should take value 0xFF. .
588*54e60f84SAndroid Build Coastguard Worker      * Range: [0..14, 0xFF]
589*54e60f84SAndroid Build Coastguard Worker      */
590*54e60f84SAndroid Build Coastguard Worker     uint8_t         collocated_ref_pic_index;
591*54e60f84SAndroid Build Coastguard Worker 
592*54e60f84SAndroid Build Coastguard Worker     /**
593*54e60f84SAndroid Build Coastguard Worker      * \brief OR'd flags describing whether the picture is the last one or not.
594*54e60f84SAndroid Build Coastguard Worker      *
595*54e60f84SAndroid Build Coastguard Worker      * This fields holds 0 if the picture to be encoded is not the last
596*54e60f84SAndroid Build Coastguard Worker      * one in the stream or sequence. Otherwise, it is a combination of
597*54e60f84SAndroid Build Coastguard Worker      * \ref HEVC_LAST_PICTURE_EOSEQ or \ref HEVC_LAST_PICTURE_EOSTREAM.
598*54e60f84SAndroid Build Coastguard Worker      */
599*54e60f84SAndroid Build Coastguard Worker     uint8_t         last_picture;
600*54e60f84SAndroid Build Coastguard Worker 
601*54e60f84SAndroid Build Coastguard Worker     /** \brief \c init_qp_minus26 + 26. */
602*54e60f84SAndroid Build Coastguard Worker     uint8_t         pic_init_qp;
603*54e60f84SAndroid Build Coastguard Worker 
604*54e60f84SAndroid Build Coastguard Worker     /** \brief Corresponds to HEVC syntax element of the same name. */
605*54e60f84SAndroid Build Coastguard Worker     uint8_t         diff_cu_qp_delta_depth;
606*54e60f84SAndroid Build Coastguard Worker 
607*54e60f84SAndroid Build Coastguard Worker     /** \brief Corresponds to HEVC syntax element of the same name. */
608*54e60f84SAndroid Build Coastguard Worker     int8_t          pps_cb_qp_offset;
609*54e60f84SAndroid Build Coastguard Worker 
610*54e60f84SAndroid Build Coastguard Worker     /** \brief Corresponds to HEVC syntax element of the same name. */
611*54e60f84SAndroid Build Coastguard Worker     int8_t          pps_cr_qp_offset;
612*54e60f84SAndroid Build Coastguard Worker 
613*54e60f84SAndroid Build Coastguard Worker     /** \brief Corresponds to HEVC syntax element of the same name. */
614*54e60f84SAndroid Build Coastguard Worker     uint8_t         num_tile_columns_minus1;
615*54e60f84SAndroid Build Coastguard Worker 
616*54e60f84SAndroid Build Coastguard Worker     /** \brief Corresponds to HEVC syntax element of the same name. */
617*54e60f84SAndroid Build Coastguard Worker     uint8_t         num_tile_rows_minus1;
618*54e60f84SAndroid Build Coastguard Worker 
619*54e60f84SAndroid Build Coastguard Worker     /** \brief Corresponds to HEVC syntax element of the same name. */
620*54e60f84SAndroid Build Coastguard Worker     uint8_t         column_width_minus1[19];
621*54e60f84SAndroid Build Coastguard Worker 
622*54e60f84SAndroid Build Coastguard Worker     /** \brief Corresponds to HEVC syntax element of the same name. */
623*54e60f84SAndroid Build Coastguard Worker     uint8_t         row_height_minus1[21];
624*54e60f84SAndroid Build Coastguard Worker 
625*54e60f84SAndroid Build Coastguard Worker     /** \brief Corresponds to HEVC syntax element of the same name. */
626*54e60f84SAndroid Build Coastguard Worker     uint8_t         log2_parallel_merge_level_minus2;
627*54e60f84SAndroid Build Coastguard Worker 
628*54e60f84SAndroid Build Coastguard Worker     /** \brief Application may set the CTU bit size limit based on
629*54e60f84SAndroid Build Coastguard Worker      *  spec requirement (A.3.2), or other value for special purpose.
630*54e60f84SAndroid Build Coastguard Worker      *  If the value is set 0, no bit size limit is checked.
631*54e60f84SAndroid Build Coastguard Worker      */
632*54e60f84SAndroid Build Coastguard Worker     uint8_t         ctu_max_bitsize_allowed;
633*54e60f84SAndroid Build Coastguard Worker 
634*54e60f84SAndroid Build Coastguard Worker     /** \brief Maximum reference index for reference picture list 0.
635*54e60f84SAndroid Build Coastguard Worker      *   value range: [0..14].
636*54e60f84SAndroid Build Coastguard Worker      */
637*54e60f84SAndroid Build Coastguard Worker     uint8_t         num_ref_idx_l0_default_active_minus1;
638*54e60f84SAndroid Build Coastguard Worker 
639*54e60f84SAndroid Build Coastguard Worker     /** \brief Maximum reference index for reference picture list 1.
640*54e60f84SAndroid Build Coastguard Worker      *  value range: [0..14].
641*54e60f84SAndroid Build Coastguard Worker      */
642*54e60f84SAndroid Build Coastguard Worker     uint8_t         num_ref_idx_l1_default_active_minus1;
643*54e60f84SAndroid Build Coastguard Worker 
644*54e60f84SAndroid Build Coastguard Worker     /** \brief PPS header
645*54e60f84SAndroid Build Coastguard Worker      *  Used by GPU to generate new slice headers in slice size control.
646*54e60f84SAndroid Build Coastguard Worker      *  value range: [0..63].
647*54e60f84SAndroid Build Coastguard Worker      */
648*54e60f84SAndroid Build Coastguard Worker     uint8_t         slice_pic_parameter_set_id;
649*54e60f84SAndroid Build Coastguard Worker 
650*54e60f84SAndroid Build Coastguard Worker     /** \brief NAL unit type
651*54e60f84SAndroid Build Coastguard Worker      *  Used by GPU to generate new slice headers in slice size control.
652*54e60f84SAndroid Build Coastguard Worker      *  value range: [0..63].
653*54e60f84SAndroid Build Coastguard Worker      */
654*54e60f84SAndroid Build Coastguard Worker     uint8_t         nal_unit_type;
655*54e60f84SAndroid Build Coastguard Worker 
656*54e60f84SAndroid Build Coastguard Worker     union {
657*54e60f84SAndroid Build Coastguard Worker         struct {
658*54e60f84SAndroid Build Coastguard Worker             /** \brief Is picture an IDR picture? */
659*54e60f84SAndroid Build Coastguard Worker             uint32_t    idr_pic_flag                                   : 1;
660*54e60f84SAndroid Build Coastguard Worker             /** \brief Picture type.
661*54e60f84SAndroid Build Coastguard Worker              *  I  - 1;
662*54e60f84SAndroid Build Coastguard Worker              *  P  - 2;
663*54e60f84SAndroid Build Coastguard Worker              *  B  - 3;
664*54e60f84SAndroid Build Coastguard Worker              *  B1 - 4;
665*54e60f84SAndroid Build Coastguard Worker              *  B2 - 5;
666*54e60f84SAndroid Build Coastguard Worker              * B1 and B2 are frame types for hierachical B, explanation
667*54e60f84SAndroid Build Coastguard Worker              * can refer to num_b_in_gop[].
668*54e60f84SAndroid Build Coastguard Worker              */
669*54e60f84SAndroid Build Coastguard Worker             uint32_t    coding_type                                    : 3;
670*54e60f84SAndroid Build Coastguard Worker             /** \brief Is picture a reference picture? */
671*54e60f84SAndroid Build Coastguard Worker             uint32_t    reference_pic_flag                             : 1;
672*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to HEVC syntax element of the same name. */
673*54e60f84SAndroid Build Coastguard Worker             uint32_t    dependent_slice_segments_enabled_flag          : 1;
674*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to HEVC syntax element of the same name. */
675*54e60f84SAndroid Build Coastguard Worker             uint32_t    sign_data_hiding_enabled_flag                  : 1;
676*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to HEVC syntax element of the same name. */
677*54e60f84SAndroid Build Coastguard Worker             uint32_t    constrained_intra_pred_flag                    : 1;
678*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to HEVC syntax element of the same name. */
679*54e60f84SAndroid Build Coastguard Worker             uint32_t    transform_skip_enabled_flag                    : 1;
680*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to HEVC syntax element of the same name. */
681*54e60f84SAndroid Build Coastguard Worker             uint32_t    cu_qp_delta_enabled_flag                   : 1;
682*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to HEVC syntax element of the same name. */
683*54e60f84SAndroid Build Coastguard Worker             uint32_t    weighted_pred_flag                             : 1;
684*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to HEVC syntax element of the same name. */
685*54e60f84SAndroid Build Coastguard Worker             uint32_t    weighted_bipred_flag                           : 1;
686*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to HEVC syntax element of the same name. */
687*54e60f84SAndroid Build Coastguard Worker             uint32_t    transquant_bypass_enabled_flag                 : 1;
688*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to HEVC syntax element of the same name. */
689*54e60f84SAndroid Build Coastguard Worker             uint32_t    tiles_enabled_flag                             : 1;
690*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to HEVC syntax element of the same name. */
691*54e60f84SAndroid Build Coastguard Worker             uint32_t    entropy_coding_sync_enabled_flag               : 1;
692*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to HEVC syntax element of the same name. */
693*54e60f84SAndroid Build Coastguard Worker             uint32_t    loop_filter_across_tiles_enabled_flag          : 1;
694*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to HEVC syntax element of the same name. */
695*54e60f84SAndroid Build Coastguard Worker             uint32_t    pps_loop_filter_across_slices_enabled_flag     : 1;
696*54e60f84SAndroid Build Coastguard Worker             /** \brief A combination of HEVC syntax element of
697*54e60f84SAndroid Build Coastguard Worker              *  sps_scaling_list_data_present_flag and
698*54e60f84SAndroid Build Coastguard Worker              *  pps_scaling_list_data_present_flag
699*54e60f84SAndroid Build Coastguard Worker              *  when scaling_list_enable_flag is 0, it must be 0.
700*54e60f84SAndroid Build Coastguard Worker              */
701*54e60f84SAndroid Build Coastguard Worker             uint32_t    scaling_list_data_present_flag                 : 1;
702*54e60f84SAndroid Build Coastguard Worker             /** \brief indicate the current picture contains significant
703*54e60f84SAndroid Build Coastguard Worker              *  screen contents (text, characters, etc.) or animated image.
704*54e60f84SAndroid Build Coastguard Worker              *  GPU may want to treat them differently from normal video.
705*54e60f84SAndroid Build Coastguard Worker              *  For example, encoder may choose a small transform unit size
706*54e60f84SAndroid Build Coastguard Worker              *  and may use transform skip mode.
707*54e60f84SAndroid Build Coastguard Worker              */
708*54e60f84SAndroid Build Coastguard Worker             uint32_t    screen_content_flag                            : 1;
709*54e60f84SAndroid Build Coastguard Worker             /**
710*54e60f84SAndroid Build Coastguard Worker              *  When either weighted_pred_flag or weighted_bipred_flag is
711*54e60f84SAndroid Build Coastguard Worker              *  turned on, the flag enable_gpu_weighted_prediction requests
712*54e60f84SAndroid Build Coastguard Worker              *  GPU to determine weighted prediction factors. In this case,
713*54e60f84SAndroid Build Coastguard Worker              *  the following parameters in slice control data structure
714*54e60f84SAndroid Build Coastguard Worker              *  shall be ignored:
715*54e60f84SAndroid Build Coastguard Worker              *  luma_log2_weight_denom, delta_chroma_log2_weight_denom,
716*54e60f84SAndroid Build Coastguard Worker              *  luma_offset_l0[15], luma_offset_l1[15],
717*54e60f84SAndroid Build Coastguard Worker              *  delta_luma_weight_l0[15], delta_luma_weight_l1[15],
718*54e60f84SAndroid Build Coastguard Worker              *  chroma_offset_l0[15][2], chroma_offset_l1[15][2],
719*54e60f84SAndroid Build Coastguard Worker              *  and delta_chroma_weight_l0[15][2], delta_chroma_weight_l1[15][2].
720*54e60f84SAndroid Build Coastguard Worker              */
721*54e60f84SAndroid Build Coastguard Worker             uint32_t    enable_gpu_weighted_prediction                 : 1;
722*54e60f84SAndroid Build Coastguard Worker             /** \brief HEVC syntax element in slice segment header
723*54e60f84SAndroid Build Coastguard Worker              *  GPU uses it to generate new slice headers in slice size control.
724*54e60f84SAndroid Build Coastguard Worker              */
725*54e60f84SAndroid Build Coastguard Worker             uint32_t    no_output_of_prior_pics_flag                   : 1;
726*54e60f84SAndroid Build Coastguard Worker             uint32_t    reserved                                       : 11;
727*54e60f84SAndroid Build Coastguard Worker         } bits;
728*54e60f84SAndroid Build Coastguard Worker         uint32_t        value;
729*54e60f84SAndroid Build Coastguard Worker     } pic_fields;
730*54e60f84SAndroid Build Coastguard Worker 
731*54e60f84SAndroid Build Coastguard Worker     /** \brief When hierachical_level_plus1 > 0, hierachical_level_plus1-1 indicates
732*54e60f84SAndroid Build Coastguard Worker      *the current frame's level.when it > 0. B1, B2 setting in CodingType can be treated as B,
733*54e60f84SAndroid Build Coastguard Worker      *hirachical level is determined by this variable.When hierachical_level_plus1  == 0,
734*54e60f84SAndroid Build Coastguard Worker      *hierarchical level information still comes from coding_type.
735*54e60f84SAndroid Build Coastguard Worker      */
736*54e60f84SAndroid Build Coastguard Worker     uint8_t     hierarchical_level_plus1;
737*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
738*54e60f84SAndroid Build Coastguard Worker     uint8_t     va_byte_reserved;
739*54e60f84SAndroid Build Coastguard Worker     /** \brief SCC flags to enable/disable feature, only IBC at present.*/
740*54e60f84SAndroid Build Coastguard Worker     union {
741*54e60f84SAndroid Build Coastguard Worker         struct {
742*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the HEVC bitstream syntax element. */
743*54e60f84SAndroid Build Coastguard Worker             uint16_t    pps_curr_pic_ref_enabled_flag                  : 1;
744*54e60f84SAndroid Build Coastguard Worker             /** \brief Reserved bits for future use, must be zero */
745*54e60f84SAndroid Build Coastguard Worker             uint16_t    reserved                                       : 15;
746*54e60f84SAndroid Build Coastguard Worker         } bits;
747*54e60f84SAndroid Build Coastguard Worker         uint16_t value;
748*54e60f84SAndroid Build Coastguard Worker     } scc_fields;
749*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
750*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_HIGH - 1];
751*54e60f84SAndroid Build Coastguard Worker } VAEncPictureParameterBufferHEVC;
752*54e60f84SAndroid Build Coastguard Worker 
753*54e60f84SAndroid Build Coastguard Worker /**
754*54e60f84SAndroid Build Coastguard Worker  * \brief Slice parameter for HEVC encoding in main & main 10 profiles.
755*54e60f84SAndroid Build Coastguard Worker  *
756*54e60f84SAndroid Build Coastguard Worker  * This structure holds information for \c
757*54e60f84SAndroid Build Coastguard Worker  * slice_segment_layer_rbsp() as defined by the HEVC
758*54e60f84SAndroid Build Coastguard Worker  * specification.
759*54e60f84SAndroid Build Coastguard Worker  *
760*54e60f84SAndroid Build Coastguard Worker  * If packed slice headers mode is used, i.e. if the encoding
761*54e60f84SAndroid Build Coastguard Worker  * pipeline was configured with the #VA_ENC_PACKED_HEADER_SLICE
762*54e60f84SAndroid Build Coastguard Worker  * flag, then the driver expects two more buffers to be provided to
763*54e60f84SAndroid Build Coastguard Worker  * the same \c vaRenderPicture() as this buffer:
764*54e60f84SAndroid Build Coastguard Worker  * - a #VAEncPackedHeaderParameterBuffer with type set to
765*54e60f84SAndroid Build Coastguard Worker  *   VAEncPackedHeaderType::VAEncPackedHeaderSlice ;
766*54e60f84SAndroid Build Coastguard Worker  * - a #VAEncPackedHeaderDataBuffer which holds the actual packed
767*54e60f84SAndroid Build Coastguard Worker  *   header data.
768*54e60f84SAndroid Build Coastguard Worker  *
769*54e60f84SAndroid Build Coastguard Worker  */
770*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncSliceParameterBufferHEVC {
771*54e60f84SAndroid Build Coastguard Worker     /** \brief Starting CTU address for this slice. */
772*54e60f84SAndroid Build Coastguard Worker     uint32_t        slice_segment_address;
773*54e60f84SAndroid Build Coastguard Worker     /** \brief Number of CTUs in this slice. */
774*54e60f84SAndroid Build Coastguard Worker     uint32_t        num_ctu_in_slice;
775*54e60f84SAndroid Build Coastguard Worker 
776*54e60f84SAndroid Build Coastguard Worker     /** \brief Slice type.
777*54e60f84SAndroid Build Coastguard Worker      *  Corresponds to HEVC syntax element of the same name.
778*54e60f84SAndroid Build Coastguard Worker      */
779*54e60f84SAndroid Build Coastguard Worker     uint8_t         slice_type;
780*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element. */
781*54e60f84SAndroid Build Coastguard Worker     uint8_t         slice_pic_parameter_set_id;
782*54e60f84SAndroid Build Coastguard Worker 
783*54e60f84SAndroid Build Coastguard Worker     /** \brief Maximum reference index for reference picture list 0.
784*54e60f84SAndroid Build Coastguard Worker      *  Range: 0 to 14, inclusive.
785*54e60f84SAndroid Build Coastguard Worker      */
786*54e60f84SAndroid Build Coastguard Worker     uint8_t         num_ref_idx_l0_active_minus1;
787*54e60f84SAndroid Build Coastguard Worker     /** \brief Maximum reference index for reference picture list 1.
788*54e60f84SAndroid Build Coastguard Worker      *  Range: 0 to 14, inclusive.
789*54e60f84SAndroid Build Coastguard Worker      */
790*54e60f84SAndroid Build Coastguard Worker     uint8_t         num_ref_idx_l1_active_minus1;
791*54e60f84SAndroid Build Coastguard Worker     /** \brief Reference picture list 0 (for P slices). */
792*54e60f84SAndroid Build Coastguard Worker     VAPictureHEVC   ref_pic_list0[15];
793*54e60f84SAndroid Build Coastguard Worker     /** \brief Reference picture list 1 (for B slices). */
794*54e60f84SAndroid Build Coastguard Worker     VAPictureHEVC   ref_pic_list1[15];
795*54e60f84SAndroid Build Coastguard Worker     /**@}*/
796*54e60f84SAndroid Build Coastguard Worker 
797*54e60f84SAndroid Build Coastguard Worker     /** @name pred_weight_table() */
798*54e60f84SAndroid Build Coastguard Worker     /**@{*/
799*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element. */
800*54e60f84SAndroid Build Coastguard Worker     uint8_t         luma_log2_weight_denom;
801*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element. */
802*54e60f84SAndroid Build Coastguard Worker     int8_t          delta_chroma_log2_weight_denom;
803*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element. */
804*54e60f84SAndroid Build Coastguard Worker     int8_t          delta_luma_weight_l0[15];
805*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element. */
806*54e60f84SAndroid Build Coastguard Worker     int8_t          luma_offset_l0[15];
807*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element. */
808*54e60f84SAndroid Build Coastguard Worker     int8_t          delta_chroma_weight_l0[15][2];
809*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC spec variable ChromaOffsetL0[]. */
810*54e60f84SAndroid Build Coastguard Worker     int8_t          chroma_offset_l0[15][2];
811*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element. */
812*54e60f84SAndroid Build Coastguard Worker     int8_t          delta_luma_weight_l1[15];
813*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element. */
814*54e60f84SAndroid Build Coastguard Worker     int8_t          luma_offset_l1[15];
815*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element. */
816*54e60f84SAndroid Build Coastguard Worker     int8_t          delta_chroma_weight_l1[15][2];
817*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC spec variable ChromaOffsetL1[]. */
818*54e60f84SAndroid Build Coastguard Worker     int8_t          chroma_offset_l1[15][2];
819*54e60f84SAndroid Build Coastguard Worker     /**@}*/
820*54e60f84SAndroid Build Coastguard Worker 
821*54e60f84SAndroid Build Coastguard Worker     /** \brief Corresponds to HEVC spec variable MaxNumMergeCand.
822*54e60f84SAndroid Build Coastguard Worker      *  Range: [1..5].
823*54e60f84SAndroid Build Coastguard Worker      */
824*54e60f84SAndroid Build Coastguard Worker     uint8_t         max_num_merge_cand;
825*54e60f84SAndroid Build Coastguard Worker 
826*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element. */
827*54e60f84SAndroid Build Coastguard Worker     int8_t          slice_qp_delta;
828*54e60f84SAndroid Build Coastguard Worker 
829*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element. */
830*54e60f84SAndroid Build Coastguard Worker     int8_t          slice_cb_qp_offset;
831*54e60f84SAndroid Build Coastguard Worker 
832*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element. */
833*54e60f84SAndroid Build Coastguard Worker     int8_t          slice_cr_qp_offset;
834*54e60f84SAndroid Build Coastguard Worker 
835*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element. */
836*54e60f84SAndroid Build Coastguard Worker     int8_t          slice_beta_offset_div2;
837*54e60f84SAndroid Build Coastguard Worker 
838*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the HEVC bitstream syntax element. */
839*54e60f84SAndroid Build Coastguard Worker     int8_t          slice_tc_offset_div2;
840*54e60f84SAndroid Build Coastguard Worker 
841*54e60f84SAndroid Build Coastguard Worker     union {
842*54e60f84SAndroid Build Coastguard Worker         struct {
843*54e60f84SAndroid Build Coastguard Worker             /** \brief Indicates if current slice is the last one in picture */
844*54e60f84SAndroid Build Coastguard Worker             uint32_t    last_slice_of_pic_flag                         : 1;
845*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to HEVC syntax element of the same name */
846*54e60f84SAndroid Build Coastguard Worker             uint32_t    dependent_slice_segment_flag                   : 1;
847*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to HEVC syntax element of the same name */
848*54e60f84SAndroid Build Coastguard Worker             uint32_t    colour_plane_id                                : 2;
849*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to HEVC syntax element of the same name. */
850*54e60f84SAndroid Build Coastguard Worker             uint32_t    slice_temporal_mvp_enabled_flag                : 1;
851*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to HEVC syntax element of the same name. */
852*54e60f84SAndroid Build Coastguard Worker             uint32_t    slice_sao_luma_flag                            : 1;
853*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to HEVC syntax element of the same name. */
854*54e60f84SAndroid Build Coastguard Worker             uint32_t    slice_sao_chroma_flag                          : 1;
855*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to HEVC syntax element of the same name.
856*54e60f84SAndroid Build Coastguard Worker              *  if this flag is set to 0, num_ref_idx_l0_active_minus1 should be
857*54e60f84SAndroid Build Coastguard Worker              *  equal to num_ref_idx_l0_default_active_minus1
858*54e60f84SAndroid Build Coastguard Worker              *  as well as for that for l1.
859*54e60f84SAndroid Build Coastguard Worker              */
860*54e60f84SAndroid Build Coastguard Worker             uint32_t    num_ref_idx_active_override_flag               : 1;
861*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to HEVC syntax element of the same name. */
862*54e60f84SAndroid Build Coastguard Worker             uint32_t    mvd_l1_zero_flag                               : 1;
863*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to HEVC syntax element of the same name. */
864*54e60f84SAndroid Build Coastguard Worker             uint32_t    cabac_init_flag                             : 1;
865*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to HEVC syntax element of the same name. */
866*54e60f84SAndroid Build Coastguard Worker             uint32_t    slice_deblocking_filter_disabled_flag          : 2;
867*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to HEVC syntax element of the same name. */
868*54e60f84SAndroid Build Coastguard Worker             uint32_t    slice_loop_filter_across_slices_enabled_flag   : 1;
869*54e60f84SAndroid Build Coastguard Worker             /** \brief Corresponds to HEVC syntax element of the same name. */
870*54e60f84SAndroid Build Coastguard Worker             uint32_t    collocated_from_l0_flag                        : 1;
871*54e60f84SAndroid Build Coastguard Worker         } bits;
872*54e60f84SAndroid Build Coastguard Worker         uint32_t        value;
873*54e60f84SAndroid Build Coastguard Worker     } slice_fields;
874*54e60f84SAndroid Build Coastguard Worker 
875*54e60f84SAndroid Build Coastguard Worker 
876*54e60f84SAndroid Build Coastguard Worker     /**
877*54e60f84SAndroid Build Coastguard Worker      * \brief bit offset of syntax element pred_weight_table() in slice segment header.
878*54e60f84SAndroid Build Coastguard Worker      * It aligns with the starting position of the current packed slice header.
879*54e60f84SAndroid Build Coastguard Worker      * It is used when encoder prefers to override the weighted prediction parameters passed in
880*54e60f84SAndroid Build Coastguard Worker      * from application.
881*54e60f84SAndroid Build Coastguard Worker      * Please refer to enable_gpu_weighted_prediction in VAEncPictureParameterBufferHEVC.
882*54e60f84SAndroid Build Coastguard Worker      */
883*54e60f84SAndroid Build Coastguard Worker     uint32_t                pred_weight_table_bit_offset;
884*54e60f84SAndroid Build Coastguard Worker     /**
885*54e60f84SAndroid Build Coastguard Worker      * \brief bit length of syntax element pred_weight_table() in slice segment header.
886*54e60f84SAndroid Build Coastguard Worker      * It is used when encoder prefers to override the weighted prediction parameters passed in
887*54e60f84SAndroid Build Coastguard Worker      * from application.
888*54e60f84SAndroid Build Coastguard Worker      * Please refer to enable_gpu_weighted_prediction in VAEncPictureParameterBufferHEVC.
889*54e60f84SAndroid Build Coastguard Worker     */
890*54e60f84SAndroid Build Coastguard Worker     uint32_t                pred_weight_table_bit_length;
891*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
892*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_MEDIUM - 2];
893*54e60f84SAndroid Build Coastguard Worker     /**@}*/
894*54e60f84SAndroid Build Coastguard Worker } VAEncSliceParameterBufferHEVC;
895*54e60f84SAndroid Build Coastguard Worker 
896*54e60f84SAndroid Build Coastguard Worker /**
897*54e60f84SAndroid Build Coastguard Worker  * \brief HEVC Quantization Matrix Buffer Structure
898*54e60f84SAndroid Build Coastguard Worker  *
899*54e60f84SAndroid Build Coastguard Worker  * This structure is sent once per frame,
900*54e60f84SAndroid Build Coastguard Worker  * and only when scaling_list_enabled_flag = 1 and scaling_list_data_present_flag = 1.
901*54e60f84SAndroid Build Coastguard Worker  * Only when scaling_list_data_present_flag = 1, app still
902*54e60f84SAndroid Build Coastguard Worker  * needs to send in this structure. When scaling_list_enabled_flag = 1 and
903*54e60f84SAndroid Build Coastguard Worker  * scaling_list_data_present_flag = 0, driver is responsible to generate
904*54e60f84SAndroid Build Coastguard Worker  * the default scaling list values.
905*54e60f84SAndroid Build Coastguard Worker  *
906*54e60f84SAndroid Build Coastguard Worker  * Matrix entries are in raster scan order which follows HEVC spec.
907*54e60f84SAndroid Build Coastguard Worker  */
908*54e60f84SAndroid Build Coastguard Worker typedef struct _VAQMatrixBufferHEVC {
909*54e60f84SAndroid Build Coastguard Worker     /**
910*54e60f84SAndroid Build Coastguard Worker      * \brief scaling lists,
911*54e60f84SAndroid Build Coastguard Worker      * corresponds to same HEVC spec syntax element
912*54e60f84SAndroid Build Coastguard Worker      * ScalingList[ i ][ MatrixID ][ j ].
913*54e60f84SAndroid Build Coastguard Worker      *
914*54e60f84SAndroid Build Coastguard Worker      * \brief 4x4 scaling,
915*54e60f84SAndroid Build Coastguard Worker      */
916*54e60f84SAndroid Build Coastguard Worker     uint8_t             scaling_lists_4x4[3][2][16];
917*54e60f84SAndroid Build Coastguard Worker     /**
918*54e60f84SAndroid Build Coastguard Worker      * \brief 8x8 scaling,
919*54e60f84SAndroid Build Coastguard Worker      */
920*54e60f84SAndroid Build Coastguard Worker     uint8_t             scaling_lists_8x8[3][2][64];
921*54e60f84SAndroid Build Coastguard Worker     /**
922*54e60f84SAndroid Build Coastguard Worker      * \brief 16x16 scaling,
923*54e60f84SAndroid Build Coastguard Worker      * correspongs i = 2, MatrixID is in the range of 0 to 5,
924*54e60f84SAndroid Build Coastguard Worker      * inclusive. And j is in the range of 0 to 63, inclusive.
925*54e60f84SAndroid Build Coastguard Worker      */
926*54e60f84SAndroid Build Coastguard Worker     uint8_t             scaling_lists_16x16[3][2][64];
927*54e60f84SAndroid Build Coastguard Worker     /**
928*54e60f84SAndroid Build Coastguard Worker      * \brief 32x32 scaling,
929*54e60f84SAndroid Build Coastguard Worker      * correspongs i = 3, MatrixID is in the range of 0 to 1,
930*54e60f84SAndroid Build Coastguard Worker      * inclusive. And j is in the range of 0 to 63, inclusive.
931*54e60f84SAndroid Build Coastguard Worker      */
932*54e60f84SAndroid Build Coastguard Worker     uint8_t             scaling_lists_32x32[2][64];
933*54e60f84SAndroid Build Coastguard Worker     /**
934*54e60f84SAndroid Build Coastguard Worker      * \brief DC values of the 16x16 scaling lists,
935*54e60f84SAndroid Build Coastguard Worker      * corresponds to HEVC spec syntax
936*54e60f84SAndroid Build Coastguard Worker      * scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8
937*54e60f84SAndroid Build Coastguard Worker      * with sizeID = 2 and matrixID in the range of 0 to 5, inclusive.
938*54e60f84SAndroid Build Coastguard Worker      */
939*54e60f84SAndroid Build Coastguard Worker     uint8_t             scaling_list_dc_16x16[3][2];
940*54e60f84SAndroid Build Coastguard Worker     /**
941*54e60f84SAndroid Build Coastguard Worker      * \brief DC values of the 32x32 scaling lists,
942*54e60f84SAndroid Build Coastguard Worker      * corresponds to HEVC spec syntax
943*54e60f84SAndroid Build Coastguard Worker      * scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8
944*54e60f84SAndroid Build Coastguard Worker      * with sizeID = 3 and matrixID in the range of 0 to 1, inclusive.
945*54e60f84SAndroid Build Coastguard Worker      */
946*54e60f84SAndroid Build Coastguard Worker     uint8_t             scaling_list_dc_32x32[2];
947*54e60f84SAndroid Build Coastguard Worker 
948*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
949*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
950*54e60f84SAndroid Build Coastguard Worker } VAQMatrixBufferHEVC;
951*54e60f84SAndroid Build Coastguard Worker 
952*54e60f84SAndroid Build Coastguard Worker /**@}*/
953*54e60f84SAndroid Build Coastguard Worker 
954*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus
955*54e60f84SAndroid Build Coastguard Worker }
956*54e60f84SAndroid Build Coastguard Worker #endif
957*54e60f84SAndroid Build Coastguard Worker 
958*54e60f84SAndroid Build Coastguard Worker #endif /* VA_ENC_HEVC_H */
959