1*54e60f84SAndroid Build Coastguard Worker /* 2*54e60f84SAndroid Build Coastguard Worker * Copyright (c) 2021 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_av1.h 27*54e60f84SAndroid Build Coastguard Worker * \brief AV1 encoding API 28*54e60f84SAndroid Build Coastguard Worker * 29*54e60f84SAndroid Build Coastguard Worker * This file contains the \ref api_enc_av1 "AV1 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_AV1_H 34*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_AV1_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_av1 AV1 encoding API 44*54e60f84SAndroid Build Coastguard Worker * 45*54e60f84SAndroid Build Coastguard Worker * This AV1 encoding API supports 8-bit/10bit 420 format only. 46*54e60f84SAndroid Build Coastguard Worker * 47*54e60f84SAndroid Build Coastguard Worker * @{ 48*54e60f84SAndroid Build Coastguard Worker */ 49*54e60f84SAndroid Build Coastguard Worker 50*54e60f84SAndroid Build Coastguard Worker /** \brief Attribute value for VAConfigAttribEncAV1. 51*54e60f84SAndroid Build Coastguard Worker * 52*54e60f84SAndroid Build Coastguard Worker * This attribute decribes the supported features of an AV1 53*54e60f84SAndroid Build Coastguard Worker * encoder configuration. 54*54e60f84SAndroid Build Coastguard Worker * 55*54e60f84SAndroid Build Coastguard Worker * All of the field values in this attribute are VA_FEATURE_* values, 56*54e60f84SAndroid Build Coastguard Worker * indicating support for the corresponding feature. 57*54e60f84SAndroid Build Coastguard Worker * 58*54e60f84SAndroid Build Coastguard Worker */ 59*54e60f84SAndroid Build Coastguard Worker typedef union _VAConfigAttribValEncAV1 { 60*54e60f84SAndroid Build Coastguard Worker struct { 61*54e60f84SAndroid Build Coastguard Worker /** 62*54e60f84SAndroid Build Coastguard Worker * \brief Use 128x128 superblock. 63*54e60f84SAndroid Build Coastguard Worker * 64*54e60f84SAndroid Build Coastguard Worker * Allows setting use_128x128_superblock in the SPS. 65*54e60f84SAndroid Build Coastguard Worker */ 66*54e60f84SAndroid Build Coastguard Worker uint32_t support_128x128_superblock : 2; 67*54e60f84SAndroid Build Coastguard Worker /** 68*54e60f84SAndroid Build Coastguard Worker * \brief Intra filter. 69*54e60f84SAndroid Build Coastguard Worker * Allows setting enable_filter_intra in the SPS. 70*54e60f84SAndroid Build Coastguard Worker */ 71*54e60f84SAndroid Build Coastguard Worker uint32_t support_filter_intra : 2; 72*54e60f84SAndroid Build Coastguard Worker /** 73*54e60f84SAndroid Build Coastguard Worker * \brief Intra edge filter. 74*54e60f84SAndroid Build Coastguard Worker * Allows setting enable_intra_edge_filter in the SPS. 75*54e60f84SAndroid Build Coastguard Worker */ 76*54e60f84SAndroid Build Coastguard Worker uint32_t support_intra_edge_filter : 2; 77*54e60f84SAndroid Build Coastguard Worker /** 78*54e60f84SAndroid Build Coastguard Worker * \brief Interintra compound. 79*54e60f84SAndroid Build Coastguard Worker * Allows setting enable_interintra_compound in the SPS. 80*54e60f84SAndroid Build Coastguard Worker */ 81*54e60f84SAndroid Build Coastguard Worker uint32_t support_interintra_compound : 2; 82*54e60f84SAndroid Build Coastguard Worker /** 83*54e60f84SAndroid Build Coastguard Worker * \brief Masked compound. 84*54e60f84SAndroid Build Coastguard Worker * Allows setting enable_masked_compound in the SPS. 85*54e60f84SAndroid Build Coastguard Worker */ 86*54e60f84SAndroid Build Coastguard Worker uint32_t support_masked_compound : 2; 87*54e60f84SAndroid Build Coastguard Worker /** 88*54e60f84SAndroid Build Coastguard Worker * \brief Warped motion. 89*54e60f84SAndroid Build Coastguard Worker * Allows setting enable_warped_motion in the SPS. 90*54e60f84SAndroid Build Coastguard Worker */ 91*54e60f84SAndroid Build Coastguard Worker uint32_t support_warped_motion : 2; 92*54e60f84SAndroid Build Coastguard Worker /** 93*54e60f84SAndroid Build Coastguard Worker * \brief Palette mode. 94*54e60f84SAndroid Build Coastguard Worker * Allows setting palette_mode in the PPS. 95*54e60f84SAndroid Build Coastguard Worker */ 96*54e60f84SAndroid Build Coastguard Worker uint32_t support_palette_mode : 2; 97*54e60f84SAndroid Build Coastguard Worker /** 98*54e60f84SAndroid Build Coastguard Worker * \brief Dual filter. 99*54e60f84SAndroid Build Coastguard Worker * Allows setting enable_dual_filter in the SPS. 100*54e60f84SAndroid Build Coastguard Worker */ 101*54e60f84SAndroid Build Coastguard Worker uint32_t support_dual_filter : 2; 102*54e60f84SAndroid Build Coastguard Worker /** 103*54e60f84SAndroid Build Coastguard Worker * \brief Jnt compound. 104*54e60f84SAndroid Build Coastguard Worker * Allows setting enable_jnt_comp in the SPS. 105*54e60f84SAndroid Build Coastguard Worker */ 106*54e60f84SAndroid Build Coastguard Worker uint32_t support_jnt_comp : 2; 107*54e60f84SAndroid Build Coastguard Worker /** 108*54e60f84SAndroid Build Coastguard Worker * \brief Refrence frame mvs. 109*54e60f84SAndroid Build Coastguard Worker * Allows setting enable_ref_frame_mvs in the SPS. 110*54e60f84SAndroid Build Coastguard Worker */ 111*54e60f84SAndroid Build Coastguard Worker uint32_t support_ref_frame_mvs : 2; 112*54e60f84SAndroid Build Coastguard Worker /** 113*54e60f84SAndroid Build Coastguard Worker * \brief Super resolution. 114*54e60f84SAndroid Build Coastguard Worker * Allows setting enable_superres in the SPS. 115*54e60f84SAndroid Build Coastguard Worker */ 116*54e60f84SAndroid Build Coastguard Worker uint32_t support_superres : 2; 117*54e60f84SAndroid Build Coastguard Worker /** 118*54e60f84SAndroid Build Coastguard Worker * \brief Restoration. 119*54e60f84SAndroid Build Coastguard Worker * Allows setting enable_restoration in the SPS. 120*54e60f84SAndroid Build Coastguard Worker */ 121*54e60f84SAndroid Build Coastguard Worker uint32_t support_restoration : 2; 122*54e60f84SAndroid Build Coastguard Worker /** 123*54e60f84SAndroid Build Coastguard Worker * \brief Allow intraBC. 124*54e60f84SAndroid Build Coastguard Worker * Allows setting allow_intrabc in the PPS. 125*54e60f84SAndroid Build Coastguard Worker */ 126*54e60f84SAndroid Build Coastguard Worker uint32_t support_allow_intrabc : 2; 127*54e60f84SAndroid Build Coastguard Worker /** 128*54e60f84SAndroid Build Coastguard Worker * \brief Cdef channel strength. 129*54e60f84SAndroid Build Coastguard Worker * Allows setting cdef_y_strengths and cdef_uv_strengths in PPS. 130*54e60f84SAndroid Build Coastguard Worker */ 131*54e60f84SAndroid Build Coastguard Worker uint32_t support_cdef_channel_strength : 2; 132*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bits for future, must be zero. */ 133*54e60f84SAndroid Build Coastguard Worker uint32_t reserved : 4; 134*54e60f84SAndroid Build Coastguard Worker } bits; 135*54e60f84SAndroid Build Coastguard Worker uint32_t value; 136*54e60f84SAndroid Build Coastguard Worker } VAConfigAttribValEncAV1; 137*54e60f84SAndroid Build Coastguard Worker 138*54e60f84SAndroid Build Coastguard Worker /** \brief Attribute value for VAConfigAttribEncAV1Ext1. */ 139*54e60f84SAndroid Build Coastguard Worker typedef union _VAConfigAttribValEncAV1Ext1 { 140*54e60f84SAndroid Build Coastguard Worker struct { 141*54e60f84SAndroid Build Coastguard Worker /** 142*54e60f84SAndroid Build Coastguard Worker * \brief Fields indicate which types of interpolation filter are supported. 143*54e60f84SAndroid Build Coastguard Worker * (interpolation_filter & 0x01) == 1: eight_tap filter is supported, 0: not. 144*54e60f84SAndroid Build Coastguard Worker * (interpolation_filter & 0x02) == 1: eight_tap_smooth filter is supported, 0: not. 145*54e60f84SAndroid Build Coastguard Worker * (interpolation_filter & 0x04) == 1: eight_sharp filter is supported, 0: not. 146*54e60f84SAndroid Build Coastguard Worker * (interpolation_filter & 0x08) == 1: bilinear filter is supported, 0: not. 147*54e60f84SAndroid Build Coastguard Worker * (interpolation_filter & 0x10) == 1: switchable filter is supported, 0: not. 148*54e60f84SAndroid Build Coastguard Worker */ 149*54e60f84SAndroid Build Coastguard Worker uint32_t interpolation_filter : 5; 150*54e60f84SAndroid Build Coastguard Worker /** 151*54e60f84SAndroid Build Coastguard Worker * \brief Min segmentId block size accepted. 152*54e60f84SAndroid Build Coastguard Worker * Application need to send seg_id_block_size in PPS equal or larger than this value. 153*54e60f84SAndroid Build Coastguard Worker */ 154*54e60f84SAndroid Build Coastguard Worker uint32_t min_segid_block_size_accepted : 8; 155*54e60f84SAndroid Build Coastguard Worker /** 156*54e60f84SAndroid Build Coastguard Worker * \brief Type of segment feature supported. 157*54e60f84SAndroid Build Coastguard Worker * (segment_feature_support & 0x01) == 1: SEG_LVL_ALT_Q is supported, 0: not. 158*54e60f84SAndroid Build Coastguard Worker * (segment_feature_support & 0x02) == 1: SEG_LVL_ALT_LF_Y_V is supported, 0: not. 159*54e60f84SAndroid Build Coastguard Worker * (segment_feature_support & 0x04) == 1: SEG_LVL_ALT_LF_Y_H is supported, 0: not. 160*54e60f84SAndroid Build Coastguard Worker * (segment_feature_support & 0x08) == 1: SEG_LVL_ALT_LF_U is supported, 0: not. 161*54e60f84SAndroid Build Coastguard Worker * (segment_feature_support & 0x10) == 1: SEG_LVL_ALT_LF_V is supported, 0: not. 162*54e60f84SAndroid Build Coastguard Worker * (segment_feature_support & 0x20) == 1: SEG_LVL_REF_FRAME is supported, 0: not. 163*54e60f84SAndroid Build Coastguard Worker * (segment_feature_support & 0x40) == 1: SEG_LVL_SKIP is supported, 0: not. 164*54e60f84SAndroid Build Coastguard Worker * (segment_feature_support & 0x80) == 1: SEG_LVL_GLOBALMV is supported, 0: not. 165*54e60f84SAndroid Build Coastguard Worker */ 166*54e60f84SAndroid Build Coastguard Worker uint32_t segment_feature_support : 8; 167*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bits for future, must be zero. */ 168*54e60f84SAndroid Build Coastguard Worker uint32_t reserved : 11; 169*54e60f84SAndroid Build Coastguard Worker } bits; 170*54e60f84SAndroid Build Coastguard Worker uint32_t value; 171*54e60f84SAndroid Build Coastguard Worker } VAConfigAttribValEncAV1Ext1; 172*54e60f84SAndroid Build Coastguard Worker 173*54e60f84SAndroid Build Coastguard Worker /** \brief Attribute value for VAConfigAttribEncAV1Ext2. */ 174*54e60f84SAndroid Build Coastguard Worker typedef union _VAConfigAttribValEncAV1Ext2 { 175*54e60f84SAndroid Build Coastguard Worker struct { 176*54e60f84SAndroid Build Coastguard Worker /** 177*54e60f84SAndroid Build Coastguard Worker * \brief Tile size bytes minus1. 178*54e60f84SAndroid Build Coastguard Worker * Specify the number of bytes needed to code tile size supported. 179*54e60f84SAndroid Build Coastguard Worker * This value need to be set in frame header obu. 180*54e60f84SAndroid Build Coastguard Worker */ 181*54e60f84SAndroid Build Coastguard Worker uint32_t tile_size_bytes_minus1 : 2; 182*54e60f84SAndroid Build Coastguard Worker /** 183*54e60f84SAndroid Build Coastguard Worker * \brief Tile size bytes minus1. 184*54e60f84SAndroid Build Coastguard Worker * Specify the fixed number of bytes needed to code syntax obu_size. 185*54e60f84SAndroid Build Coastguard Worker */ 186*54e60f84SAndroid Build Coastguard Worker uint32_t obu_size_bytes_minus1 : 2; 187*54e60f84SAndroid Build Coastguard Worker /** 188*54e60f84SAndroid Build Coastguard Worker * \brief tx_mode supported. 189*54e60f84SAndroid Build Coastguard Worker * (tx_mode_support & 0x01) == 1: ONLY_4X4 is supported, 0: not. 190*54e60f84SAndroid Build Coastguard Worker * (tx_mode_support & 0x02) == 1: TX_MODE_LARGEST is supported, 0: not. 191*54e60f84SAndroid Build Coastguard Worker * (tx_mode_support & 0x04) == 1: TX_MODE_SELECT is supported, 0: not. 192*54e60f84SAndroid Build Coastguard Worker */ 193*54e60f84SAndroid Build Coastguard Worker uint32_t tx_mode_support : 3; 194*54e60f84SAndroid Build Coastguard Worker /** 195*54e60f84SAndroid Build Coastguard Worker * \brief Max tile num minus1. 196*54e60f84SAndroid Build Coastguard Worker * Specify the max number of tile supported by driver. 197*54e60f84SAndroid Build Coastguard Worker */ 198*54e60f84SAndroid Build Coastguard Worker uint32_t max_tile_num_minus1 : 13; 199*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bits for future, must be zero. */ 200*54e60f84SAndroid Build Coastguard Worker uint32_t reserved : 12; 201*54e60f84SAndroid Build Coastguard Worker } bits; 202*54e60f84SAndroid Build Coastguard Worker uint32_t value; 203*54e60f84SAndroid Build Coastguard Worker } VAConfigAttribValEncAV1Ext2; 204*54e60f84SAndroid Build Coastguard Worker 205*54e60f84SAndroid Build Coastguard Worker /** 206*54e60f84SAndroid Build Coastguard Worker * \brief Packed header types specific to AV1 encoding. 207*54e60f84SAndroid Build Coastguard Worker * 208*54e60f84SAndroid Build Coastguard Worker * Types of packed headers generally used for AV1 encoding. 209*54e60f84SAndroid Build Coastguard Worker * 210*54e60f84SAndroid Build Coastguard Worker */ 211*54e60f84SAndroid Build Coastguard Worker typedef enum { 212*54e60f84SAndroid Build Coastguard Worker /** 213*54e60f84SAndroid Build Coastguard Worker * \brief Packed Sequence Parameter Set (SPS). 214*54e60f84SAndroid Build Coastguard Worker * 215*54e60f84SAndroid Build Coastguard Worker * The corresponding packed header data buffer shall contain the 216*54e60f84SAndroid Build Coastguard Worker * complete sequence_header_obu() syntax element. 217*54e60f84SAndroid Build Coastguard Worker * 218*54e60f84SAndroid Build Coastguard Worker */ 219*54e60f84SAndroid Build Coastguard Worker VAEncPackedHeaderAV1_SPS = VAEncPackedHeaderSequence, 220*54e60f84SAndroid Build Coastguard Worker /** 221*54e60f84SAndroid Build Coastguard Worker * \brief Packed Picture Parameter Set (PPS). 222*54e60f84SAndroid Build Coastguard Worker * 223*54e60f84SAndroid Build Coastguard Worker * The corresponding packed header data buffer shall contain the 224*54e60f84SAndroid Build Coastguard Worker * complete frame_header_obu() syntax element. 225*54e60f84SAndroid Build Coastguard Worker * 226*54e60f84SAndroid Build Coastguard Worker */ 227*54e60f84SAndroid Build Coastguard Worker VAEncPackedHeaderAV1_PPS = VAEncPackedHeaderPicture, 228*54e60f84SAndroid Build Coastguard Worker } VAEncPackedHeaderTypeAV1; 229*54e60f84SAndroid Build Coastguard Worker 230*54e60f84SAndroid Build Coastguard Worker /** 231*54e60f84SAndroid Build Coastguard Worker * \brief AV1 Encoding Sequence Parameter Buffer Structure. 232*54e60f84SAndroid Build Coastguard Worker * 233*54e60f84SAndroid Build Coastguard Worker * This structure conveys sequence level parameters. 234*54e60f84SAndroid Build Coastguard Worker * 235*54e60f84SAndroid Build Coastguard Worker */ 236*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncSequenceParameterBufferAV1 { 237*54e60f84SAndroid Build Coastguard Worker /** \brief AV1 profile setting. 238*54e60f84SAndroid Build Coastguard Worker * value range [0..2]. 239*54e60f84SAndroid Build Coastguard Worker */ 240*54e60f84SAndroid Build Coastguard Worker uint8_t seq_profile; 241*54e60f84SAndroid Build Coastguard Worker 242*54e60f84SAndroid Build Coastguard Worker /** \brief Level Setting of current operation point. 243*54e60f84SAndroid Build Coastguard Worker * value range [0..23]. 244*54e60f84SAndroid Build Coastguard Worker */ 245*54e60f84SAndroid Build Coastguard Worker uint8_t seq_level_idx; 246*54e60f84SAndroid Build Coastguard Worker 247*54e60f84SAndroid Build Coastguard Worker /** \brief Tier Setting of current operation point. 248*54e60f84SAndroid Build Coastguard Worker * value range [0..1]. 249*54e60f84SAndroid Build Coastguard Worker */ 250*54e60f84SAndroid Build Coastguard Worker uint8_t seq_tier; 251*54e60f84SAndroid Build Coastguard Worker 252*54e60f84SAndroid Build Coastguard Worker /** \brief Indicates whether or not the encoding is in dyadic hierarchical GOP structure. 253*54e60f84SAndroid Build Coastguard Worker * value range [0..1]. 254*54e60f84SAndroid Build Coastguard Worker */ 255*54e60f84SAndroid Build Coastguard Worker uint8_t hierarchical_flag; 256*54e60f84SAndroid Build Coastguard Worker 257*54e60f84SAndroid Build Coastguard Worker /** \brief Period between intra_only frames. */ 258*54e60f84SAndroid Build Coastguard Worker uint32_t intra_period; 259*54e60f84SAndroid Build Coastguard Worker 260*54e60f84SAndroid Build Coastguard Worker /** \brief Period between I/P frames. 261*54e60f84SAndroid Build Coastguard Worker * For hierarchical structure, this is the anchor frame distance. 262*54e60f84SAndroid Build Coastguard Worker */ 263*54e60f84SAndroid Build Coastguard Worker uint32_t ip_period; 264*54e60f84SAndroid Build Coastguard Worker 265*54e60f84SAndroid Build Coastguard Worker /* \brief RC related fields. RC modes are set with VAConfigAttribRateControl. */ 266*54e60f84SAndroid Build Coastguard Worker /* For AV1, CBR implies HRD conformance and VBR implies no HRD conformance. */ 267*54e60f84SAndroid Build Coastguard Worker 268*54e60f84SAndroid Build Coastguard Worker /** 269*54e60f84SAndroid Build Coastguard Worker * \brief Initial bitrate set for this sequence in CBR or VBR modes. 270*54e60f84SAndroid Build Coastguard Worker * 271*54e60f84SAndroid Build Coastguard Worker * This field represents the initial bitrate value for CBR mode or 272*54e60f84SAndroid Build Coastguard Worker * initial max bitrate value for VBR mode in this sequence. 273*54e60f84SAndroid Build Coastguard Worker * i.e. if the encoder pipeline was created with a #VAConfigAttribRateControl 274*54e60f84SAndroid Build Coastguard Worker * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. 275*54e60f84SAndroid Build Coastguard Worker * 276*54e60f84SAndroid Build Coastguard Worker * The bitrate can be modified later on through 277*54e60f84SAndroid Build Coastguard Worker * #VAEncMiscParameterRateControl buffers. 278*54e60f84SAndroid Build Coastguard Worker */ 279*54e60f84SAndroid Build Coastguard Worker uint32_t bits_per_second; 280*54e60f84SAndroid Build Coastguard Worker 281*54e60f84SAndroid Build Coastguard Worker union { 282*54e60f84SAndroid Build Coastguard Worker struct { 283*54e60f84SAndroid Build Coastguard Worker /** \brief Still picture encoding, no inter frame referencing. */ 284*54e60f84SAndroid Build Coastguard Worker uint32_t still_picture : 1; 285*54e60f84SAndroid Build Coastguard Worker /** \brief Force using 128x128 or 64x64 Supper block */ 286*54e60f84SAndroid Build Coastguard Worker uint32_t use_128x128_superblock : 1; 287*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 288*54e60f84SAndroid Build Coastguard Worker uint32_t enable_filter_intra : 1; 289*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 290*54e60f84SAndroid Build Coastguard Worker uint32_t enable_intra_edge_filter : 1; 291*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 292*54e60f84SAndroid Build Coastguard Worker uint32_t enable_interintra_compound : 1; 293*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 294*54e60f84SAndroid Build Coastguard Worker uint32_t enable_masked_compound : 1; 295*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 296*54e60f84SAndroid Build Coastguard Worker uint32_t enable_warped_motion : 1; 297*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 298*54e60f84SAndroid Build Coastguard Worker uint32_t enable_dual_filter : 1; 299*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 300*54e60f84SAndroid Build Coastguard Worker uint32_t enable_order_hint : 1; 301*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 302*54e60f84SAndroid Build Coastguard Worker uint32_t enable_jnt_comp : 1; 303*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 304*54e60f84SAndroid Build Coastguard Worker uint32_t enable_ref_frame_mvs : 1; 305*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 306*54e60f84SAndroid Build Coastguard Worker uint32_t enable_superres : 1; 307*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 308*54e60f84SAndroid Build Coastguard Worker uint32_t enable_cdef : 1; 309*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 310*54e60f84SAndroid Build Coastguard Worker uint32_t enable_restoration : 1; 311*54e60f84SAndroid Build Coastguard Worker /** \brief Sepcify number of bits for every channel(Y, U or V). */ 312*54e60f84SAndroid Build Coastguard Worker uint32_t bit_depth_minus8 : 3; 313*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 314*54e60f84SAndroid Build Coastguard Worker uint32_t subsampling_x : 1; 315*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 316*54e60f84SAndroid Build Coastguard Worker uint32_t subsampling_y : 1; 317*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 318*54e60f84SAndroid Build Coastguard Worker uint32_t mono_chrome : 1; 319*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero. */ 320*54e60f84SAndroid Build Coastguard Worker uint32_t reserved_bits : 12; 321*54e60f84SAndroid Build Coastguard Worker } bits; 322*54e60f84SAndroid Build Coastguard Worker uint32_t value; 323*54e60f84SAndroid Build Coastguard Worker } seq_fields; 324*54e60f84SAndroid Build Coastguard Worker 325*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. 326*54e60f84SAndroid Build Coastguard Worker * value range [0..7]. 327*54e60f84SAndroid Build Coastguard Worker */ 328*54e60f84SAndroid Build Coastguard Worker uint8_t order_hint_bits_minus_1; 329*54e60f84SAndroid Build Coastguard Worker 330*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 331*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_HIGH]; 332*54e60f84SAndroid Build Coastguard Worker } VAEncSequenceParameterBufferAV1; 333*54e60f84SAndroid Build Coastguard Worker 334*54e60f84SAndroid Build Coastguard Worker #define VA_AV1_MAX_SEGMENTS 8 335*54e60f84SAndroid Build Coastguard Worker #define VA_AV1_SEG_LVL_MAX 8 336*54e60f84SAndroid Build Coastguard Worker 337*54e60f84SAndroid Build Coastguard Worker /** 338*54e60f84SAndroid Build Coastguard Worker * \brief Segment parameters 339*54e60f84SAndroid Build Coastguard Worker */ 340*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncSegParamAV1 { 341*54e60f84SAndroid Build Coastguard Worker union { 342*54e60f84SAndroid Build Coastguard Worker struct { 343*54e60f84SAndroid Build Coastguard Worker /** \brief Indicates if segmentation is enabled in the current frame. 344*54e60f84SAndroid Build Coastguard Worker * If disabled, all the below parameters in the structure should 345*54e60f84SAndroid Build Coastguard Worker * be set to 0, and ignored by driver. 346*54e60f84SAndroid Build Coastguard Worker */ 347*54e60f84SAndroid Build Coastguard Worker uint8_t segmentation_enabled : 1; 348*54e60f84SAndroid Build Coastguard Worker 349*54e60f84SAndroid Build Coastguard Worker /** 350*54e60f84SAndroid Build Coastguard Worker * When segmentation_enabled equals 1 and segment_number > 0, 351*54e60f84SAndroid Build Coastguard Worker * this parameter equals 1 indicates the segmentation map may 352*54e60f84SAndroid Build Coastguard Worker * come from application, and that "Segment map data buffer" 353*54e60f84SAndroid Build Coastguard Worker * should be provided with populated segment_id. If equals 0, 354*54e60f84SAndroid Build Coastguard Worker * segmentation map should be inherited from a reference frame 355*54e60f84SAndroid Build Coastguard Worker * (specified by \c primary_ref_frame). When segmentation_enabled or 356*54e60f84SAndroid Build Coastguard Worker * segment_number equals 0, this parameter should be set to 0 357*54e60f84SAndroid Build Coastguard Worker * and ignored by driver. 358*54e60f84SAndroid Build Coastguard Worker */ 359*54e60f84SAndroid Build Coastguard Worker uint8_t segmentation_update_map : 1; 360*54e60f84SAndroid Build Coastguard Worker /** 361*54e60f84SAndroid Build Coastguard Worker * When segmentation_update_map equals 1, this parameter equaling 1 362*54e60f84SAndroid Build Coastguard Worker * indicates segment id per block will be determined either from 363*54e60f84SAndroid Build Coastguard Worker * reference frame or from app. Equaling 0 means segment id per block 364*54e60f84SAndroid Build Coastguard Worker * will come from app. When segmentation_temporal_update equals 0, 365*54e60f84SAndroid Build Coastguard Worker * this parameter should be set to 0 and ignored by driver. 366*54e60f84SAndroid Build Coastguard Worker */ 367*54e60f84SAndroid Build Coastguard Worker uint8_t segmentation_temporal_update : 1; 368*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero. */ 369*54e60f84SAndroid Build Coastguard Worker uint8_t reserved : 5; 370*54e60f84SAndroid Build Coastguard Worker 371*54e60f84SAndroid Build Coastguard Worker } bits; 372*54e60f84SAndroid Build Coastguard Worker uint8_t value; 373*54e60f84SAndroid Build Coastguard Worker } seg_flags; 374*54e60f84SAndroid Build Coastguard Worker 375*54e60f84SAndroid Build Coastguard Worker /** 376*54e60f84SAndroid Build Coastguard Worker * If segmentation_enabled equals 1, this parameter indicates 377*54e60f84SAndroid Build Coastguard Worker * the number of segments conveyed through VAAPI. In this case, 378*54e60f84SAndroid Build Coastguard Worker * if segment_number equals 0, it will force the driver to determine 379*54e60f84SAndroid Build Coastguard Worker * how many segments would be created as well as the segmentation map 380*54e60f84SAndroid Build Coastguard Worker * to be generated. Also the driver shall write the segmentation_params() 381*54e60f84SAndroid Build Coastguard Worker * syntax in the uncompressed header at \c bit_offset_segmentation (back-annotation). 382*54e60f84SAndroid Build Coastguard Worker * In application, the rest parameters in this structure should be all 383*54e60f84SAndroid Build Coastguard Worker * set to 0 and ignored by driver. And app should NOT send the 384*54e60f84SAndroid Build Coastguard Worker * "Segment map data buffer". In packed uncompressed header 385*54e60f84SAndroid Build Coastguard Worker * bitstream, app should write syntax element segmentation_enabled 386*54e60f84SAndroid Build Coastguard Worker * as 0 and segmentation_params() should be only 1-bit-long. 387*54e60f84SAndroid Build Coastguard Worker * If segment_number > 0, and segmentation_update_map = 1, app should provide 388*54e60f84SAndroid Build Coastguard Worker * the "Segment map data buffer" and populate the rest of the 389*54e60f84SAndroid Build Coastguard Worker * current data structure. And that underline encoder would honor 390*54e60f84SAndroid Build Coastguard Worker * the segmentation parameters feature_data[0..segment_number-1][] 391*54e60f84SAndroid Build Coastguard Worker * and feature_mask[0..segment_number-1], etc. 392*54e60f84SAndroid Build Coastguard Worker * Value range [0..8]. 393*54e60f84SAndroid Build Coastguard Worker */ 394*54e60f84SAndroid Build Coastguard Worker uint8_t segment_number; 395*54e60f84SAndroid Build Coastguard Worker 396*54e60f84SAndroid Build Coastguard Worker /** \brief segment parameters. 397*54e60f84SAndroid Build Coastguard Worker * feature_data[][] is equivalent to variable FeatureData[][] in spec, 398*54e60f84SAndroid Build Coastguard Worker * which is after clip3() operation. 399*54e60f84SAndroid Build Coastguard Worker * Clip3(x, y, z) = (z<x)? x : ((z > y)? y : z); 400*54e60f84SAndroid Build Coastguard Worker * The limit is defined in Segmentation_Feature_Max[ SEG_LVL_MAX ] = { 401*54e60f84SAndroid Build Coastguard Worker * 255, MAX_LOOP_FILTER, MAX_LOOP_FILTER, MAX_LOOP_FILTER, 402*54e60f84SAndroid Build Coastguard Worker * MAX_LOOP_FILTER, 7, 0, 0 } 403*54e60f84SAndroid Build Coastguard Worker */ 404*54e60f84SAndroid Build Coastguard Worker int16_t feature_data[VA_AV1_MAX_SEGMENTS][VA_AV1_SEG_LVL_MAX]; 405*54e60f84SAndroid Build Coastguard Worker 406*54e60f84SAndroid Build Coastguard Worker /** \brief Bit field to indicate each feature is enabled or not per 407*54e60f84SAndroid Build Coastguard Worker * segment_id. Each bit is the feature_id. 408*54e60f84SAndroid Build Coastguard Worker */ 409*54e60f84SAndroid Build Coastguard Worker uint8_t feature_mask[VA_AV1_MAX_SEGMENTS]; 410*54e60f84SAndroid Build Coastguard Worker 411*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero. */ 412*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_LOW]; 413*54e60f84SAndroid Build Coastguard Worker } VAEncSegParamAV1; 414*54e60f84SAndroid Build Coastguard Worker 415*54e60f84SAndroid Build Coastguard Worker /** 416*54e60f84SAndroid Build Coastguard Worker * \brief Segment map data buffer. 417*54e60f84SAndroid Build Coastguard Worker * 418*54e60f84SAndroid Build Coastguard Worker * This buffer is optional depending on the value of av1_segments.segmentation_enabled. 419*54e60f84SAndroid Build Coastguard Worker * If av1_segments.segmentation_enabled in the picture parameters equals 1, 420*54e60f84SAndroid Build Coastguard Worker * and RateControlMethod is not CQP and this surface is not provided by App, 421*54e60f84SAndroid Build Coastguard Worker * the encoder will determine the per block segmentation map. In this case, 422*54e60f84SAndroid Build Coastguard Worker * App should not provide the segmentation parameter data structure 423*54e60f84SAndroid Build Coastguard Worker * in frame header as well. If av1_segments.segmentation_enabled equals 1 424*54e60f84SAndroid Build Coastguard Worker * and the segmentation map buffer is provided, app should embed the 425*54e60f84SAndroid Build Coastguard Worker * segmentation info in frame header, populate the VAEncSegParamAV1 structure with 426*54e60f84SAndroid Build Coastguard Worker * #VAEncMacroblockMapBufferType and the driver as well as the underline encoder 427*54e60f84SAndroid Build Coastguard Worker * should honor what is given by the app. 428*54e60f84SAndroid Build Coastguard Worker */ 429*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncSegMapBufferAV1 { 430*54e60f84SAndroid Build Coastguard Worker /** \brief Segment map data size. */ 431*54e60f84SAndroid Build Coastguard Worker uint32_t segmentMapDataSize; 432*54e60f84SAndroid Build Coastguard Worker 433*54e60f84SAndroid Build Coastguard Worker /** 434*54e60f84SAndroid Build Coastguard Worker * \brief Segment map. 435*54e60f84SAndroid Build Coastguard Worker * Size of this map is indicated by \ref segmentMapDataSize and each element 436*54e60f84SAndroid Build Coastguard Worker * in this map contains the segment id of a particular block. 437*54e60f84SAndroid Build Coastguard Worker * The element is indexed by raster scan order. 438*54e60f84SAndroid Build Coastguard Worker * The value of each entry should be in the range [0..7], inclusive. 439*54e60f84SAndroid Build Coastguard Worker */ 440*54e60f84SAndroid Build Coastguard Worker uint8_t *pSegmentMap; 441*54e60f84SAndroid Build Coastguard Worker } VAEncSegMapBufferAV1; 442*54e60f84SAndroid Build Coastguard Worker 443*54e60f84SAndroid Build Coastguard Worker typedef enum { 444*54e60f84SAndroid Build Coastguard Worker /** \brief Identity transformation, 0-parameter. */ 445*54e60f84SAndroid Build Coastguard Worker VAAV1EncTransformationIdentity = 0, 446*54e60f84SAndroid Build Coastguard Worker /** \brief Translational motion, 2-parameter. */ 447*54e60f84SAndroid Build Coastguard Worker VAAV1EncTransformationTranslation = 1, 448*54e60f84SAndroid Build Coastguard Worker /** \brief Simplified affine with rotation + zoom only, 4-parameter. */ 449*54e60f84SAndroid Build Coastguard Worker VAAV1EncTransformationRotzoom = 2, 450*54e60f84SAndroid Build Coastguard Worker /** \brief Affine, 6-parameter. */ 451*54e60f84SAndroid Build Coastguard Worker VAAV1EncTransformationAffine = 3, 452*54e60f84SAndroid Build Coastguard Worker /** \brief Transformation count. */ 453*54e60f84SAndroid Build Coastguard Worker VAAV1EncTransformationCount 454*54e60f84SAndroid Build Coastguard Worker } VAEncTransformationTypeAV1; 455*54e60f84SAndroid Build Coastguard Worker 456*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncWarpedMotionParamsAV1 { 457*54e60f84SAndroid Build Coastguard Worker 458*54e60f84SAndroid Build Coastguard Worker /** \brief Specify the type of warped motion. */ 459*54e60f84SAndroid Build Coastguard Worker VAEncTransformationTypeAV1 wmtype; 460*54e60f84SAndroid Build Coastguard Worker 461*54e60f84SAndroid Build Coastguard Worker /** \brief Specify warp motion parameters. 462*54e60f84SAndroid Build Coastguard Worker * wm.wmmat[] corresponds to gm_params[][] in spec. 463*54e60f84SAndroid Build Coastguard Worker * Details in AV1 spec section 5.9.24 or refer to libaom code 464*54e60f84SAndroid Build Coastguard Worker * https://aomedia.googlesource.com/aom/+/refs/heads/master/av1/decoder/decodeframe.c. 465*54e60f84SAndroid Build Coastguard Worker */ 466*54e60f84SAndroid Build Coastguard Worker int32_t wmmat[8]; 467*54e60f84SAndroid Build Coastguard Worker 468*54e60f84SAndroid Build Coastguard Worker /** \brief Valid or invalid on affine set. */ 469*54e60f84SAndroid Build Coastguard Worker uint8_t invalid; 470*54e60f84SAndroid Build Coastguard Worker 471*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero. */ 472*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_LOW]; 473*54e60f84SAndroid Build Coastguard Worker 474*54e60f84SAndroid Build Coastguard Worker } VAEncWarpedMotionParamsAV1; 475*54e60f84SAndroid Build Coastguard Worker 476*54e60f84SAndroid Build Coastguard Worker /** 477*54e60f84SAndroid Build Coastguard Worker * \brief Reference frame control. 478*54e60f84SAndroid Build Coastguard Worker * 479*54e60f84SAndroid Build Coastguard Worker * Suggest which frame to be used as reference along with preferred search order. 480*54e60f84SAndroid Build Coastguard Worker * 481*54e60f84SAndroid Build Coastguard Worker * search_idx#: index into ref_frame_idx[] to indicate that frame will be included 482*54e60f84SAndroid Build Coastguard Worker * in the reference list if value in range [1..7]. Invalid when value is 0. 483*54e60f84SAndroid Build Coastguard Worker * The order of the search_idx# indicates the preferred search order. 484*54e60f84SAndroid Build Coastguard Worker * 485*54e60f84SAndroid Build Coastguard Worker */ 486*54e60f84SAndroid Build Coastguard Worker typedef union { 487*54e60f84SAndroid Build Coastguard Worker struct { 488*54e60f84SAndroid Build Coastguard Worker /** 489*54e60f84SAndroid Build Coastguard Worker * \brief Value used as index into ref_frame_idx[] to indicate that frame 490*54e60f84SAndroid Build Coastguard Worker * will be included in the reference list. 491*54e60f84SAndroid Build Coastguard Worker * valid value range: [1..7], invalid when value is 0. 492*54e60f84SAndroid Build Coastguard Worker */ 493*54e60f84SAndroid Build Coastguard Worker uint32_t search_idx0 : 3; 494*54e60f84SAndroid Build Coastguard Worker /** 495*54e60f84SAndroid Build Coastguard Worker * \brief Value used as index into ref_frame_idx[] to indicate that frame 496*54e60f84SAndroid Build Coastguard Worker * will be included in the reference list. 497*54e60f84SAndroid Build Coastguard Worker * valid value range: [1..7], invalid when value is 0. 498*54e60f84SAndroid Build Coastguard Worker */ 499*54e60f84SAndroid Build Coastguard Worker uint32_t search_idx1 : 3; 500*54e60f84SAndroid Build Coastguard Worker /** 501*54e60f84SAndroid Build Coastguard Worker * \brief Value used as index into ref_frame_idx[] to indicate that frame 502*54e60f84SAndroid Build Coastguard Worker * will be included in the reference list. 503*54e60f84SAndroid Build Coastguard Worker * valid value range: [1..7], invalid when value is 0. 504*54e60f84SAndroid Build Coastguard Worker */ 505*54e60f84SAndroid Build Coastguard Worker uint32_t search_idx2 : 3; 506*54e60f84SAndroid Build Coastguard Worker /** 507*54e60f84SAndroid Build Coastguard Worker * \brief Value used as index into ref_frame_idx[] to indicate that frame 508*54e60f84SAndroid Build Coastguard Worker * will be included in the reference list. 509*54e60f84SAndroid Build Coastguard Worker * valid value range: [1..7], invalid when value is 0. 510*54e60f84SAndroid Build Coastguard Worker */ 511*54e60f84SAndroid Build Coastguard Worker uint32_t search_idx3 : 3; 512*54e60f84SAndroid Build Coastguard Worker /** 513*54e60f84SAndroid Build Coastguard Worker * \brief Value used as index into ref_frame_idx[] to indicate that frame 514*54e60f84SAndroid Build Coastguard Worker * will be included in the reference list. 515*54e60f84SAndroid Build Coastguard Worker * valid value range: [1..7], invalid when value is 0. 516*54e60f84SAndroid Build Coastguard Worker */ 517*54e60f84SAndroid Build Coastguard Worker uint32_t search_idx4 : 3; 518*54e60f84SAndroid Build Coastguard Worker /** 519*54e60f84SAndroid Build Coastguard Worker * \brief Value used as index into ref_frame_idx[] to indicate that frame 520*54e60f84SAndroid Build Coastguard Worker * will be included in the reference list. 521*54e60f84SAndroid Build Coastguard Worker * valid value range: [1..7], invalid when value is 0. 522*54e60f84SAndroid Build Coastguard Worker */ 523*54e60f84SAndroid Build Coastguard Worker uint32_t search_idx5 : 3; 524*54e60f84SAndroid Build Coastguard Worker /** 525*54e60f84SAndroid Build Coastguard Worker * \brief Value used as index into ref_frame_idx[] to indicate that frame 526*54e60f84SAndroid Build Coastguard Worker * will be included in the reference list. 527*54e60f84SAndroid Build Coastguard Worker * valid value range: [1..7], invalid when value is 0. 528*54e60f84SAndroid Build Coastguard Worker */ 529*54e60f84SAndroid Build Coastguard Worker uint32_t search_idx6 : 3; 530*54e60f84SAndroid Build Coastguard Worker 531*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero. */ 532*54e60f84SAndroid Build Coastguard Worker uint32_t Reserved : 11; 533*54e60f84SAndroid Build Coastguard Worker } fields; 534*54e60f84SAndroid Build Coastguard Worker uint32_t value; 535*54e60f84SAndroid Build Coastguard Worker } VARefFrameCtrlAV1; 536*54e60f84SAndroid Build Coastguard Worker 537*54e60f84SAndroid Build Coastguard Worker /** 538*54e60f84SAndroid Build Coastguard Worker * \brief AV1 Encoding Picture Parameter Buffer Structure. 539*54e60f84SAndroid Build Coastguard Worker * 540*54e60f84SAndroid Build Coastguard Worker * This structure conveys picture level parameters. 541*54e60f84SAndroid Build Coastguard Worker * 542*54e60f84SAndroid Build Coastguard Worker */ 543*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncPictureParameterBufferAV1 { 544*54e60f84SAndroid Build Coastguard Worker /** \brief AV1 encoder may support SupRes and dynamic scaling function. 545*54e60f84SAndroid Build Coastguard Worker * For SupRes, underline encoder is responsible to do downscaling. 546*54e60f84SAndroid Build Coastguard Worker * For dynamic scaling, app should provide the scaled raw source. 547*54e60f84SAndroid Build Coastguard Worker */ 548*54e60f84SAndroid Build Coastguard Worker /** \brief Raw source frame width in pixels. */ 549*54e60f84SAndroid Build Coastguard Worker uint16_t frame_width_minus_1; 550*54e60f84SAndroid Build Coastguard Worker /** \brief Raw source frame height in pixels. */ 551*54e60f84SAndroid Build Coastguard Worker uint16_t frame_height_minus_1; 552*54e60f84SAndroid Build Coastguard Worker 553*54e60f84SAndroid Build Coastguard Worker /** \brief Surface to store reconstructed frame, not used for enc only case. */ 554*54e60f84SAndroid Build Coastguard Worker VASurfaceID reconstructed_frame; 555*54e60f84SAndroid Build Coastguard Worker 556*54e60f84SAndroid Build Coastguard Worker /** \brief Buffer to store coded data. */ 557*54e60f84SAndroid Build Coastguard Worker VABufferID coded_buf; 558*54e60f84SAndroid Build Coastguard Worker 559*54e60f84SAndroid Build Coastguard Worker /** \brief Reference frame buffers. 560*54e60f84SAndroid Build Coastguard Worker * Each entry of the array specifies the surface index of the picture 561*54e60f84SAndroid Build Coastguard Worker * that is referred by current picture or will be referred by any future 562*54e60f84SAndroid Build Coastguard Worker * picture. The valid entries take value from 0 to 127, inclusive. 563*54e60f84SAndroid Build Coastguard Worker * Non-valid entries, those do not point to pictures which are referred 564*54e60f84SAndroid Build Coastguard Worker * by current picture or future pictures, should take value 0xFF. 565*54e60f84SAndroid Build Coastguard Worker * Other values are not allowed. 566*54e60f84SAndroid Build Coastguard Worker * 567*54e60f84SAndroid Build Coastguard Worker * Application should update this array based on the refreshing 568*54e60f84SAndroid Build Coastguard Worker * information expected. 569*54e60f84SAndroid Build Coastguard Worker */ 570*54e60f84SAndroid Build Coastguard Worker VASurfaceID reference_frames[8]; 571*54e60f84SAndroid Build Coastguard Worker 572*54e60f84SAndroid Build Coastguard Worker /** \brief Reference index list. 573*54e60f84SAndroid Build Coastguard Worker * Contains a list of indices into refernce_frames[]. 574*54e60f84SAndroid Build Coastguard Worker * Indice with refernce frames range: [LAST_FRAME - LAST_FRAME, 575*54e60f84SAndroid Build Coastguard Worker * LAST2_FRAME - LAST_FRAME, ..., ALTREF2_FRAME - LAST_FRAME]. 576*54e60f84SAndroid Build Coastguard Worker * #define LAST_FRAME 1 577*54e60f84SAndroid Build Coastguard Worker * #define LAST2_FRAME 2 578*54e60f84SAndroid Build Coastguard Worker * #define LAST3_FRAME 3 579*54e60f84SAndroid Build Coastguard Worker * #define GOLDEN_FRAME 4 580*54e60f84SAndroid Build Coastguard Worker * #define BWDREF_FRAME 5 581*54e60f84SAndroid Build Coastguard Worker * #define ALTREF_FRAME 6 582*54e60f84SAndroid Build Coastguard Worker * #define ALTREF2_FRAME 7 583*54e60f84SAndroid Build Coastguard Worker * value range [0..7]. 584*54e60f84SAndroid Build Coastguard Worker */ 585*54e60f84SAndroid Build Coastguard Worker uint8_t ref_frame_idx[7]; 586*54e60f84SAndroid Build Coastguard Worker 587*54e60f84SAndroid Build Coastguard Worker /** \brief When hierarchical_level_plus1 > 0, hierarchical_level_plus1-1 indicates 588*54e60f84SAndroid Build Coastguard Worker * the current frame's level. If VAEncMiscParameterTemporalLayerStructure 589*54e60f84SAndroid Build Coastguard Worker * is valid (number_of_layers >0), hierarchical_level_plus1 shouldn't larger than number_of_layers. 590*54e60f84SAndroid Build Coastguard Worker */ 591*54e60f84SAndroid Build Coastguard Worker uint8_t hierarchical_level_plus1; 592*54e60f84SAndroid Build Coastguard Worker 593*54e60f84SAndroid Build Coastguard Worker /** \brief primary reference frame. 594*54e60f84SAndroid Build Coastguard Worker * Index into reference_frames[] 595*54e60f84SAndroid Build Coastguard Worker * segment id map, context table, etc. come from the reference 596*54e60f84SAndroid Build Coastguard Worker * frame pointed by this index. 597*54e60f84SAndroid Build Coastguard Worker * value range [0..7]. 598*54e60f84SAndroid Build Coastguard Worker */ 599*54e60f84SAndroid Build Coastguard Worker uint8_t primary_ref_frame; 600*54e60f84SAndroid Build Coastguard Worker 601*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 602*54e60f84SAndroid Build Coastguard Worker uint8_t order_hint; 603*54e60f84SAndroid Build Coastguard Worker 604*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 605*54e60f84SAndroid Build Coastguard Worker uint8_t refresh_frame_flags; 606*54e60f84SAndroid Build Coastguard Worker 607*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero. */ 608*54e60f84SAndroid Build Coastguard Worker uint8_t reserved8bits1; 609*54e60f84SAndroid Build Coastguard Worker 610*54e60f84SAndroid Build Coastguard Worker /** \brief Suggest which frames to be used as references. 611*54e60f84SAndroid Build Coastguard Worker * see struct #VARefFrameCtrl for details. 612*54e60f84SAndroid Build Coastguard Worker */ 613*54e60f84SAndroid Build Coastguard Worker VARefFrameCtrlAV1 ref_frame_ctrl_l0; 614*54e60f84SAndroid Build Coastguard Worker VARefFrameCtrlAV1 ref_frame_ctrl_l1; 615*54e60f84SAndroid Build Coastguard Worker 616*54e60f84SAndroid Build Coastguard Worker union { 617*54e60f84SAndroid Build Coastguard Worker struct { 618*54e60f84SAndroid Build Coastguard Worker /** \brief frame type. 619*54e60f84SAndroid Build Coastguard Worker * 0: key_frame. 620*54e60f84SAndroid Build Coastguard Worker * 1: inter_frame. 621*54e60f84SAndroid Build Coastguard Worker * 2: intra_only frame. 622*54e60f84SAndroid Build Coastguard Worker * 3: switch_frame (app needs to set error_resilient_mode = 1, 623*54e60f84SAndroid Build Coastguard Worker * refresh_frame_flags, etc approperately.). 624*54e60f84SAndroid Build Coastguard Worker */ 625*54e60f84SAndroid Build Coastguard Worker uint32_t frame_type : 2; 626*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 627*54e60f84SAndroid Build Coastguard Worker uint32_t error_resilient_mode : 1; 628*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 629*54e60f84SAndroid Build Coastguard Worker uint32_t disable_cdf_update : 1; 630*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 631*54e60f84SAndroid Build Coastguard Worker uint32_t use_superres : 1; 632*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 633*54e60f84SAndroid Build Coastguard Worker uint32_t allow_high_precision_mv : 1; 634*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 635*54e60f84SAndroid Build Coastguard Worker uint32_t use_ref_frame_mvs : 1; 636*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 637*54e60f84SAndroid Build Coastguard Worker uint32_t disable_frame_end_update_cdf : 1; 638*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 639*54e60f84SAndroid Build Coastguard Worker uint32_t reduced_tx_set : 1; 640*54e60f84SAndroid Build Coastguard Worker 641*54e60f84SAndroid Build Coastguard Worker /** \brief For single tile group, app may choose to use one frame obu 642*54e60f84SAndroid Build Coastguard Worker * to replace one frame header obu + one tile group obu. 643*54e60f84SAndroid Build Coastguard Worker * Invalid if num_tile_groups_minus1 > 0. 644*54e60f84SAndroid Build Coastguard Worker */ 645*54e60f84SAndroid Build Coastguard Worker uint32_t enable_frame_obu : 1; 646*54e60f84SAndroid Build Coastguard Worker 647*54e60f84SAndroid Build Coastguard Worker /** \brief Indicate the current frame will be used as a long term reference. */ 648*54e60f84SAndroid Build Coastguard Worker uint32_t long_term_reference : 1; 649*54e60f84SAndroid Build Coastguard Worker /** \brief If the encoded frame will not be referred by other frames, 650*54e60f84SAndroid Build Coastguard Worker * its recon may not be generated in order to save memory bandwidth. 651*54e60f84SAndroid Build Coastguard Worker */ 652*54e60f84SAndroid Build Coastguard Worker uint32_t disable_frame_recon : 1; 653*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 654*54e60f84SAndroid Build Coastguard Worker uint32_t allow_intrabc : 1; 655*54e60f84SAndroid Build Coastguard Worker /** \brief Equal to 1 indicates that intra blocks may use palette encoding. 656*54e60f84SAndroid Build Coastguard Worker * Otherwise disable palette encoding. 657*54e60f84SAndroid Build Coastguard Worker */ 658*54e60f84SAndroid Build Coastguard Worker uint32_t palette_mode_enable : 1; 659*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 660*54e60f84SAndroid Build Coastguard Worker uint32_t allow_screen_content_tools : 1; 661*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 662*54e60f84SAndroid Build Coastguard Worker uint32_t force_integer_mv : 1; 663*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero. */ 664*54e60f84SAndroid Build Coastguard Worker uint32_t reserved : 16; 665*54e60f84SAndroid Build Coastguard Worker } bits; 666*54e60f84SAndroid Build Coastguard Worker uint32_t value; 667*54e60f84SAndroid Build Coastguard Worker } picture_flags; 668*54e60f84SAndroid Build Coastguard Worker 669*54e60f84SAndroid Build Coastguard Worker /** \brief Block size for each Segment ID in Segment Map. 670*54e60f84SAndroid Build Coastguard Worker * 0: 16x16 block size, default value; 671*54e60f84SAndroid Build Coastguard Worker * 1: 32x32 block size; 672*54e60f84SAndroid Build Coastguard Worker * 2: 64x64 block size; 673*54e60f84SAndroid Build Coastguard Worker * 3: 8x8 block size. 674*54e60f84SAndroid Build Coastguard Worker */ 675*54e60f84SAndroid Build Coastguard Worker uint8_t seg_id_block_size; 676*54e60f84SAndroid Build Coastguard Worker 677*54e60f84SAndroid Build Coastguard Worker /** \brief Number of tile groups minus 1. 678*54e60f84SAndroid Build Coastguard Worker * value range [0..255]. 679*54e60f84SAndroid Build Coastguard Worker */ 680*54e60f84SAndroid Build Coastguard Worker uint8_t num_tile_groups_minus1; 681*54e60f84SAndroid Build Coastguard Worker 682*54e60f84SAndroid Build Coastguard Worker /** \brief Temporal id of the frame.*/ 683*54e60f84SAndroid Build Coastguard Worker uint8_t temporal_id; 684*54e60f84SAndroid Build Coastguard Worker 685*54e60f84SAndroid Build Coastguard Worker /** \brief Deblock filter parameters. 686*54e60f84SAndroid Build Coastguard Worker * value range [0..63]. 687*54e60f84SAndroid Build Coastguard Worker */ 688*54e60f84SAndroid Build Coastguard Worker uint8_t filter_level[2]; 689*54e60f84SAndroid Build Coastguard Worker uint8_t filter_level_u; 690*54e60f84SAndroid Build Coastguard Worker uint8_t filter_level_v; 691*54e60f84SAndroid Build Coastguard Worker 692*54e60f84SAndroid Build Coastguard Worker union { 693*54e60f84SAndroid Build Coastguard Worker struct { 694*54e60f84SAndroid Build Coastguard Worker /** \brief Sharpness level for deblock filter. 695*54e60f84SAndroid Build Coastguard Worker * value range [0..7]. 696*54e60f84SAndroid Build Coastguard Worker */ 697*54e60f84SAndroid Build Coastguard Worker uint8_t sharpness_level : 3; 698*54e60f84SAndroid Build Coastguard Worker uint8_t mode_ref_delta_enabled : 1; 699*54e60f84SAndroid Build Coastguard Worker uint8_t mode_ref_delta_update : 1; 700*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero. */ 701*54e60f84SAndroid Build Coastguard Worker uint8_t reserved : 3; 702*54e60f84SAndroid Build Coastguard Worker } bits; 703*54e60f84SAndroid Build Coastguard Worker uint8_t value; 704*54e60f84SAndroid Build Coastguard Worker } loop_filter_flags; 705*54e60f84SAndroid Build Coastguard Worker 706*54e60f84SAndroid Build Coastguard Worker /** \brief Super resolution scale denominator. 707*54e60f84SAndroid Build Coastguard Worker * value range [9..16]. 708*54e60f84SAndroid Build Coastguard Worker */ 709*54e60f84SAndroid Build Coastguard Worker uint8_t superres_scale_denominator; 710*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 711*54e60f84SAndroid Build Coastguard Worker uint8_t interpolation_filter; 712*54e60f84SAndroid Build Coastguard Worker 713*54e60f84SAndroid Build Coastguard Worker /** \brief Loop filter ref deltas. 714*54e60f84SAndroid Build Coastguard Worker * value range [-63..63]. 715*54e60f84SAndroid Build Coastguard Worker */ 716*54e60f84SAndroid Build Coastguard Worker int8_t ref_deltas[8]; 717*54e60f84SAndroid Build Coastguard Worker 718*54e60f84SAndroid Build Coastguard Worker /** \brief Loop filter mode deltas. 719*54e60f84SAndroid Build Coastguard Worker * value range [-63..63]. 720*54e60f84SAndroid Build Coastguard Worker */ 721*54e60f84SAndroid Build Coastguard Worker int8_t mode_deltas[2]; 722*54e60f84SAndroid Build Coastguard Worker 723*54e60f84SAndroid Build Coastguard Worker /** \brief Quantization params. */ 724*54e60f84SAndroid Build Coastguard Worker uint8_t base_qindex; 725*54e60f84SAndroid Build Coastguard Worker int8_t y_dc_delta_q; 726*54e60f84SAndroid Build Coastguard Worker int8_t u_dc_delta_q; 727*54e60f84SAndroid Build Coastguard Worker int8_t u_ac_delta_q; 728*54e60f84SAndroid Build Coastguard Worker int8_t v_dc_delta_q; 729*54e60f84SAndroid Build Coastguard Worker int8_t v_ac_delta_q; 730*54e60f84SAndroid Build Coastguard Worker 731*54e60f84SAndroid Build Coastguard Worker /** \brief Min value for base q index for BRC. 732*54e60f84SAndroid Build Coastguard Worker * value range [1..255]. 733*54e60f84SAndroid Build Coastguard Worker */ 734*54e60f84SAndroid Build Coastguard Worker uint8_t min_base_qindex; 735*54e60f84SAndroid Build Coastguard Worker 736*54e60f84SAndroid Build Coastguard Worker /** \brief Max value for base q index for BRC. 737*54e60f84SAndroid Build Coastguard Worker * value range [1..255]. 738*54e60f84SAndroid Build Coastguard Worker */ 739*54e60f84SAndroid Build Coastguard Worker uint8_t max_base_qindex; 740*54e60f84SAndroid Build Coastguard Worker 741*54e60f84SAndroid Build Coastguard Worker /** \brief Quantization matrix. */ 742*54e60f84SAndroid Build Coastguard Worker union { 743*54e60f84SAndroid Build Coastguard Worker struct { 744*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 745*54e60f84SAndroid Build Coastguard Worker uint16_t using_qmatrix : 1; 746*54e60f84SAndroid Build Coastguard Worker /** \brief Following parameters only valid when using_qmatrix == 1. */ 747*54e60f84SAndroid Build Coastguard Worker uint16_t qm_y : 4; 748*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 749*54e60f84SAndroid Build Coastguard Worker uint16_t qm_u : 4; 750*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. */ 751*54e60f84SAndroid Build Coastguard Worker uint16_t qm_v : 4; 752*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero. */ 753*54e60f84SAndroid Build Coastguard Worker uint16_t reserved : 3; 754*54e60f84SAndroid Build Coastguard Worker } bits; 755*54e60f84SAndroid Build Coastguard Worker uint16_t value; 756*54e60f84SAndroid Build Coastguard Worker } qmatrix_flags; 757*54e60f84SAndroid Build Coastguard Worker 758*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero. */ 759*54e60f84SAndroid Build Coastguard Worker uint16_t reserved16bits1; 760*54e60f84SAndroid Build Coastguard Worker 761*54e60f84SAndroid Build Coastguard Worker union { 762*54e60f84SAndroid Build Coastguard Worker struct { 763*54e60f84SAndroid Build Coastguard Worker /** \brief Specify whether quantizer index delta values are present. 764*54e60f84SAndroid Build Coastguard Worker * value range [0..1]. */ 765*54e60f84SAndroid Build Coastguard Worker uint32_t delta_q_present : 1; 766*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. 767*54e60f84SAndroid Build Coastguard Worker * value range [0..3]. */ 768*54e60f84SAndroid Build Coastguard Worker uint32_t delta_q_res : 2; 769*54e60f84SAndroid Build Coastguard Worker 770*54e60f84SAndroid Build Coastguard Worker /** \brief Specify whether loop filter delta values are present. 771*54e60f84SAndroid Build Coastguard Worker * value range [0..1]. */ 772*54e60f84SAndroid Build Coastguard Worker uint32_t delta_lf_present : 1; 773*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. 774*54e60f84SAndroid Build Coastguard Worker * value range [0..3]. */ 775*54e60f84SAndroid Build Coastguard Worker uint32_t delta_lf_res : 2; 776*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. 777*54e60f84SAndroid Build Coastguard Worker * value range [0..1]. */ 778*54e60f84SAndroid Build Coastguard Worker uint32_t delta_lf_multi : 1; 779*54e60f84SAndroid Build Coastguard Worker 780*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. 781*54e60f84SAndroid Build Coastguard Worker * 0: ONLY_4X4; 782*54e60f84SAndroid Build Coastguard Worker * 1: TX_MODE_LARGEST; 783*54e60f84SAndroid Build Coastguard Worker * 2: TX_MODE_SELECT; 784*54e60f84SAndroid Build Coastguard Worker * 3: Invalid. 785*54e60f84SAndroid Build Coastguard Worker */ 786*54e60f84SAndroid Build Coastguard Worker uint32_t tx_mode : 2; 787*54e60f84SAndroid Build Coastguard Worker 788*54e60f84SAndroid Build Coastguard Worker /** \brief Indicates whether to use single or compound reference prediction. 789*54e60f84SAndroid Build Coastguard Worker * 0: SINGLE_REFERENCE; 790*54e60f84SAndroid Build Coastguard Worker * 1: COMPOUND_REFERENCE; 791*54e60f84SAndroid Build Coastguard Worker * 2: REFERENCE_MODE_SELECT. 792*54e60f84SAndroid Build Coastguard Worker * 3: Invalid. 793*54e60f84SAndroid Build Coastguard Worker * 794*54e60f84SAndroid Build Coastguard Worker * Value 2 means driver make decision to use single reference or compound reference. 795*54e60f84SAndroid Build Coastguard Worker */ 796*54e60f84SAndroid Build Coastguard Worker uint32_t reference_mode : 2; 797*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. 798*54e60f84SAndroid Build Coastguard Worker * value range [0..1]. 799*54e60f84SAndroid Build Coastguard Worker */ 800*54e60f84SAndroid Build Coastguard Worker uint32_t skip_mode_present : 1; 801*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero. */ 802*54e60f84SAndroid Build Coastguard Worker uint32_t reserved : 20; 803*54e60f84SAndroid Build Coastguard Worker } bits; 804*54e60f84SAndroid Build Coastguard Worker uint32_t value; 805*54e60f84SAndroid Build Coastguard Worker } mode_control_flags; 806*54e60f84SAndroid Build Coastguard Worker 807*54e60f84SAndroid Build Coastguard Worker /** \brief Segmentation parameters. */ 808*54e60f84SAndroid Build Coastguard Worker VAEncSegParamAV1 segments; 809*54e60f84SAndroid Build Coastguard Worker 810*54e60f84SAndroid Build Coastguard Worker /** \brief Number of tile columns. */ 811*54e60f84SAndroid Build Coastguard Worker uint8_t tile_cols; 812*54e60f84SAndroid Build Coastguard Worker /** \brief Number of tile rows. */ 813*54e60f84SAndroid Build Coastguard Worker uint8_t tile_rows; 814*54e60f84SAndroid Build Coastguard Worker 815*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero. */ 816*54e60f84SAndroid Build Coastguard Worker uint16_t reserved16bits2; 817*54e60f84SAndroid Build Coastguard Worker 818*54e60f84SAndroid Build Coastguard Worker /** \brief The last tile column or row size needs to be derived. */ 819*54e60f84SAndroid Build Coastguard Worker uint16_t width_in_sbs_minus_1[63]; 820*54e60f84SAndroid Build Coastguard Worker uint16_t height_in_sbs_minus_1[63]; 821*54e60f84SAndroid Build Coastguard Worker 822*54e60f84SAndroid Build Coastguard Worker /** \brief specify which tile to use for the CDF update. 823*54e60f84SAndroid Build Coastguard Worker * value range [0..127]*/ 824*54e60f84SAndroid Build Coastguard Worker uint16_t context_update_tile_id; 825*54e60f84SAndroid Build Coastguard Worker 826*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. 827*54e60f84SAndroid Build Coastguard Worker * value range [0..3]. 828*54e60f84SAndroid Build Coastguard Worker */ 829*54e60f84SAndroid Build Coastguard Worker uint8_t cdef_damping_minus_3; 830*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. 831*54e60f84SAndroid Build Coastguard Worker * value range [0..3]. 832*54e60f84SAndroid Build Coastguard Worker */ 833*54e60f84SAndroid Build Coastguard Worker uint8_t cdef_bits; 834*54e60f84SAndroid Build Coastguard Worker /** \brief CDEF Y strengths. 835*54e60f84SAndroid Build Coastguard Worker * value range [0..63]*/ 836*54e60f84SAndroid Build Coastguard Worker uint8_t cdef_y_strengths[8]; 837*54e60f84SAndroid Build Coastguard Worker /** \brief CDEF UV strengths. 838*54e60f84SAndroid Build Coastguard Worker * value range [0..63]*/ 839*54e60f84SAndroid Build Coastguard Worker uint8_t cdef_uv_strengths[8]; 840*54e60f84SAndroid Build Coastguard Worker 841*54e60f84SAndroid Build Coastguard Worker union { 842*54e60f84SAndroid Build Coastguard Worker struct { 843*54e60f84SAndroid Build Coastguard Worker /** \brief Restoration type for Y frame. 844*54e60f84SAndroid Build Coastguard Worker * value range [0..3]. 845*54e60f84SAndroid Build Coastguard Worker */ 846*54e60f84SAndroid Build Coastguard Worker uint16_t yframe_restoration_type : 2; 847*54e60f84SAndroid Build Coastguard Worker /** \brief Restoration type for Cb frame. 848*54e60f84SAndroid Build Coastguard Worker * value range [0..3]. 849*54e60f84SAndroid Build Coastguard Worker */ 850*54e60f84SAndroid Build Coastguard Worker uint16_t cbframe_restoration_type : 2; 851*54e60f84SAndroid Build Coastguard Worker /** \brief Restoration type for Cr frame. 852*54e60f84SAndroid Build Coastguard Worker * value range [0..3]. 853*54e60f84SAndroid Build Coastguard Worker */ 854*54e60f84SAndroid Build Coastguard Worker uint16_t crframe_restoration_type : 2; 855*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. 856*54e60f84SAndroid Build Coastguard Worker * value range [0..2]. 857*54e60f84SAndroid Build Coastguard Worker */ 858*54e60f84SAndroid Build Coastguard Worker uint16_t lr_unit_shift : 2; 859*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. 860*54e60f84SAndroid Build Coastguard Worker * value range [0..1]. 861*54e60f84SAndroid Build Coastguard Worker */ 862*54e60f84SAndroid Build Coastguard Worker uint16_t lr_uv_shift : 1; 863*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero. */ 864*54e60f84SAndroid Build Coastguard Worker uint16_t reserved : 7; 865*54e60f84SAndroid Build Coastguard Worker } bits; 866*54e60f84SAndroid Build Coastguard Worker uint16_t value; 867*54e60f84SAndroid Build Coastguard Worker } loop_restoration_flags; 868*54e60f84SAndroid Build Coastguard Worker 869*54e60f84SAndroid Build Coastguard Worker /** \brief Global motion. */ 870*54e60f84SAndroid Build Coastguard Worker VAEncWarpedMotionParamsAV1 wm[7]; 871*54e60f84SAndroid Build Coastguard Worker 872*54e60f84SAndroid Build Coastguard Worker /** 873*54e60f84SAndroid Build Coastguard Worker * Offset in bits for syntax base_q_idx in packed frame header bit stream 874*54e60f84SAndroid Build Coastguard Worker * from the start of the packed header data. 875*54e60f84SAndroid Build Coastguard Worker * In BRC mode, this parameter should be set and driver will update base_q_idx in 876*54e60f84SAndroid Build Coastguard Worker * uncompressed header according to this offset. 877*54e60f84SAndroid Build Coastguard Worker * In CQP mode, this parameter should be set to 0 and ignored by driver. 878*54e60f84SAndroid Build Coastguard Worker */ 879*54e60f84SAndroid Build Coastguard Worker uint32_t bit_offset_qindex; 880*54e60f84SAndroid Build Coastguard Worker /** 881*54e60f84SAndroid Build Coastguard Worker * Offset in bits for syntax segmentation_enabled of frame header OBU 882*54e60f84SAndroid Build Coastguard Worker * in packed frame header bit stream from the start of the packed header data. 883*54e60f84SAndroid Build Coastguard Worker * Valid only in auto segmentation mode. Other than that, this parameter 884*54e60f84SAndroid Build Coastguard Worker * should be set to 0 and ignored by driver. 885*54e60f84SAndroid Build Coastguard Worker */ 886*54e60f84SAndroid Build Coastguard Worker uint32_t bit_offset_segmentation; 887*54e60f84SAndroid Build Coastguard Worker /** 888*54e60f84SAndroid Build Coastguard Worker * Offset in bits for syntax loop_filter_params() in packed frame 889*54e60f84SAndroid Build Coastguard Worker * header bit stream from the start of the packed header data. 890*54e60f84SAndroid Build Coastguard Worker * In BRC mode, this parameter should be set and driver will update filter params 891*54e60f84SAndroid Build Coastguard Worker * in packed frame header according to this offset. 892*54e60f84SAndroid Build Coastguard Worker * In CQP mode, this parameter should be set to 0 and ignored by driver. 893*54e60f84SAndroid Build Coastguard Worker */ 894*54e60f84SAndroid Build Coastguard Worker uint32_t bit_offset_loopfilter_params; 895*54e60f84SAndroid Build Coastguard Worker /** 896*54e60f84SAndroid Build Coastguard Worker * In BRC mode, underline encoder should generate the approperiate 897*54e60f84SAndroid Build Coastguard Worker * CDEF values and write back into uncompressed header. And app 898*54e60f84SAndroid Build Coastguard Worker * should provide default CDEF values in packed header. This parameter 899*54e60f84SAndroid Build Coastguard Worker * should point to the starting bit of cdef_params() syntax structure 900*54e60f84SAndroid Build Coastguard Worker * in packed header. 901*54e60f84SAndroid Build Coastguard Worker * In CQP mode, this parameter should be set to 0 and ignored by driver. 902*54e60f84SAndroid Build Coastguard Worker */ 903*54e60f84SAndroid Build Coastguard Worker uint32_t bit_offset_cdef_params; 904*54e60f84SAndroid Build Coastguard Worker /** 905*54e60f84SAndroid Build Coastguard Worker * In BRC mode, this parameter indicates the actual bit usage of 906*54e60f84SAndroid Build Coastguard Worker * cdef_params() syntax structure in packed uncompressed header. 907*54e60f84SAndroid Build Coastguard Worker * In CQP mode, this parameter should be set to 0 and ignored by driver. 908*54e60f84SAndroid Build Coastguard Worker */ 909*54e60f84SAndroid Build Coastguard Worker uint32_t size_in_bits_cdef_params; 910*54e60f84SAndroid Build Coastguard Worker 911*54e60f84SAndroid Build Coastguard Worker /** 912*54e60f84SAndroid Build Coastguard Worker * Offset in bytes for syntax obu_size of frame header OBU in packed 913*54e60f84SAndroid Build Coastguard Worker * frame header bit stream from the start of the packed header. The frame 914*54e60f84SAndroid Build Coastguard Worker * header OBU size depends on the encoded tile sizes. It applies to both 915*54e60f84SAndroid Build Coastguard Worker * Frame Header OBU and Frame OBU if obu_size needs to be updated by 916*54e60f84SAndroid Build Coastguard Worker * underline encoder. Otherwise, app can set it to 0 and ignored by driver. 917*54e60f84SAndroid Build Coastguard Worker * 918*54e60f84SAndroid Build Coastguard Worker * In BRC mode, obu_size needs to be updated and this parameter should be set. 919*54e60f84SAndroid Build Coastguard Worker * In CQP mode, obu_size needs to be updated if \c enable_frame_obu == 1. Otherwise 920*54e60f84SAndroid Build Coastguard Worker * this parameter should be set to 0 and ignored by driver. 921*54e60f84SAndroid Build Coastguard Worker */ 922*54e60f84SAndroid Build Coastguard Worker uint32_t byte_offset_frame_hdr_obu_size; 923*54e60f84SAndroid Build Coastguard Worker 924*54e60f84SAndroid Build Coastguard Worker /** 925*54e60f84SAndroid Build Coastguard Worker * Frame header OBU bit stream size in bits. The frame header obu packed bit 926*54e60f84SAndroid Build Coastguard Worker * stream contains an obu header, a 4-byte long obu_size field, frame_header_obu() 927*54e60f84SAndroid Build Coastguard Worker * syntax chain, and a trailing bit if not inside a frame obu. If \c enable_frame_obu == 1, 928*54e60f84SAndroid Build Coastguard Worker * the value should include and up to the last bit of frame_header_obu() and 929*54e60f84SAndroid Build Coastguard Worker * excluding the bits generated by byte_alignment(). If \c enable_frame_obu == 0, 930*54e60f84SAndroid Build Coastguard Worker * the value should include and up to the trailing bit at the end of the frame 931*54e60f84SAndroid Build Coastguard Worker * header obu. The size will be used by encoder to calculate the final frame 932*54e60f84SAndroid Build Coastguard Worker * header size after bit shifting due to auto segmentation. 933*54e60f84SAndroid Build Coastguard Worker * In CQP mode, this parameter should be set to 0 and ignored by driver. 934*54e60f84SAndroid Build Coastguard Worker */ 935*54e60f84SAndroid Build Coastguard Worker uint32_t size_in_bits_frame_hdr_obu; 936*54e60f84SAndroid Build Coastguard Worker 937*54e60f84SAndroid Build Coastguard Worker /** \brief Tile Group OBU header */ 938*54e60f84SAndroid Build Coastguard Worker union { 939*54e60f84SAndroid Build Coastguard Worker struct { 940*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. 941*54e60f84SAndroid Build Coastguard Worker * value range [0..1]. 942*54e60f84SAndroid Build Coastguard Worker */ 943*54e60f84SAndroid Build Coastguard Worker uint8_t obu_extension_flag : 1; 944*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. 945*54e60f84SAndroid Build Coastguard Worker * value range [0..1]. 946*54e60f84SAndroid Build Coastguard Worker */ 947*54e60f84SAndroid Build Coastguard Worker uint8_t obu_has_size_field : 1; 948*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. 949*54e60f84SAndroid Build Coastguard Worker * value range [0..7]. 950*54e60f84SAndroid Build Coastguard Worker */ 951*54e60f84SAndroid Build Coastguard Worker uint8_t temporal_id : 3; 952*54e60f84SAndroid Build Coastguard Worker /** \brief Corresponds to AV1 syntax element of the same name. 953*54e60f84SAndroid Build Coastguard Worker * value range [0..2]. 954*54e60f84SAndroid Build Coastguard Worker */ 955*54e60f84SAndroid Build Coastguard Worker uint8_t spatial_id : 2; 956*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero. */ 957*54e60f84SAndroid Build Coastguard Worker uint8_t reserved : 1; 958*54e60f84SAndroid Build Coastguard Worker } bits; 959*54e60f84SAndroid Build Coastguard Worker uint8_t value; 960*54e60f84SAndroid Build Coastguard Worker } tile_group_obu_hdr_info; 961*54e60f84SAndroid Build Coastguard Worker 962*54e60f84SAndroid Build Coastguard Worker /** \brief The number of frames skipped prior to the current frame. 963*54e60f84SAndroid Build Coastguard Worker * It includes only the skipped frames that were not counted before. 964*54e60f84SAndroid Build Coastguard Worker * App may generate the "show_existing_frame" short frame header OBUs 965*54e60f84SAndroid Build Coastguard Worker * and send to driver with the next frame. Default value 0. 966*54e60f84SAndroid Build Coastguard Worker */ 967*54e60f84SAndroid Build Coastguard Worker uint8_t number_skip_frames; 968*54e60f84SAndroid Build Coastguard Worker 969*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero. */ 970*54e60f84SAndroid Build Coastguard Worker uint16_t reserved16bits3; 971*54e60f84SAndroid Build Coastguard Worker 972*54e60f84SAndroid Build Coastguard Worker /** \brief Indicates the application forced frame size change in bytes. 973*54e60f84SAndroid Build Coastguard Worker * When the value is positive, the frame size is reduced. Otherwise, the frame 974*54e60f84SAndroid Build Coastguard Worker * size increases. The parameter can be used when application skips frames with 975*54e60f84SAndroid Build Coastguard Worker * setting of NumSkipFrames. And application can also use it for other scenarios 976*54e60f84SAndroid Build Coastguard Worker * such as inserting "show_existing_frame" at very end of the sequence. 977*54e60f84SAndroid Build Coastguard Worker */ 978*54e60f84SAndroid Build Coastguard Worker int32_t skip_frames_reduced_size; 979*54e60f84SAndroid Build Coastguard Worker 980*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero. */ 981*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_HIGH]; 982*54e60f84SAndroid Build Coastguard Worker } VAEncPictureParameterBufferAV1; 983*54e60f84SAndroid Build Coastguard Worker 984*54e60f84SAndroid Build Coastguard Worker /** 985*54e60f84SAndroid Build Coastguard Worker * \brief Tile Group Buffer. 986*54e60f84SAndroid Build Coastguard Worker */ 987*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncTileGroupBufferAV1 { 988*54e60f84SAndroid Build Coastguard Worker /** \brief Tile group start location. 989*54e60f84SAndroid Build Coastguard Worker * The position of the first tile in current tile group 990*54e60f84SAndroid Build Coastguard Worker * in raster scan order across the frame. 991*54e60f84SAndroid Build Coastguard Worker * value range [0..127]. 992*54e60f84SAndroid Build Coastguard Worker */ 993*54e60f84SAndroid Build Coastguard Worker uint8_t tg_start; 994*54e60f84SAndroid Build Coastguard Worker /** \brief Tile group end location. 995*54e60f84SAndroid Build Coastguard Worker * The position of the last tile in current tile group 996*54e60f84SAndroid Build Coastguard Worker * in raster scan order across the frame. 997*54e60f84SAndroid Build Coastguard Worker * value range [0..127]. 998*54e60f84SAndroid Build Coastguard Worker */ 999*54e60f84SAndroid Build Coastguard Worker uint8_t tg_end; 1000*54e60f84SAndroid Build Coastguard Worker 1001*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero. */ 1002*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_LOW]; 1003*54e60f84SAndroid Build Coastguard Worker } VAEncTileGroupBufferAV1; 1004*54e60f84SAndroid Build Coastguard Worker 1005*54e60f84SAndroid Build Coastguard Worker /**@}*/ 1006*54e60f84SAndroid Build Coastguard Worker 1007*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus 1008*54e60f84SAndroid Build Coastguard Worker } 1009*54e60f84SAndroid Build Coastguard Worker #endif 1010*54e60f84SAndroid Build Coastguard Worker 1011*54e60f84SAndroid Build Coastguard Worker #endif /* VA_ENC_AV1_H */ 1012