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