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