1*54e60f84SAndroid Build Coastguard Worker /* 2*54e60f84SAndroid Build Coastguard Worker * Copyright (c) 2007-2015 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_vp9.h 27*54e60f84SAndroid Build Coastguard Worker * \brief VP9 encoding API 28*54e60f84SAndroid Build Coastguard Worker * 29*54e60f84SAndroid Build Coastguard Worker * This file contains the \ref api_enc_vp9 "VP9 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_VP9_H 34*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_VP9_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 /** 41*54e60f84SAndroid Build Coastguard Worker * \defgroup api_enc_vp9 VP9 encoding API 42*54e60f84SAndroid Build Coastguard Worker * 43*54e60f84SAndroid Build Coastguard Worker * @{ 44*54e60f84SAndroid Build Coastguard Worker */ 45*54e60f84SAndroid Build Coastguard Worker 46*54e60f84SAndroid Build Coastguard Worker /** 47*54e60f84SAndroid Build Coastguard Worker * \brief VP9 Encoding Status Data Buffer Structure 48*54e60f84SAndroid Build Coastguard Worker * 49*54e60f84SAndroid Build Coastguard Worker * This structure is used to convey status data from encoder to application. 50*54e60f84SAndroid Build Coastguard Worker * Driver allocates VACodedBufferVP9Status as a private data buffer. 51*54e60f84SAndroid Build Coastguard Worker * Driver encapsulates the status buffer with a VACodedBufferSegment, 52*54e60f84SAndroid Build Coastguard Worker * and sets VACodedBufferSegment.status to be VA_CODED_BUF_STATUS_CODEC_SPECIFIC. 53*54e60f84SAndroid Build Coastguard Worker * And driver associates status data segment to the bit stream buffer segment 54*54e60f84SAndroid Build Coastguard Worker * by setting VACodedBufferSegment.next of coded_buf (bit stream) to the private 55*54e60f84SAndroid Build Coastguard Worker * buffer segment of status data. 56*54e60f84SAndroid Build Coastguard Worker * Application accesses it by calling VAMapBuffer() with VAEncCodedBufferType. 57*54e60f84SAndroid Build Coastguard Worker */ 58*54e60f84SAndroid Build Coastguard Worker typedef struct _VACodedBufferVP9Status { 59*54e60f84SAndroid Build Coastguard Worker /** Final quantization index used (yac), determined by BRC. 60*54e60f84SAndroid Build Coastguard Worker * Application is providing quantization index deltas 61*54e60f84SAndroid Build Coastguard Worker * ydc(0), y2dc(1), y2ac(2), uvdc(3), uvac(4) that are applied to all segments 62*54e60f84SAndroid Build Coastguard Worker * and segmentation qi deltas, they will not be changed by BRC. 63*54e60f84SAndroid Build Coastguard Worker */ 64*54e60f84SAndroid Build Coastguard Worker uint16_t base_qp_index; 65*54e60f84SAndroid Build Coastguard Worker 66*54e60f84SAndroid Build Coastguard Worker /** Final loopfilter levels for the frame, if segmentation is disabled only 67*54e60f84SAndroid Build Coastguard Worker * index 0 is used. 68*54e60f84SAndroid Build Coastguard Worker * If loop_filter_level is 0, it indicates loop filter is disabled. 69*54e60f84SAndroid Build Coastguard Worker */ 70*54e60f84SAndroid Build Coastguard Worker uint8_t loop_filter_level; 71*54e60f84SAndroid Build Coastguard Worker 72*54e60f84SAndroid Build Coastguard Worker /** 73*54e60f84SAndroid Build Coastguard Worker * Long term reference frame indication from BRC. BRC recommends the 74*54e60f84SAndroid Build Coastguard Worker * current frame that is being queried is a good candidate for a long 75*54e60f84SAndroid Build Coastguard Worker * term reference. 76*54e60f84SAndroid Build Coastguard Worker */ 77*54e60f84SAndroid Build Coastguard Worker uint8_t long_term_indication; 78*54e60f84SAndroid Build Coastguard Worker 79*54e60f84SAndroid Build Coastguard Worker /* suggested next frame width */ 80*54e60f84SAndroid Build Coastguard Worker uint16_t next_frame_width; 81*54e60f84SAndroid Build Coastguard Worker 82*54e60f84SAndroid Build Coastguard Worker /* suggested next frame height */ 83*54e60f84SAndroid Build Coastguard Worker uint16_t next_frame_height; 84*54e60f84SAndroid Build Coastguard Worker 85*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 86*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_LOW]; 87*54e60f84SAndroid Build Coastguard Worker } VACodedBufferVP9Status; 88*54e60f84SAndroid Build Coastguard Worker 89*54e60f84SAndroid Build Coastguard Worker /** 90*54e60f84SAndroid Build Coastguard Worker * \brief VP9 Encoding Sequence Parameter Buffer Structure 91*54e60f84SAndroid Build Coastguard Worker * 92*54e60f84SAndroid Build Coastguard Worker * This structure conveys sequence level parameters. 93*54e60f84SAndroid Build Coastguard Worker * 94*54e60f84SAndroid Build Coastguard Worker */ 95*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncSequenceParameterBufferVP9 { 96*54e60f84SAndroid Build Coastguard Worker /** \brief Frame size note: 97*54e60f84SAndroid Build Coastguard Worker * Picture resolution may change frame by frame. 98*54e60f84SAndroid Build Coastguard Worker * Application needs to allocate surfaces and frame buffers based on 99*54e60f84SAndroid Build Coastguard Worker * max frame resolution in case resolution changes for later frames. 100*54e60f84SAndroid Build Coastguard Worker * The source and recon surfaces allocated should be 64x64(SB) aligned 101*54e60f84SAndroid Build Coastguard Worker * on both horizontal and vertical directions. 102*54e60f84SAndroid Build Coastguard Worker * But buffers on the surfaces need to be aligned to CU boundaries. 103*54e60f84SAndroid Build Coastguard Worker */ 104*54e60f84SAndroid Build Coastguard Worker /* maximum frame width in pixels for the whole sequence */ 105*54e60f84SAndroid Build Coastguard Worker uint32_t max_frame_width; 106*54e60f84SAndroid Build Coastguard Worker 107*54e60f84SAndroid Build Coastguard Worker /* maximum frame height in pixels for the whole sequence */ 108*54e60f84SAndroid Build Coastguard Worker uint32_t max_frame_height; 109*54e60f84SAndroid Build Coastguard Worker 110*54e60f84SAndroid Build Coastguard Worker /* auto keyframe placement, non-zero means enable auto keyframe placement */ 111*54e60f84SAndroid Build Coastguard Worker uint32_t kf_auto; 112*54e60f84SAndroid Build Coastguard Worker 113*54e60f84SAndroid Build Coastguard Worker /* keyframe minimum interval */ 114*54e60f84SAndroid Build Coastguard Worker uint32_t kf_min_dist; 115*54e60f84SAndroid Build Coastguard Worker 116*54e60f84SAndroid Build Coastguard Worker /* keyframe maximum interval */ 117*54e60f84SAndroid Build Coastguard Worker uint32_t kf_max_dist; 118*54e60f84SAndroid Build Coastguard Worker 119*54e60f84SAndroid Build Coastguard Worker 120*54e60f84SAndroid Build Coastguard Worker /* RC related fields. RC modes are set with VAConfigAttribRateControl */ 121*54e60f84SAndroid Build Coastguard Worker /* For VP9, CBR implies HRD conformance and VBR implies no HRD conformance */ 122*54e60f84SAndroid Build Coastguard Worker 123*54e60f84SAndroid Build Coastguard Worker /** 124*54e60f84SAndroid Build Coastguard Worker * Initial bitrate set for this sequence in CBR or VBR modes. 125*54e60f84SAndroid Build Coastguard Worker * 126*54e60f84SAndroid Build Coastguard Worker * This field represents the initial bitrate value for this 127*54e60f84SAndroid Build Coastguard Worker * sequence if CBR or VBR mode is used, i.e. if the encoder 128*54e60f84SAndroid Build Coastguard Worker * pipeline was created with a #VAConfigAttribRateControl 129*54e60f84SAndroid Build Coastguard Worker * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. 130*54e60f84SAndroid Build Coastguard Worker * 131*54e60f84SAndroid Build Coastguard Worker * The bitrate can be modified later on through 132*54e60f84SAndroid Build Coastguard Worker * #VAEncMiscParameterRateControl buffers. 133*54e60f84SAndroid Build Coastguard Worker */ 134*54e60f84SAndroid Build Coastguard Worker uint32_t bits_per_second; 135*54e60f84SAndroid Build Coastguard Worker 136*54e60f84SAndroid Build Coastguard Worker /* Period between key frames */ 137*54e60f84SAndroid Build Coastguard Worker uint32_t intra_period; 138*54e60f84SAndroid Build Coastguard Worker 139*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 140*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_LOW]; 141*54e60f84SAndroid Build Coastguard Worker } VAEncSequenceParameterBufferVP9; 142*54e60f84SAndroid Build Coastguard Worker 143*54e60f84SAndroid Build Coastguard Worker 144*54e60f84SAndroid Build Coastguard Worker /** 145*54e60f84SAndroid Build Coastguard Worker * \brief VP9 Encoding Picture Parameter Buffer Structure 146*54e60f84SAndroid Build Coastguard Worker * 147*54e60f84SAndroid Build Coastguard Worker * This structure conveys picture level parameters. 148*54e60f84SAndroid Build Coastguard Worker * 149*54e60f84SAndroid Build Coastguard Worker */ 150*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncPictureParameterBufferVP9 { 151*54e60f84SAndroid Build Coastguard Worker /** VP9 encoder may support dynamic scaling function. 152*54e60f84SAndroid Build Coastguard Worker * If enabled (enable_dynamic_scaling is set), application may request 153*54e60f84SAndroid Build Coastguard Worker * GPU encodes picture with a different resolution from the raw source. 154*54e60f84SAndroid Build Coastguard Worker * GPU should handle the scaling process of source and 155*54e60f84SAndroid Build Coastguard Worker * all reference frames. 156*54e60f84SAndroid Build Coastguard Worker */ 157*54e60f84SAndroid Build Coastguard Worker /* raw source frame width in pixels */ 158*54e60f84SAndroid Build Coastguard Worker uint32_t frame_width_src; 159*54e60f84SAndroid Build Coastguard Worker /* raw source frame height in pixels */ 160*54e60f84SAndroid Build Coastguard Worker uint32_t frame_height_src; 161*54e60f84SAndroid Build Coastguard Worker 162*54e60f84SAndroid Build Coastguard Worker /* to be encoded frame width in pixels */ 163*54e60f84SAndroid Build Coastguard Worker uint32_t frame_width_dst; 164*54e60f84SAndroid Build Coastguard Worker /* to be encoded frame height in pixels */ 165*54e60f84SAndroid Build Coastguard Worker uint32_t frame_height_dst; 166*54e60f84SAndroid Build Coastguard Worker 167*54e60f84SAndroid Build Coastguard Worker /* surface to store reconstructed frame, not used for enc only case */ 168*54e60f84SAndroid Build Coastguard Worker VASurfaceID reconstructed_frame; 169*54e60f84SAndroid Build Coastguard Worker 170*54e60f84SAndroid Build Coastguard Worker /** \brief reference frame buffers 171*54e60f84SAndroid Build Coastguard Worker * Each entry of the array specifies the surface index of the picture 172*54e60f84SAndroid Build Coastguard Worker * that is referred by current picture or will be referred by any future 173*54e60f84SAndroid Build Coastguard Worker * picture. The valid entries take value from 0 to 127, inclusive. 174*54e60f84SAndroid Build Coastguard Worker * Non-valid entries, those do not point to pictures which are referred 175*54e60f84SAndroid Build Coastguard Worker * by current picture or future pictures, should take value 0xFF. 176*54e60f84SAndroid Build Coastguard Worker * Other values are not allowed. 177*54e60f84SAndroid Build Coastguard Worker * 178*54e60f84SAndroid Build Coastguard Worker * Application should update this array based on the refreshing 179*54e60f84SAndroid Build Coastguard Worker * information expected. 180*54e60f84SAndroid Build Coastguard Worker */ 181*54e60f84SAndroid Build Coastguard Worker VASurfaceID reference_frames[8]; 182*54e60f84SAndroid Build Coastguard Worker 183*54e60f84SAndroid Build Coastguard Worker /* buffer to store coded data */ 184*54e60f84SAndroid Build Coastguard Worker VABufferID coded_buf; 185*54e60f84SAndroid Build Coastguard Worker 186*54e60f84SAndroid Build Coastguard Worker union { 187*54e60f84SAndroid Build Coastguard Worker struct { 188*54e60f84SAndroid Build Coastguard Worker /* force this frame to be a keyframe */ 189*54e60f84SAndroid Build Coastguard Worker uint32_t force_kf : 1; 190*54e60f84SAndroid Build Coastguard Worker 191*54e60f84SAndroid Build Coastguard Worker /** \brief Indiates which frames to be used as reference. 192*54e60f84SAndroid Build Coastguard Worker * (Ref_frame_ctrl & 0x01) ? 1: last frame as reference frame, 0: not. 193*54e60f84SAndroid Build Coastguard Worker * (Ref_frame_ctrl & 0x02) ? 1: golden frame as reference frame, 0: not. 194*54e60f84SAndroid Build Coastguard Worker * (Ref_frame_ctrl & 0x04) ? 1: alt frame as reference frame, 0: not. 195*54e60f84SAndroid Build Coastguard Worker * L0 is for forward prediction. 196*54e60f84SAndroid Build Coastguard Worker * L1 is for backward prediction. 197*54e60f84SAndroid Build Coastguard Worker */ 198*54e60f84SAndroid Build Coastguard Worker uint32_t ref_frame_ctrl_l0 : 3; 199*54e60f84SAndroid Build Coastguard Worker uint32_t ref_frame_ctrl_l1 : 3; 200*54e60f84SAndroid Build Coastguard Worker 201*54e60f84SAndroid Build Coastguard Worker /** \brief Last Reference Frame index 202*54e60f84SAndroid Build Coastguard Worker * Specifies the index to RefFrameList[] which points to the LAST 203*54e60f84SAndroid Build Coastguard Worker * reference frame. It corresponds to active_ref_idx[0] in VP9 code. 204*54e60f84SAndroid Build Coastguard Worker */ 205*54e60f84SAndroid Build Coastguard Worker uint32_t ref_last_idx : 3; 206*54e60f84SAndroid Build Coastguard Worker 207*54e60f84SAndroid Build Coastguard Worker /** \brief Specifies the Sign Bias of the LAST reference frame. 208*54e60f84SAndroid Build Coastguard Worker * It corresponds to ref_frame_sign_bias[LAST_FRAME] in VP9 code. 209*54e60f84SAndroid Build Coastguard Worker */ 210*54e60f84SAndroid Build Coastguard Worker uint32_t ref_last_sign_bias : 1; 211*54e60f84SAndroid Build Coastguard Worker 212*54e60f84SAndroid Build Coastguard Worker /** \brief GOLDEN Reference Frame index 213*54e60f84SAndroid Build Coastguard Worker * Specifies the index to RefFrameList[] which points to the Golden 214*54e60f84SAndroid Build Coastguard Worker * reference frame. It corresponds to active_ref_idx[1] in VP9 code. 215*54e60f84SAndroid Build Coastguard Worker */ 216*54e60f84SAndroid Build Coastguard Worker uint32_t ref_gf_idx : 3; 217*54e60f84SAndroid Build Coastguard Worker 218*54e60f84SAndroid Build Coastguard Worker /** \brief Specifies the Sign Bias of the GOLDEN reference frame. 219*54e60f84SAndroid Build Coastguard Worker * It corresponds to ref_frame_sign_bias[GOLDEN_FRAME] in VP9 code. 220*54e60f84SAndroid Build Coastguard Worker */ 221*54e60f84SAndroid Build Coastguard Worker uint32_t ref_gf_sign_bias : 1; 222*54e60f84SAndroid Build Coastguard Worker 223*54e60f84SAndroid Build Coastguard Worker /** \brief Alternate Reference Frame index 224*54e60f84SAndroid Build Coastguard Worker * Specifies the index to RefFrameList[] which points to the Alternate 225*54e60f84SAndroid Build Coastguard Worker * reference frame. It corresponds to active_ref_idx[2] in VP9 code. 226*54e60f84SAndroid Build Coastguard Worker */ 227*54e60f84SAndroid Build Coastguard Worker uint32_t ref_arf_idx : 3; 228*54e60f84SAndroid Build Coastguard Worker 229*54e60f84SAndroid Build Coastguard Worker /** \brief Specifies the Sign Bias of the ALTERNATE reference frame. 230*54e60f84SAndroid Build Coastguard Worker * It corresponds to ref_frame_sign_bias[ALTREF_FRAME] in VP9 code. 231*54e60f84SAndroid Build Coastguard Worker */ 232*54e60f84SAndroid Build Coastguard Worker uint32_t ref_arf_sign_bias : 1; 233*54e60f84SAndroid Build Coastguard Worker 234*54e60f84SAndroid Build Coastguard Worker /* The temporal id the frame belongs to */ 235*54e60f84SAndroid Build Coastguard Worker uint32_t temporal_id : 8; 236*54e60f84SAndroid Build Coastguard Worker 237*54e60f84SAndroid Build Coastguard Worker uint32_t reserved : 5; 238*54e60f84SAndroid Build Coastguard Worker } bits; 239*54e60f84SAndroid Build Coastguard Worker uint32_t value; 240*54e60f84SAndroid Build Coastguard Worker } ref_flags; 241*54e60f84SAndroid Build Coastguard Worker 242*54e60f84SAndroid Build Coastguard Worker union { 243*54e60f84SAndroid Build Coastguard Worker struct { 244*54e60f84SAndroid Build Coastguard Worker /** 245*54e60f84SAndroid Build Coastguard Worker * Indicates if the current frame is a key frame or not. 246*54e60f84SAndroid Build Coastguard Worker * Corresponds to the same VP9 syntax element in frame tag. 247*54e60f84SAndroid Build Coastguard Worker */ 248*54e60f84SAndroid Build Coastguard Worker uint32_t frame_type : 1; 249*54e60f84SAndroid Build Coastguard Worker 250*54e60f84SAndroid Build Coastguard Worker /** \brief show_frame 251*54e60f84SAndroid Build Coastguard Worker * 0: current frame is not for display 252*54e60f84SAndroid Build Coastguard Worker * 1: current frame is for display 253*54e60f84SAndroid Build Coastguard Worker */ 254*54e60f84SAndroid Build Coastguard Worker uint32_t show_frame : 1; 255*54e60f84SAndroid Build Coastguard Worker 256*54e60f84SAndroid Build Coastguard Worker /** 257*54e60f84SAndroid Build Coastguard Worker * The following fields correspond to the same VP9 syntax elements 258*54e60f84SAndroid Build Coastguard Worker * in the frame header. 259*54e60f84SAndroid Build Coastguard Worker */ 260*54e60f84SAndroid Build Coastguard Worker uint32_t error_resilient_mode : 1; 261*54e60f84SAndroid Build Coastguard Worker 262*54e60f84SAndroid Build Coastguard Worker /** \brief Indicate intra-only for inter pictures. 263*54e60f84SAndroid Build Coastguard Worker * Must be 0 for key frames. 264*54e60f84SAndroid Build Coastguard Worker * 0: inter frame use both intra and inter blocks 265*54e60f84SAndroid Build Coastguard Worker * 1: inter frame use only intra blocks. 266*54e60f84SAndroid Build Coastguard Worker */ 267*54e60f84SAndroid Build Coastguard Worker uint32_t intra_only : 1; 268*54e60f84SAndroid Build Coastguard Worker 269*54e60f84SAndroid Build Coastguard Worker /** \brief Indicate high precision mode for Motion Vector prediction 270*54e60f84SAndroid Build Coastguard Worker * 0: normal mode 271*54e60f84SAndroid Build Coastguard Worker * 1: high precision mode 272*54e60f84SAndroid Build Coastguard Worker */ 273*54e60f84SAndroid Build Coastguard Worker uint32_t allow_high_precision_mv : 1; 274*54e60f84SAndroid Build Coastguard Worker 275*54e60f84SAndroid Build Coastguard Worker /** \brief Motion Compensation Filter type 276*54e60f84SAndroid Build Coastguard Worker * 0: eight-tap (only this mode is supported now.) 277*54e60f84SAndroid Build Coastguard Worker * 1: eight-tap-smooth 278*54e60f84SAndroid Build Coastguard Worker * 2: eight-tap-sharp 279*54e60f84SAndroid Build Coastguard Worker * 3: bilinear 280*54e60f84SAndroid Build Coastguard Worker * 4: switchable 281*54e60f84SAndroid Build Coastguard Worker */ 282*54e60f84SAndroid Build Coastguard Worker uint32_t mcomp_filter_type : 3; 283*54e60f84SAndroid Build Coastguard Worker uint32_t frame_parallel_decoding_mode : 1; 284*54e60f84SAndroid Build Coastguard Worker uint32_t reset_frame_context : 2; 285*54e60f84SAndroid Build Coastguard Worker uint32_t refresh_frame_context : 1; 286*54e60f84SAndroid Build Coastguard Worker uint32_t frame_context_idx : 2; 287*54e60f84SAndroid Build Coastguard Worker uint32_t segmentation_enabled : 1; 288*54e60f84SAndroid Build Coastguard Worker 289*54e60f84SAndroid Build Coastguard Worker /* corresponds to variable temporal_update in VP9 code. 290*54e60f84SAndroid Build Coastguard Worker * Indicates whether Segment ID is from bitstream or from previous 291*54e60f84SAndroid Build Coastguard Worker * frame. 292*54e60f84SAndroid Build Coastguard Worker * 0: Segment ID from bitstream 293*54e60f84SAndroid Build Coastguard Worker * 1: Segment ID from previous frame 294*54e60f84SAndroid Build Coastguard Worker */ 295*54e60f84SAndroid Build Coastguard Worker uint32_t segmentation_temporal_update : 1; 296*54e60f84SAndroid Build Coastguard Worker 297*54e60f84SAndroid Build Coastguard Worker /* corresponds to variable update_mb_segmentation_map in VP9 code. 298*54e60f84SAndroid Build Coastguard Worker * Indicates how hardware determines segmentation ID 299*54e60f84SAndroid Build Coastguard Worker * 0: intra block - segment id is 0; 300*54e60f84SAndroid Build Coastguard Worker * inter block - segment id from previous frame 301*54e60f84SAndroid Build Coastguard Worker * 1: intra block - segment id from bitstream (app or GPU decides) 302*54e60f84SAndroid Build Coastguard Worker * inter block - depends on segmentation_temporal_update 303*54e60f84SAndroid Build Coastguard Worker */ 304*54e60f84SAndroid Build Coastguard Worker uint32_t segmentation_update_map : 1; 305*54e60f84SAndroid Build Coastguard Worker 306*54e60f84SAndroid Build Coastguard Worker /** \brief Specifies if the picture is coded in lossless mode. 307*54e60f84SAndroid Build Coastguard Worker * 308*54e60f84SAndroid Build Coastguard Worker * lossless_mode = base_qindex == 0 && y_dc_delta_q == 0 \ 309*54e60f84SAndroid Build Coastguard Worker * && uv_dc_delta_q == 0 && uv_ac_delta_q == 0; 310*54e60f84SAndroid Build Coastguard Worker * Where base_qindex, y_dc_delta_q, uv_dc_delta_q and uv_ac_delta_q 311*54e60f84SAndroid Build Coastguard Worker * are all variables in VP9 code. 312*54e60f84SAndroid Build Coastguard Worker * 313*54e60f84SAndroid Build Coastguard Worker * When enabled, tx_mode needs to be set to 4x4 only and all 314*54e60f84SAndroid Build Coastguard Worker * tu_size in CU record set to 4x4 for entire frame. 315*54e60f84SAndroid Build Coastguard Worker * Software also has to program such that final_qindex=0 and 316*54e60f84SAndroid Build Coastguard Worker * final_filter_level=0 following the Quant Scale and 317*54e60f84SAndroid Build Coastguard Worker * Filter Level Table in Segmentation State section. 318*54e60f84SAndroid Build Coastguard Worker * Hardware forces Hadamard Tx when this bit is set. 319*54e60f84SAndroid Build Coastguard Worker * When lossless_mode is on, BRC has to be turned off. 320*54e60f84SAndroid Build Coastguard Worker * 0: normal mode 321*54e60f84SAndroid Build Coastguard Worker * 1: lossless mode 322*54e60f84SAndroid Build Coastguard Worker */ 323*54e60f84SAndroid Build Coastguard Worker uint32_t lossless_mode : 1; 324*54e60f84SAndroid Build Coastguard Worker 325*54e60f84SAndroid Build Coastguard Worker /** \brief MV prediction mode. Corresponds to VP9 variable with same name. 326*54e60f84SAndroid Build Coastguard Worker * comp_prediction_mode = 0: single prediction ony, 327*54e60f84SAndroid Build Coastguard Worker * comp_prediction_mode = 1: compound prediction, 328*54e60f84SAndroid Build Coastguard Worker * comp_prediction_mode = 2: hybrid prediction 329*54e60f84SAndroid Build Coastguard Worker * 330*54e60f84SAndroid Build Coastguard Worker * Not mandatory. App may suggest the setting based on power or 331*54e60f84SAndroid Build Coastguard Worker * performance. Kernal may use it as a guildline and decide the proper 332*54e60f84SAndroid Build Coastguard Worker * setting on its own. 333*54e60f84SAndroid Build Coastguard Worker */ 334*54e60f84SAndroid Build Coastguard Worker uint32_t comp_prediction_mode : 2; 335*54e60f84SAndroid Build Coastguard Worker 336*54e60f84SAndroid Build Coastguard Worker /** \brief Indicate how segmentation is specified 337*54e60f84SAndroid Build Coastguard Worker * 0 application specifies segmentation partitioning and 338*54e60f84SAndroid Build Coastguard Worker * relevant parameters. 339*54e60f84SAndroid Build Coastguard Worker * 1 GPU may decide on segmentation. If application already 340*54e60f84SAndroid Build Coastguard Worker * provides segmentation information, GPU may choose to 341*54e60f84SAndroid Build Coastguard Worker * honor it and further split into more levels if possible. 342*54e60f84SAndroid Build Coastguard Worker */ 343*54e60f84SAndroid Build Coastguard Worker uint32_t auto_segmentation : 1; 344*54e60f84SAndroid Build Coastguard Worker 345*54e60f84SAndroid Build Coastguard Worker /** \brief Indicate super frame syntax should be inserted 346*54e60f84SAndroid Build Coastguard Worker * 0 current frame is not encapsulated in super frame structure 347*54e60f84SAndroid Build Coastguard Worker * 1 current fame is to be encapsulated in super frame structure. 348*54e60f84SAndroid Build Coastguard Worker * super frame index syntax will be inserted by encoder at 349*54e60f84SAndroid Build Coastguard Worker * the end of current frame. 350*54e60f84SAndroid Build Coastguard Worker */ 351*54e60f84SAndroid Build Coastguard Worker uint32_t super_frame_flag : 1; 352*54e60f84SAndroid Build Coastguard Worker 353*54e60f84SAndroid Build Coastguard Worker uint32_t reserved : 10; 354*54e60f84SAndroid Build Coastguard Worker } bits; 355*54e60f84SAndroid Build Coastguard Worker uint32_t value; 356*54e60f84SAndroid Build Coastguard Worker } pic_flags; 357*54e60f84SAndroid Build Coastguard Worker 358*54e60f84SAndroid Build Coastguard Worker /** \brief indicate which frames in DPB should be refreshed. 359*54e60f84SAndroid Build Coastguard Worker * same syntax and semantic as in VP9 code. 360*54e60f84SAndroid Build Coastguard Worker */ 361*54e60f84SAndroid Build Coastguard Worker uint8_t refresh_frame_flags; 362*54e60f84SAndroid Build Coastguard Worker 363*54e60f84SAndroid Build Coastguard Worker /** \brief Base Q index in the VP9 term. 364*54e60f84SAndroid Build Coastguard Worker * Added with per segment delta Q index to get Q index of Luma AC. 365*54e60f84SAndroid Build Coastguard Worker */ 366*54e60f84SAndroid Build Coastguard Worker uint8_t luma_ac_qindex; 367*54e60f84SAndroid Build Coastguard Worker 368*54e60f84SAndroid Build Coastguard Worker /** 369*54e60f84SAndroid Build Coastguard Worker * Q index delta from base Q index in the VP9 term for Luma DC. 370*54e60f84SAndroid Build Coastguard Worker */ 371*54e60f84SAndroid Build Coastguard Worker int8_t luma_dc_qindex_delta; 372*54e60f84SAndroid Build Coastguard Worker 373*54e60f84SAndroid Build Coastguard Worker /** 374*54e60f84SAndroid Build Coastguard Worker * Q index delta from base Q index in the VP9 term for Chroma AC. 375*54e60f84SAndroid Build Coastguard Worker */ 376*54e60f84SAndroid Build Coastguard Worker int8_t chroma_ac_qindex_delta; 377*54e60f84SAndroid Build Coastguard Worker 378*54e60f84SAndroid Build Coastguard Worker /** 379*54e60f84SAndroid Build Coastguard Worker * Q index delta from base Q index in the VP9 term for Chroma DC. 380*54e60f84SAndroid Build Coastguard Worker */ 381*54e60f84SAndroid Build Coastguard Worker int8_t chroma_dc_qindex_delta; 382*54e60f84SAndroid Build Coastguard Worker 383*54e60f84SAndroid Build Coastguard Worker /** \brief filter level 384*54e60f84SAndroid Build Coastguard Worker * Corresponds to the same VP9 syntax element in frame header. 385*54e60f84SAndroid Build Coastguard Worker */ 386*54e60f84SAndroid Build Coastguard Worker uint8_t filter_level; 387*54e60f84SAndroid Build Coastguard Worker 388*54e60f84SAndroid Build Coastguard Worker /** 389*54e60f84SAndroid Build Coastguard Worker * Controls the deblocking filter sensitivity. 390*54e60f84SAndroid Build Coastguard Worker * Corresponds to the same VP9 syntax element in frame header. 391*54e60f84SAndroid Build Coastguard Worker */ 392*54e60f84SAndroid Build Coastguard Worker uint8_t sharpness_level; 393*54e60f84SAndroid Build Coastguard Worker 394*54e60f84SAndroid Build Coastguard Worker /** \brief Loop filter level reference delta values. 395*54e60f84SAndroid Build Coastguard Worker * Contains a list of 4 delta values for reference frame based block-level 396*54e60f84SAndroid Build Coastguard Worker * loop filter adjustment. 397*54e60f84SAndroid Build Coastguard Worker * If no update, set to 0. 398*54e60f84SAndroid Build Coastguard Worker * value range [-63..63] 399*54e60f84SAndroid Build Coastguard Worker */ 400*54e60f84SAndroid Build Coastguard Worker int8_t ref_lf_delta[4]; 401*54e60f84SAndroid Build Coastguard Worker 402*54e60f84SAndroid Build Coastguard Worker /** \brief Loop filter level mode delta values. 403*54e60f84SAndroid Build Coastguard Worker * Contains a list of 4 delta values for coding mode based MB-level loop 404*54e60f84SAndroid Build Coastguard Worker * filter adjustment. 405*54e60f84SAndroid Build Coastguard Worker * If no update, set to 0. 406*54e60f84SAndroid Build Coastguard Worker * value range [-63..63] 407*54e60f84SAndroid Build Coastguard Worker */ 408*54e60f84SAndroid Build Coastguard Worker int8_t mode_lf_delta[2]; 409*54e60f84SAndroid Build Coastguard Worker 410*54e60f84SAndroid Build Coastguard Worker /** 411*54e60f84SAndroid Build Coastguard Worker * Offset from starting position of output bitstream in bits where 412*54e60f84SAndroid Build Coastguard Worker * ref_lf_delta[] should be inserted. This offset should cover any metadata 413*54e60f84SAndroid Build Coastguard Worker * ahead of uncompressed header in inserted bit stream buffer (the offset 414*54e60f84SAndroid Build Coastguard Worker * should be same as that for final output bitstream buffer). 415*54e60f84SAndroid Build Coastguard Worker * 416*54e60f84SAndroid Build Coastguard Worker * In BRC mode, always insert ref_lf_delta[] (This implies uncompressed 417*54e60f84SAndroid Build Coastguard Worker * header should have mode_ref_delta_enabled=1 and mode_ref_delta_update=1). 418*54e60f84SAndroid Build Coastguard Worker */ 419*54e60f84SAndroid Build Coastguard Worker uint16_t bit_offset_ref_lf_delta; 420*54e60f84SAndroid Build Coastguard Worker 421*54e60f84SAndroid Build Coastguard Worker /** 422*54e60f84SAndroid Build Coastguard Worker * Offset from starting position of output bitstream in bits where 423*54e60f84SAndroid Build Coastguard Worker * mode_lf_delta[] should be inserted. 424*54e60f84SAndroid Build Coastguard Worker * 425*54e60f84SAndroid Build Coastguard Worker * In BRC mode, always insert mode_lf_delta[] (This implies uncompressed 426*54e60f84SAndroid Build Coastguard Worker * header should have mode_ref_delta_enabled=1 and mode_ref_delta_update=1). 427*54e60f84SAndroid Build Coastguard Worker */ 428*54e60f84SAndroid Build Coastguard Worker uint16_t bit_offset_mode_lf_delta; 429*54e60f84SAndroid Build Coastguard Worker 430*54e60f84SAndroid Build Coastguard Worker /** 431*54e60f84SAndroid Build Coastguard Worker * Offset from starting position of output bitstream in bits where (loop) 432*54e60f84SAndroid Build Coastguard Worker * filter_level should be inserted. 433*54e60f84SAndroid Build Coastguard Worker */ 434*54e60f84SAndroid Build Coastguard Worker uint16_t bit_offset_lf_level; 435*54e60f84SAndroid Build Coastguard Worker 436*54e60f84SAndroid Build Coastguard Worker /** 437*54e60f84SAndroid Build Coastguard Worker * Offset from starting position of output bitstream in bits where 438*54e60f84SAndroid Build Coastguard Worker * Base Qindex should be inserted. 439*54e60f84SAndroid Build Coastguard Worker */ 440*54e60f84SAndroid Build Coastguard Worker uint16_t bit_offset_qindex; 441*54e60f84SAndroid Build Coastguard Worker 442*54e60f84SAndroid Build Coastguard Worker /** 443*54e60f84SAndroid Build Coastguard Worker * Offset from starting position of output bitstream in bits where 444*54e60f84SAndroid Build Coastguard Worker * First Partition Size should be inserted. 445*54e60f84SAndroid Build Coastguard Worker */ 446*54e60f84SAndroid Build Coastguard Worker uint16_t bit_offset_first_partition_size; 447*54e60f84SAndroid Build Coastguard Worker 448*54e60f84SAndroid Build Coastguard Worker /** 449*54e60f84SAndroid Build Coastguard Worker * Offset from starting position of output bitstream in bits where 450*54e60f84SAndroid Build Coastguard Worker * segmentation_enabled is located in bitstream. When auto_segmentation 451*54e60f84SAndroid Build Coastguard Worker * is enabled, GPU uses this offset to locate and update the 452*54e60f84SAndroid Build Coastguard Worker * segmentation related information. 453*54e60f84SAndroid Build Coastguard Worker */ 454*54e60f84SAndroid Build Coastguard Worker uint16_t bit_offset_segmentation; 455*54e60f84SAndroid Build Coastguard Worker 456*54e60f84SAndroid Build Coastguard Worker /** \brief length in bit of segmentation portion from the location 457*54e60f84SAndroid Build Coastguard Worker * in bit stream where segmentation_enabled syntax is coded. 458*54e60f84SAndroid Build Coastguard Worker * When auto_segmentation is enabled, GPU uses this bit size to locate 459*54e60f84SAndroid Build Coastguard Worker * and update the information after segmentation. 460*54e60f84SAndroid Build Coastguard Worker */ 461*54e60f84SAndroid Build Coastguard Worker uint16_t bit_size_segmentation; 462*54e60f84SAndroid Build Coastguard Worker 463*54e60f84SAndroid Build Coastguard Worker 464*54e60f84SAndroid Build Coastguard Worker /** \brief log2 of number of tile rows 465*54e60f84SAndroid Build Coastguard Worker * Corresponds to the same VP9 syntax element in frame header. 466*54e60f84SAndroid Build Coastguard Worker * value range [0..2] 467*54e60f84SAndroid Build Coastguard Worker */ 468*54e60f84SAndroid Build Coastguard Worker uint8_t log2_tile_rows; 469*54e60f84SAndroid Build Coastguard Worker 470*54e60f84SAndroid Build Coastguard Worker /** \brief log2 of number of tile columns 471*54e60f84SAndroid Build Coastguard Worker * Corresponds to the same VP9 syntax element in frame header. 472*54e60f84SAndroid Build Coastguard Worker * value range [0..6] 473*54e60f84SAndroid Build Coastguard Worker */ 474*54e60f84SAndroid Build Coastguard Worker uint8_t log2_tile_columns; 475*54e60f84SAndroid Build Coastguard Worker 476*54e60f84SAndroid Build Coastguard Worker /** \brief indicate frame-skip happens 477*54e60f84SAndroid Build Coastguard Worker * Application may choose to drop/skip one or mulitple encoded frames or 478*54e60f84SAndroid Build Coastguard Worker * to-be-encoded frame due to various reasons such as insufficient 479*54e60f84SAndroid Build Coastguard Worker * bandwidth. 480*54e60f84SAndroid Build Coastguard Worker * Application uses the following three flags to inform GPU about frame-skip. 481*54e60f84SAndroid Build Coastguard Worker * 482*54e60f84SAndroid Build Coastguard Worker * value range of skip_frame_flag: [0..2] 483*54e60f84SAndroid Build Coastguard Worker * 0 - encode as normal, no skip; 484*54e60f84SAndroid Build Coastguard Worker * 1 - one or more frames were skipped by application prior to the 485*54e60f84SAndroid Build Coastguard Worker * current frame. Encode the current frame as normal. The driver 486*54e60f84SAndroid Build Coastguard Worker * will pass the number_skip_frames and skip_frames_size 487*54e60f84SAndroid Build Coastguard Worker * to bit rate control for adjustment. 488*54e60f84SAndroid Build Coastguard Worker * 2 - the current frame is to be skipped. Do not encode it but encrypt 489*54e60f84SAndroid Build Coastguard Worker * the packed header contents. This is for the secure encoding case 490*54e60f84SAndroid Build Coastguard Worker * where application generates a frame of all skipped blocks. 491*54e60f84SAndroid Build Coastguard Worker * The packed header will contain the skipped frame. 492*54e60f84SAndroid Build Coastguard Worker */ 493*54e60f84SAndroid Build Coastguard Worker uint8_t skip_frame_flag; 494*54e60f84SAndroid Build Coastguard Worker 495*54e60f84SAndroid Build Coastguard Worker /** \brief The number of frames skipped prior to the current frame. 496*54e60f84SAndroid Build Coastguard Worker * It includes only the skipped frames that were not counted before, 497*54e60f84SAndroid Build Coastguard Worker * and does not include the frame with skip_frame_flag == 2. 498*54e60f84SAndroid Build Coastguard Worker * Valid when skip_frame_flag = 1. 499*54e60f84SAndroid Build Coastguard Worker */ 500*54e60f84SAndroid Build Coastguard Worker uint8_t number_skip_frames; 501*54e60f84SAndroid Build Coastguard Worker 502*54e60f84SAndroid Build Coastguard Worker /** \brief When skip_frame_flag = 1, the size of the skipped frames in bits. 503*54e60f84SAndroid Build Coastguard Worker * It includes only the skipped frames that were not counted before, 504*54e60f84SAndroid Build Coastguard Worker * and does not include the frame size with skip_frame_flag = 2. 505*54e60f84SAndroid Build Coastguard Worker * When skip_frame_flag = 2, it is the size of the current skipped frame 506*54e60f84SAndroid Build Coastguard Worker * that is to be encrypted. 507*54e60f84SAndroid Build Coastguard Worker */ 508*54e60f84SAndroid Build Coastguard Worker uint32_t skip_frames_size; 509*54e60f84SAndroid Build Coastguard Worker 510*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 511*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_MEDIUM]; 512*54e60f84SAndroid Build Coastguard Worker } VAEncPictureParameterBufferVP9; 513*54e60f84SAndroid Build Coastguard Worker 514*54e60f84SAndroid Build Coastguard Worker 515*54e60f84SAndroid Build Coastguard Worker /** 516*54e60f84SAndroid Build Coastguard Worker * \brief Per segment parameters 517*54e60f84SAndroid Build Coastguard Worker */ 518*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncSegParamVP9 { 519*54e60f84SAndroid Build Coastguard Worker union { 520*54e60f84SAndroid Build Coastguard Worker struct { 521*54e60f84SAndroid Build Coastguard Worker /** \brief Indicates if per segment reference frame indicator is enabled. 522*54e60f84SAndroid Build Coastguard Worker * Corresponding to variable feature_enabled when 523*54e60f84SAndroid Build Coastguard Worker * j == SEG_LVL_REF_FRAME in function setup_segmentation() VP9 code. 524*54e60f84SAndroid Build Coastguard Worker */ 525*54e60f84SAndroid Build Coastguard Worker uint8_t segment_reference_enabled : 1; 526*54e60f84SAndroid Build Coastguard Worker 527*54e60f84SAndroid Build Coastguard Worker /** \brief Specifies per segment reference indication. 528*54e60f84SAndroid Build Coastguard Worker * 0: reserved 529*54e60f84SAndroid Build Coastguard Worker * 1: Last ref 530*54e60f84SAndroid Build Coastguard Worker * 2: golden 531*54e60f84SAndroid Build Coastguard Worker * 3: altref 532*54e60f84SAndroid Build Coastguard Worker * Value can be derived from variable data when 533*54e60f84SAndroid Build Coastguard Worker * j == SEG_LVL_REF_FRAME in function setup_segmentation() VP9 code. 534*54e60f84SAndroid Build Coastguard Worker * value range: [0..3] 535*54e60f84SAndroid Build Coastguard Worker */ 536*54e60f84SAndroid Build Coastguard Worker uint8_t segment_reference : 2; 537*54e60f84SAndroid Build Coastguard Worker 538*54e60f84SAndroid Build Coastguard Worker /** \brief Indicates if per segment skip mode is enabled. 539*54e60f84SAndroid Build Coastguard Worker * Corresponding to variable feature_enabled when 540*54e60f84SAndroid Build Coastguard Worker * j == SEG_LVL_SKIP in function setup_segmentation() VP9 code. 541*54e60f84SAndroid Build Coastguard Worker */ 542*54e60f84SAndroid Build Coastguard Worker uint8_t segment_reference_skipped : 1; 543*54e60f84SAndroid Build Coastguard Worker 544*54e60f84SAndroid Build Coastguard Worker uint8_t reserved : 4; 545*54e60f84SAndroid Build Coastguard Worker 546*54e60f84SAndroid Build Coastguard Worker } bits; 547*54e60f84SAndroid Build Coastguard Worker uint8_t value; 548*54e60f84SAndroid Build Coastguard Worker } seg_flags; 549*54e60f84SAndroid Build Coastguard Worker 550*54e60f84SAndroid Build Coastguard Worker /** \brief Specifies per segment Loop Filter Delta. 551*54e60f84SAndroid Build Coastguard Worker * Must be 0 when segmentation_enabled == 0. 552*54e60f84SAndroid Build Coastguard Worker * value range: [-63..63] 553*54e60f84SAndroid Build Coastguard Worker */ 554*54e60f84SAndroid Build Coastguard Worker int8_t segment_lf_level_delta; 555*54e60f84SAndroid Build Coastguard Worker 556*54e60f84SAndroid Build Coastguard Worker /** \brief Specifies per segment QIndex Delta. 557*54e60f84SAndroid Build Coastguard Worker * Must be 0 when segmentation_enabled == 0. 558*54e60f84SAndroid Build Coastguard Worker * value range: [-255..255] 559*54e60f84SAndroid Build Coastguard Worker */ 560*54e60f84SAndroid Build Coastguard Worker int16_t segment_qindex_delta; 561*54e60f84SAndroid Build Coastguard Worker 562*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 563*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_LOW]; 564*54e60f84SAndroid Build Coastguard Worker } VAEncSegParamVP9; 565*54e60f84SAndroid Build Coastguard Worker 566*54e60f84SAndroid Build Coastguard Worker /** 567*54e60f84SAndroid Build Coastguard Worker * Structure to convey all segment related information. 568*54e60f84SAndroid Build Coastguard Worker * If segmentation is disabled, this data structure is still required. 569*54e60f84SAndroid Build Coastguard Worker * In this case, only seg_data[0] contains valid data. 570*54e60f84SAndroid Build Coastguard Worker * This buffer is sent once per frame. 571*54e60f84SAndroid Build Coastguard Worker * 572*54e60f84SAndroid Build Coastguard Worker * The buffer is created with VABufferType VAQMatrixBufferType. 573*54e60f84SAndroid Build Coastguard Worker * 574*54e60f84SAndroid Build Coastguard Worker */ 575*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncMiscParameterTypeVP9PerSegmantParam { 576*54e60f84SAndroid Build Coastguard Worker /** 577*54e60f84SAndroid Build Coastguard Worker * Parameters for 8 segments. 578*54e60f84SAndroid Build Coastguard Worker */ 579*54e60f84SAndroid Build Coastguard Worker VAEncSegParamVP9 seg_data[8]; 580*54e60f84SAndroid Build Coastguard Worker 581*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 582*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_LOW]; 583*54e60f84SAndroid Build Coastguard Worker } VAEncMiscParameterTypeVP9PerSegmantParam; 584*54e60f84SAndroid Build Coastguard Worker 585*54e60f84SAndroid Build Coastguard Worker 586*54e60f84SAndroid Build Coastguard Worker /** 587*54e60f84SAndroid Build Coastguard Worker * \brief VP9 Block Segmentation ID Buffer 588*54e60f84SAndroid Build Coastguard Worker * 589*54e60f84SAndroid Build Coastguard Worker * The application provides a buffer of VAEncMacroblockMapBufferType containing 590*54e60f84SAndroid Build Coastguard Worker * the initial segmentation id for each 8x8 block, one byte each, in raster scan order. 591*54e60f84SAndroid Build Coastguard Worker * Rate control may reassign it. For example, a 640x480 video, the buffer has 4800 entries. 592*54e60f84SAndroid Build Coastguard Worker * The value of each entry should be in the range [0..7], inclusive. 593*54e60f84SAndroid Build Coastguard Worker * If segmentation is not enabled, the application does not need to provide it. 594*54e60f84SAndroid Build Coastguard Worker */ 595*54e60f84SAndroid Build Coastguard Worker 596*54e60f84SAndroid Build Coastguard Worker 597*54e60f84SAndroid Build Coastguard Worker /**@}*/ 598*54e60f84SAndroid Build Coastguard Worker 599*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus 600*54e60f84SAndroid Build Coastguard Worker } 601*54e60f84SAndroid Build Coastguard Worker #endif 602*54e60f84SAndroid Build Coastguard Worker 603*54e60f84SAndroid Build Coastguard Worker #endif /* VA_ENC_VP9_H */ 604