1*54e60f84SAndroid Build Coastguard Worker /* 2*54e60f84SAndroid Build Coastguard Worker * Copyright (c) 2019 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_dec_av1.h 27*54e60f84SAndroid Build Coastguard Worker * \brief The AV1 decoding API 28*54e60f84SAndroid Build Coastguard Worker * 29*54e60f84SAndroid Build Coastguard Worker * This file contains the \ref api_dec_av1 "AV1 decoding API". 30*54e60f84SAndroid Build Coastguard Worker */ 31*54e60f84SAndroid Build Coastguard Worker 32*54e60f84SAndroid Build Coastguard Worker #ifndef VA_DEC_AV1_H 33*54e60f84SAndroid Build Coastguard Worker #define VA_DEC_AV1_H 34*54e60f84SAndroid Build Coastguard Worker 35*54e60f84SAndroid Build Coastguard Worker #include <stdint.h> 36*54e60f84SAndroid Build Coastguard Worker 37*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus 38*54e60f84SAndroid Build Coastguard Worker extern "C" { 39*54e60f84SAndroid Build Coastguard Worker #endif 40*54e60f84SAndroid Build Coastguard Worker 41*54e60f84SAndroid Build Coastguard Worker /** 42*54e60f84SAndroid Build Coastguard Worker * \defgroup api_dec_av1 AV1 decoding API 43*54e60f84SAndroid Build Coastguard Worker * 44*54e60f84SAndroid Build Coastguard Worker * This AV1 decoding API supports 8-bit/10bit 420 format only. 45*54e60f84SAndroid Build Coastguard Worker * 46*54e60f84SAndroid Build Coastguard Worker * @{ 47*54e60f84SAndroid Build Coastguard Worker */ 48*54e60f84SAndroid Build Coastguard Worker 49*54e60f84SAndroid Build Coastguard Worker /** Attribute value for VAConfigAttribDecAV1Features. 50*54e60f84SAndroid Build Coastguard Worker * 51*54e60f84SAndroid Build Coastguard Worker * This attribute decribes the supported features of a AV1 52*54e60f84SAndroid Build Coastguard Worker * decoder configuration. 53*54e60f84SAndroid Build Coastguard Worker * 54*54e60f84SAndroid Build Coastguard Worker */ 55*54e60f84SAndroid Build Coastguard Worker typedef union VAConfigAttribValDecAV1Features { 56*54e60f84SAndroid Build Coastguard Worker struct { 57*54e60f84SAndroid Build Coastguard Worker /** large scale tile 58*54e60f84SAndroid Build Coastguard Worker * 59*54e60f84SAndroid Build Coastguard Worker * This conveys whether AV1 large scale tile is supported by HW. 60*54e60f84SAndroid Build Coastguard Worker * 0 - unsupported, 1 - supported. 61*54e60f84SAndroid Build Coastguard Worker */ 62*54e60f84SAndroid Build Coastguard Worker uint32_t lst_support : 2; 63*54e60f84SAndroid Build Coastguard Worker /* Reserved for future use. */ 64*54e60f84SAndroid Build Coastguard Worker uint32_t reserved : 30; 65*54e60f84SAndroid Build Coastguard Worker } bits; 66*54e60f84SAndroid Build Coastguard Worker uint32_t value; 67*54e60f84SAndroid Build Coastguard Worker } VAConfigAttribValDecAV1Features; 68*54e60f84SAndroid Build Coastguard Worker 69*54e60f84SAndroid Build Coastguard Worker /** 70*54e60f84SAndroid Build Coastguard Worker * \brief AV1 Decoding Picture Parameter Buffer Structure 71*54e60f84SAndroid Build Coastguard Worker * 72*54e60f84SAndroid Build Coastguard Worker * This structure conveys picture level parameters. 73*54e60f84SAndroid Build Coastguard Worker * App should send a surface with this data structure down to VAAPI once 74*54e60f84SAndroid Build Coastguard Worker * per frame. 75*54e60f84SAndroid Build Coastguard Worker * 76*54e60f84SAndroid Build Coastguard Worker */ 77*54e60f84SAndroid Build Coastguard Worker 78*54e60f84SAndroid Build Coastguard Worker /** \brief Segmentation Information 79*54e60f84SAndroid Build Coastguard Worker */ 80*54e60f84SAndroid Build Coastguard Worker typedef struct _VASegmentationStructAV1 { 81*54e60f84SAndroid Build Coastguard Worker union { 82*54e60f84SAndroid Build Coastguard Worker struct { 83*54e60f84SAndroid Build Coastguard Worker /** Indicates whether segmentation map related syntax elements 84*54e60f84SAndroid Build Coastguard Worker * are present or not for current frame. If equal to 0, 85*54e60f84SAndroid Build Coastguard Worker * the segmentation map related syntax elements are 86*54e60f84SAndroid Build Coastguard Worker * not present for the current frame and the control flags of 87*54e60f84SAndroid Build Coastguard Worker * segmentation map related tables feature_data[][], and 88*54e60f84SAndroid Build Coastguard Worker * feature_mask[] are not valid and shall be ignored by accelerator. 89*54e60f84SAndroid Build Coastguard Worker */ 90*54e60f84SAndroid Build Coastguard Worker uint32_t enabled : 1; 91*54e60f84SAndroid Build Coastguard Worker /** Value 1 indicates that the segmentation map are updated 92*54e60f84SAndroid Build Coastguard Worker * during the decoding of this frame. 93*54e60f84SAndroid Build Coastguard Worker * Value 0 means that the segmentation map from the previous 94*54e60f84SAndroid Build Coastguard Worker * frame is used. 95*54e60f84SAndroid Build Coastguard Worker */ 96*54e60f84SAndroid Build Coastguard Worker uint32_t update_map : 1; 97*54e60f84SAndroid Build Coastguard Worker /** Value 1 indicates that the updates to the segmentation map 98*54e60f84SAndroid Build Coastguard Worker * are coded relative to the existing segmentation map. 99*54e60f84SAndroid Build Coastguard Worker * Value 0 indicates that the new segmentation map is coded 100*54e60f84SAndroid Build Coastguard Worker * without reference to the existing segmentation map. 101*54e60f84SAndroid Build Coastguard Worker */ 102*54e60f84SAndroid Build Coastguard Worker uint32_t temporal_update : 1; 103*54e60f84SAndroid Build Coastguard Worker /** Value 1 indicates that new parameters are about to be 104*54e60f84SAndroid Build Coastguard Worker * specified for each segment. 105*54e60f84SAndroid Build Coastguard Worker * Value 0 indicates that the segmentation parameters 106*54e60f84SAndroid Build Coastguard Worker * should keep their existing values. 107*54e60f84SAndroid Build Coastguard Worker */ 108*54e60f84SAndroid Build Coastguard Worker uint32_t update_data : 1; 109*54e60f84SAndroid Build Coastguard Worker 110*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 111*54e60f84SAndroid Build Coastguard Worker uint32_t reserved : 28; 112*54e60f84SAndroid Build Coastguard Worker } bits; 113*54e60f84SAndroid Build Coastguard Worker uint32_t value; 114*54e60f84SAndroid Build Coastguard Worker } segment_info_fields; 115*54e60f84SAndroid Build Coastguard Worker 116*54e60f84SAndroid Build Coastguard Worker /** \brief Segmentation parameters for current frame. 117*54e60f84SAndroid Build Coastguard Worker * feature_data[segment_id][feature_id] 118*54e60f84SAndroid Build Coastguard Worker * where segment_id has value range [0..7] indicating the segment id. 119*54e60f84SAndroid Build Coastguard Worker * and feature_id is defined as 120*54e60f84SAndroid Build Coastguard Worker typedef enum { 121*54e60f84SAndroid Build Coastguard Worker SEG_LVL_ALT_Q, // Use alternate Quantizer .... 122*54e60f84SAndroid Build Coastguard Worker SEG_LVL_ALT_LF_Y_V, // Use alternate loop filter value on y plane vertical 123*54e60f84SAndroid Build Coastguard Worker SEG_LVL_ALT_LF_Y_H, // Use alternate loop filter value on y plane horizontal 124*54e60f84SAndroid Build Coastguard Worker SEG_LVL_ALT_LF_U, // Use alternate loop filter value on u plane 125*54e60f84SAndroid Build Coastguard Worker SEG_LVL_ALT_LF_V, // Use alternate loop filter value on v plane 126*54e60f84SAndroid Build Coastguard Worker SEG_LVL_REF_FRAME, // Optional Segment reference frame 127*54e60f84SAndroid Build Coastguard Worker SEG_LVL_SKIP, // Optional Segment (0,0) + skip mode 128*54e60f84SAndroid Build Coastguard Worker SEG_LVL_GLOBALMV, 129*54e60f84SAndroid Build Coastguard Worker SEG_LVL_MAX 130*54e60f84SAndroid Build Coastguard Worker } SEG_LVL_FEATURES; 131*54e60f84SAndroid Build Coastguard Worker * feature_data[][] is equivalent to variable FeatureData[][] in spec, 132*54e60f84SAndroid Build Coastguard Worker * which is after clip3() operation. 133*54e60f84SAndroid Build Coastguard Worker * Clip3(x, y, z) = (z < x)? x : ((z > y)? y : z); 134*54e60f84SAndroid Build Coastguard Worker * The limit is defined in Segmentation_Feature_Max[ SEG_LVL_MAX ] = { 135*54e60f84SAndroid Build Coastguard Worker * 255, MAX_LOOP_FILTER, MAX_LOOP_FILTER, MAX_LOOP_FILTER, MAX_LOOP_FILTER, 7, 0, 0 } 136*54e60f84SAndroid Build Coastguard Worker */ 137*54e60f84SAndroid Build Coastguard Worker int16_t feature_data[8][8]; 138*54e60f84SAndroid Build Coastguard Worker 139*54e60f84SAndroid Build Coastguard Worker /** \brief indicates if a feature is enabled or not. 140*54e60f84SAndroid Build Coastguard Worker * Each bit field itself is the feature_id. Index is segment_id. 141*54e60f84SAndroid Build Coastguard Worker * feature_mask[segment_id] & (1 << feature_id) equal to 1 specify that the feature of 142*54e60f84SAndroid Build Coastguard Worker * feature_id for segment of segment_id is enabled, otherwise disabled. 143*54e60f84SAndroid Build Coastguard Worker */ 144*54e60f84SAndroid Build Coastguard Worker uint8_t feature_mask[8]; 145*54e60f84SAndroid Build Coastguard Worker 146*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 147*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_LOW]; 148*54e60f84SAndroid Build Coastguard Worker 149*54e60f84SAndroid Build Coastguard Worker } VASegmentationStructAV1; 150*54e60f84SAndroid Build Coastguard Worker 151*54e60f84SAndroid Build Coastguard Worker /** \brief Film Grain Information 152*54e60f84SAndroid Build Coastguard Worker */ 153*54e60f84SAndroid Build Coastguard Worker typedef struct _VAFilmGrainStructAV1 { 154*54e60f84SAndroid Build Coastguard Worker union { 155*54e60f84SAndroid Build Coastguard Worker struct { 156*54e60f84SAndroid Build Coastguard Worker /** \brief Specify whether or not film grain is applied on current frame. 157*54e60f84SAndroid Build Coastguard Worker * If set to 0, all the rest parameters should be set to zero 158*54e60f84SAndroid Build Coastguard Worker * and ignored. 159*54e60f84SAndroid Build Coastguard Worker */ 160*54e60f84SAndroid Build Coastguard Worker uint32_t apply_grain : 1; 161*54e60f84SAndroid Build Coastguard Worker uint32_t chroma_scaling_from_luma : 1; 162*54e60f84SAndroid Build Coastguard Worker uint32_t grain_scaling_minus_8 : 2; 163*54e60f84SAndroid Build Coastguard Worker uint32_t ar_coeff_lag : 2; 164*54e60f84SAndroid Build Coastguard Worker uint32_t ar_coeff_shift_minus_6 : 2; 165*54e60f84SAndroid Build Coastguard Worker uint32_t grain_scale_shift : 2; 166*54e60f84SAndroid Build Coastguard Worker uint32_t overlap_flag : 1; 167*54e60f84SAndroid Build Coastguard Worker uint32_t clip_to_restricted_range : 1; 168*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 169*54e60f84SAndroid Build Coastguard Worker uint32_t reserved : 20; 170*54e60f84SAndroid Build Coastguard Worker } bits; 171*54e60f84SAndroid Build Coastguard Worker uint32_t value; 172*54e60f84SAndroid Build Coastguard Worker } film_grain_info_fields; 173*54e60f84SAndroid Build Coastguard Worker 174*54e60f84SAndroid Build Coastguard Worker uint16_t grain_seed; 175*54e60f84SAndroid Build Coastguard Worker /* value range [0..14] */ 176*54e60f84SAndroid Build Coastguard Worker uint8_t num_y_points; 177*54e60f84SAndroid Build Coastguard Worker uint8_t point_y_value[14]; 178*54e60f84SAndroid Build Coastguard Worker uint8_t point_y_scaling[14]; 179*54e60f84SAndroid Build Coastguard Worker /* value range [0..10] */ 180*54e60f84SAndroid Build Coastguard Worker uint8_t num_cb_points; 181*54e60f84SAndroid Build Coastguard Worker uint8_t point_cb_value[10]; 182*54e60f84SAndroid Build Coastguard Worker uint8_t point_cb_scaling[10]; 183*54e60f84SAndroid Build Coastguard Worker /* value range [0..10] */ 184*54e60f84SAndroid Build Coastguard Worker uint8_t num_cr_points; 185*54e60f84SAndroid Build Coastguard Worker uint8_t point_cr_value[10]; 186*54e60f84SAndroid Build Coastguard Worker uint8_t point_cr_scaling[10]; 187*54e60f84SAndroid Build Coastguard Worker /* value range [-128..127] */ 188*54e60f84SAndroid Build Coastguard Worker int8_t ar_coeffs_y[24]; 189*54e60f84SAndroid Build Coastguard Worker int8_t ar_coeffs_cb[25]; 190*54e60f84SAndroid Build Coastguard Worker int8_t ar_coeffs_cr[25]; 191*54e60f84SAndroid Build Coastguard Worker uint8_t cb_mult; 192*54e60f84SAndroid Build Coastguard Worker uint8_t cb_luma_mult; 193*54e60f84SAndroid Build Coastguard Worker uint16_t cb_offset; 194*54e60f84SAndroid Build Coastguard Worker uint8_t cr_mult; 195*54e60f84SAndroid Build Coastguard Worker uint8_t cr_luma_mult; 196*54e60f84SAndroid Build Coastguard Worker uint16_t cr_offset; 197*54e60f84SAndroid Build Coastguard Worker 198*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 199*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_LOW]; 200*54e60f84SAndroid Build Coastguard Worker 201*54e60f84SAndroid Build Coastguard Worker } VAFilmGrainStructAV1; 202*54e60f84SAndroid Build Coastguard Worker 203*54e60f84SAndroid Build Coastguard Worker typedef enum { 204*54e60f84SAndroid Build Coastguard Worker /** identity transformation, 0-parameter */ 205*54e60f84SAndroid Build Coastguard Worker VAAV1TransformationIdentity = 0, 206*54e60f84SAndroid Build Coastguard Worker /** translational motion, 2-parameter */ 207*54e60f84SAndroid Build Coastguard Worker VAAV1TransformationTranslation = 1, 208*54e60f84SAndroid Build Coastguard Worker /** simplified affine with rotation + zoom only, 4-parameter */ 209*54e60f84SAndroid Build Coastguard Worker VAAV1TransformationRotzoom = 2, 210*54e60f84SAndroid Build Coastguard Worker /** affine, 6-parameter */ 211*54e60f84SAndroid Build Coastguard Worker VAAV1TransformationAffine = 3, 212*54e60f84SAndroid Build Coastguard Worker /** transformation count */ 213*54e60f84SAndroid Build Coastguard Worker VAAV1TransformationCount 214*54e60f84SAndroid Build Coastguard Worker } VAAV1TransformationType; 215*54e60f84SAndroid Build Coastguard Worker 216*54e60f84SAndroid Build Coastguard Worker typedef struct _VAWarpedMotionParamsAV1 { 217*54e60f84SAndroid Build Coastguard Worker 218*54e60f84SAndroid Build Coastguard Worker /** \brief Specify the type of warped motion */ 219*54e60f84SAndroid Build Coastguard Worker VAAV1TransformationType wmtype; 220*54e60f84SAndroid Build Coastguard Worker 221*54e60f84SAndroid Build Coastguard Worker /** \brief Specify warp motion parameters 222*54e60f84SAndroid Build Coastguard Worker * wm.wmmat[] corresponds to gm_params[][] in spec. 223*54e60f84SAndroid Build Coastguard Worker * Details in AV1 spec section 5.9.24 or refer to libaom code 224*54e60f84SAndroid Build Coastguard Worker * https://aomedia.googlesource.com/aom/+/refs/heads/master/av1/decoder/decodeframe.c 225*54e60f84SAndroid Build Coastguard Worker */ 226*54e60f84SAndroid Build Coastguard Worker int32_t wmmat[8]; 227*54e60f84SAndroid Build Coastguard Worker 228*54e60f84SAndroid Build Coastguard Worker /* valid or invalid on affine set */ 229*54e60f84SAndroid Build Coastguard Worker uint8_t invalid; 230*54e60f84SAndroid Build Coastguard Worker 231*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 232*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_LOW]; 233*54e60f84SAndroid Build Coastguard Worker 234*54e60f84SAndroid Build Coastguard Worker } VAWarpedMotionParamsAV1; 235*54e60f84SAndroid Build Coastguard Worker 236*54e60f84SAndroid Build Coastguard Worker /** 237*54e60f84SAndroid Build Coastguard Worker * \brief AV1 Decoding Picture Parameter Buffer Structure 238*54e60f84SAndroid Build Coastguard Worker * 239*54e60f84SAndroid Build Coastguard Worker * This structure conveys picture level parameters and should be sent once 240*54e60f84SAndroid Build Coastguard Worker * per frame. 241*54e60f84SAndroid Build Coastguard Worker * 242*54e60f84SAndroid Build Coastguard Worker */ 243*54e60f84SAndroid Build Coastguard Worker typedef struct _VADecPictureParameterBufferAV1 { 244*54e60f84SAndroid Build Coastguard Worker /**@{*/ 245*54e60f84SAndroid Build Coastguard Worker 246*54e60f84SAndroid Build Coastguard Worker /** \brief sequence level information 247*54e60f84SAndroid Build Coastguard Worker */ 248*54e60f84SAndroid Build Coastguard Worker 249*54e60f84SAndroid Build Coastguard Worker /** \brief AV1 bit stream profile 250*54e60f84SAndroid Build Coastguard Worker */ 251*54e60f84SAndroid Build Coastguard Worker uint8_t profile; 252*54e60f84SAndroid Build Coastguard Worker 253*54e60f84SAndroid Build Coastguard Worker uint8_t order_hint_bits_minus_1; 254*54e60f84SAndroid Build Coastguard Worker 255*54e60f84SAndroid Build Coastguard Worker /** \brief bit depth index 256*54e60f84SAndroid Build Coastguard Worker * value range [0..2] 257*54e60f84SAndroid Build Coastguard Worker * 0 - bit depth 8; 258*54e60f84SAndroid Build Coastguard Worker * 1 - bit depth 10; 259*54e60f84SAndroid Build Coastguard Worker * 2 - bit depth 12; 260*54e60f84SAndroid Build Coastguard Worker */ 261*54e60f84SAndroid Build Coastguard Worker uint8_t bit_depth_idx; 262*54e60f84SAndroid Build Coastguard Worker 263*54e60f84SAndroid Build Coastguard Worker /** \brief corresponds to AV1 spec variable of the same name. */ 264*54e60f84SAndroid Build Coastguard Worker uint8_t matrix_coefficients; 265*54e60f84SAndroid Build Coastguard Worker 266*54e60f84SAndroid Build Coastguard Worker union { 267*54e60f84SAndroid Build Coastguard Worker struct { 268*54e60f84SAndroid Build Coastguard Worker uint32_t still_picture : 1; 269*54e60f84SAndroid Build Coastguard Worker uint32_t use_128x128_superblock : 1; 270*54e60f84SAndroid Build Coastguard Worker uint32_t enable_filter_intra : 1; 271*54e60f84SAndroid Build Coastguard Worker uint32_t enable_intra_edge_filter : 1; 272*54e60f84SAndroid Build Coastguard Worker 273*54e60f84SAndroid Build Coastguard Worker /** read_compound_tools */ 274*54e60f84SAndroid Build Coastguard Worker uint32_t enable_interintra_compound : 1; 275*54e60f84SAndroid Build Coastguard Worker uint32_t enable_masked_compound : 1; 276*54e60f84SAndroid Build Coastguard Worker 277*54e60f84SAndroid Build Coastguard Worker uint32_t enable_dual_filter : 1; 278*54e60f84SAndroid Build Coastguard Worker uint32_t enable_order_hint : 1; 279*54e60f84SAndroid Build Coastguard Worker uint32_t enable_jnt_comp : 1; 280*54e60f84SAndroid Build Coastguard Worker uint32_t enable_cdef : 1; 281*54e60f84SAndroid Build Coastguard Worker uint32_t mono_chrome : 1; 282*54e60f84SAndroid Build Coastguard Worker uint32_t color_range : 1; 283*54e60f84SAndroid Build Coastguard Worker uint32_t subsampling_x : 1; 284*54e60f84SAndroid Build Coastguard Worker uint32_t subsampling_y : 1; 285*54e60f84SAndroid Build Coastguard Worker va_deprecated uint32_t chroma_sample_position : 1; 286*54e60f84SAndroid Build Coastguard Worker uint32_t film_grain_params_present : 1; 287*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 288*54e60f84SAndroid Build Coastguard Worker uint32_t reserved : 16; 289*54e60f84SAndroid Build Coastguard Worker } fields; 290*54e60f84SAndroid Build Coastguard Worker uint32_t value; 291*54e60f84SAndroid Build Coastguard Worker } seq_info_fields; 292*54e60f84SAndroid Build Coastguard Worker 293*54e60f84SAndroid Build Coastguard Worker /** \brief Picture level information 294*54e60f84SAndroid Build Coastguard Worker */ 295*54e60f84SAndroid Build Coastguard Worker 296*54e60f84SAndroid Build Coastguard Worker /** \brief buffer description of decoded current picture 297*54e60f84SAndroid Build Coastguard Worker */ 298*54e60f84SAndroid Build Coastguard Worker VASurfaceID current_frame; 299*54e60f84SAndroid Build Coastguard Worker 300*54e60f84SAndroid Build Coastguard Worker /** \brief display buffer of current picture 301*54e60f84SAndroid Build Coastguard Worker * Used for film grain applied decoded picture. 302*54e60f84SAndroid Build Coastguard Worker * Valid only when apply_grain equals 1. 303*54e60f84SAndroid Build Coastguard Worker */ 304*54e60f84SAndroid Build Coastguard Worker VASurfaceID current_display_picture; 305*54e60f84SAndroid Build Coastguard Worker 306*54e60f84SAndroid Build Coastguard Worker /** \brief number of anchor frames for large scale tile 307*54e60f84SAndroid Build Coastguard Worker * This parameter gives the number of entries of anchor_frames_list[]. 308*54e60f84SAndroid Build Coastguard Worker * Value range [0..128]. 309*54e60f84SAndroid Build Coastguard Worker */ 310*54e60f84SAndroid Build Coastguard Worker uint8_t anchor_frames_num; 311*54e60f84SAndroid Build Coastguard Worker 312*54e60f84SAndroid Build Coastguard Worker /** \brief anchor frame list for large scale tile 313*54e60f84SAndroid Build Coastguard Worker * For large scale tile applications, the anchor frames could come from 314*54e60f84SAndroid Build Coastguard Worker * previously decoded frames in current sequence (aka. internal), or 315*54e60f84SAndroid Build Coastguard Worker * from external sources. 316*54e60f84SAndroid Build Coastguard Worker * For external anchor frames, application should call API 317*54e60f84SAndroid Build Coastguard Worker * vaCreateBuffer() to generate frame buffers and populate them with 318*54e60f84SAndroid Build Coastguard Worker * pixel frames. And this process may happen multiple times. 319*54e60f84SAndroid Build Coastguard Worker * The array anchor_frames_list[] is used to register all the available 320*54e60f84SAndroid Build Coastguard Worker * anchor frames from both external and internal, up to the current 321*54e60f84SAndroid Build Coastguard Worker * frame instance. If a previously registerred anchor frame is no longer 322*54e60f84SAndroid Build Coastguard Worker * needed, it should be removed from the list. But it does not prevent 323*54e60f84SAndroid Build Coastguard Worker * applications from relacing the frame buffer with new anchor frames. 324*54e60f84SAndroid Build Coastguard Worker * Please note that the internal anchor frames may not still be present 325*54e60f84SAndroid Build Coastguard Worker * in the current DPB buffer. But if it is in the anchor_frames_list[], 326*54e60f84SAndroid Build Coastguard Worker * it should not be replaced with other frames or removed from memory 327*54e60f84SAndroid Build Coastguard Worker * until it is not shown in the list. 328*54e60f84SAndroid Build Coastguard Worker * This number of entries of the list is given by parameter anchor_frames_num. 329*54e60f84SAndroid Build Coastguard Worker */ 330*54e60f84SAndroid Build Coastguard Worker VASurfaceID *anchor_frames_list; 331*54e60f84SAndroid Build Coastguard Worker 332*54e60f84SAndroid Build Coastguard Worker /** \brief Picture resolution minus 1 333*54e60f84SAndroid Build Coastguard Worker * Picture original resolution. If SuperRes is enabled, 334*54e60f84SAndroid Build Coastguard Worker * this is the upscaled resolution. 335*54e60f84SAndroid Build Coastguard Worker * value range [0..65535] 336*54e60f84SAndroid Build Coastguard Worker */ 337*54e60f84SAndroid Build Coastguard Worker uint16_t frame_width_minus1; 338*54e60f84SAndroid Build Coastguard Worker uint16_t frame_height_minus1; 339*54e60f84SAndroid Build Coastguard Worker 340*54e60f84SAndroid Build Coastguard Worker /** \brief Output frame buffer size in unit of tiles 341*54e60f84SAndroid Build Coastguard Worker * Valid only when large_scale_tile equals 1. 342*54e60f84SAndroid Build Coastguard Worker * value range [0..65535] 343*54e60f84SAndroid Build Coastguard Worker */ 344*54e60f84SAndroid Build Coastguard Worker uint16_t output_frame_width_in_tiles_minus_1; 345*54e60f84SAndroid Build Coastguard Worker uint16_t output_frame_height_in_tiles_minus_1; 346*54e60f84SAndroid Build Coastguard Worker 347*54e60f84SAndroid Build Coastguard Worker /** \brief Surface indices of reference frames in DPB. 348*54e60f84SAndroid Build Coastguard Worker * 349*54e60f84SAndroid Build Coastguard Worker * Contains a list of uncompressed frame buffer surface indices as references. 350*54e60f84SAndroid Build Coastguard Worker * Application needs to make sure all the entries point to valid frames 351*54e60f84SAndroid Build Coastguard Worker * except for intra frames by checking ref_frame_id[]. If missing frame 352*54e60f84SAndroid Build Coastguard Worker * is identified, application may choose to perform error recovery by 353*54e60f84SAndroid Build Coastguard Worker * pointing problematic index to an alternative frame buffer. 354*54e60f84SAndroid Build Coastguard Worker * Driver is not responsible to validate reference frames' id. 355*54e60f84SAndroid Build Coastguard Worker */ 356*54e60f84SAndroid Build Coastguard Worker VASurfaceID ref_frame_map[8]; 357*54e60f84SAndroid Build Coastguard Worker 358*54e60f84SAndroid Build Coastguard Worker /** \brief Reference frame indices. 359*54e60f84SAndroid Build Coastguard Worker * 360*54e60f84SAndroid Build Coastguard Worker * Contains a list of indices into ref_frame_map[8]. 361*54e60f84SAndroid Build Coastguard Worker * It specifies the reference frame correspondence. 362*54e60f84SAndroid Build Coastguard Worker * The indices of the array are defined as [LAST_FRAME – LAST_FRAME, 363*54e60f84SAndroid Build Coastguard Worker * LAST2_FRAME – LAST_FRAME, …, ALTREF_FRAME – LAST_FRAME], where each 364*54e60f84SAndroid Build Coastguard Worker * symbol is defined as: 365*54e60f84SAndroid Build Coastguard Worker * enum{INTRA_FRAME = 0, LAST_FRAME, LAST2_FRAME, LAST3_FRAME, GOLDEN_FRAME, 366*54e60f84SAndroid Build Coastguard Worker * BWDREF_FRAME, ALTREF2_FRAME, ALTREF_FRAME}; 367*54e60f84SAndroid Build Coastguard Worker */ 368*54e60f84SAndroid Build Coastguard Worker uint8_t ref_frame_idx[7]; 369*54e60f84SAndroid Build Coastguard Worker 370*54e60f84SAndroid Build Coastguard Worker /** \brief primary reference frame index 371*54e60f84SAndroid Build Coastguard Worker * Index into ref_frame_idx[], specifying which reference frame contains 372*54e60f84SAndroid Build Coastguard Worker * propagated info that should be loaded at the start of the frame. 373*54e60f84SAndroid Build Coastguard Worker * When value equals PRIMARY_REF_NONE (7), it indicates there is 374*54e60f84SAndroid Build Coastguard Worker * no primary reference frame. 375*54e60f84SAndroid Build Coastguard Worker * value range [0..7] 376*54e60f84SAndroid Build Coastguard Worker */ 377*54e60f84SAndroid Build Coastguard Worker uint8_t primary_ref_frame; 378*54e60f84SAndroid Build Coastguard Worker 379*54e60f84SAndroid Build Coastguard Worker uint8_t order_hint; 380*54e60f84SAndroid Build Coastguard Worker 381*54e60f84SAndroid Build Coastguard Worker VASegmentationStructAV1 seg_info; 382*54e60f84SAndroid Build Coastguard Worker VAFilmGrainStructAV1 film_grain_info; 383*54e60f84SAndroid Build Coastguard Worker 384*54e60f84SAndroid Build Coastguard Worker /** \brief tile structure 385*54e60f84SAndroid Build Coastguard Worker * When uniform_tile_spacing_flag == 1, width_in_sbs_minus_1[] and 386*54e60f84SAndroid Build Coastguard Worker * height_in_sbs_minus_1[] should be ignored, which will be generated 387*54e60f84SAndroid Build Coastguard Worker * by driver based on tile_cols and tile_rows. 388*54e60f84SAndroid Build Coastguard Worker */ 389*54e60f84SAndroid Build Coastguard Worker uint8_t tile_cols; 390*54e60f84SAndroid Build Coastguard Worker uint8_t tile_rows; 391*54e60f84SAndroid Build Coastguard Worker 392*54e60f84SAndroid Build Coastguard Worker /* The width/height of a tile minus 1 in units of superblocks. Though the 393*54e60f84SAndroid Build Coastguard Worker * maximum number of tiles is 64, since ones of the last tile are computed 394*54e60f84SAndroid Build Coastguard Worker * from ones of the other tiles and frame_width/height, they are not 395*54e60f84SAndroid Build Coastguard Worker * necessarily specified. 396*54e60f84SAndroid Build Coastguard Worker */ 397*54e60f84SAndroid Build Coastguard Worker uint16_t width_in_sbs_minus_1[63]; 398*54e60f84SAndroid Build Coastguard Worker uint16_t height_in_sbs_minus_1[63]; 399*54e60f84SAndroid Build Coastguard Worker 400*54e60f84SAndroid Build Coastguard Worker /** \brief number of tiles minus 1 in large scale tile list 401*54e60f84SAndroid Build Coastguard Worker * Same as AV1 semantic element. 402*54e60f84SAndroid Build Coastguard Worker * Valid only when large_scale_tiles == 1. 403*54e60f84SAndroid Build Coastguard Worker */ 404*54e60f84SAndroid Build Coastguard Worker uint16_t tile_count_minus_1; 405*54e60f84SAndroid Build Coastguard Worker 406*54e60f84SAndroid Build Coastguard Worker /* specify the tile index for context updating */ 407*54e60f84SAndroid Build Coastguard Worker uint16_t context_update_tile_id; 408*54e60f84SAndroid Build Coastguard Worker 409*54e60f84SAndroid Build Coastguard Worker union { 410*54e60f84SAndroid Build Coastguard Worker struct { 411*54e60f84SAndroid Build Coastguard Worker /** \brief flags for current picture 412*54e60f84SAndroid Build Coastguard Worker * same syntax and semantic as those in AV1 code 413*54e60f84SAndroid Build Coastguard Worker */ 414*54e60f84SAndroid Build Coastguard Worker 415*54e60f84SAndroid Build Coastguard Worker /** \brief Frame Type 416*54e60f84SAndroid Build Coastguard Worker * 0: KEY_FRAME; 417*54e60f84SAndroid Build Coastguard Worker * 1: INTER_FRAME; 418*54e60f84SAndroid Build Coastguard Worker * 2: INTRA_ONLY_FRAME; 419*54e60f84SAndroid Build Coastguard Worker * 3: SWITCH_FRAME 420*54e60f84SAndroid Build Coastguard Worker * For SWITCH_FRAME, application shall set error_resilient_mode = 1, 421*54e60f84SAndroid Build Coastguard Worker * refresh_frame_flags, etc. appropriately. And driver will convert it 422*54e60f84SAndroid Build Coastguard Worker * to INTER_FRAME. 423*54e60f84SAndroid Build Coastguard Worker */ 424*54e60f84SAndroid Build Coastguard Worker uint32_t frame_type : 2; 425*54e60f84SAndroid Build Coastguard Worker uint32_t show_frame : 1; 426*54e60f84SAndroid Build Coastguard Worker uint32_t showable_frame : 1; 427*54e60f84SAndroid Build Coastguard Worker uint32_t error_resilient_mode : 1; 428*54e60f84SAndroid Build Coastguard Worker uint32_t disable_cdf_update : 1; 429*54e60f84SAndroid Build Coastguard Worker uint32_t allow_screen_content_tools : 1; 430*54e60f84SAndroid Build Coastguard Worker uint32_t force_integer_mv : 1; 431*54e60f84SAndroid Build Coastguard Worker uint32_t allow_intrabc : 1; 432*54e60f84SAndroid Build Coastguard Worker uint32_t use_superres : 1; 433*54e60f84SAndroid Build Coastguard Worker uint32_t allow_high_precision_mv : 1; 434*54e60f84SAndroid Build Coastguard Worker uint32_t is_motion_mode_switchable : 1; 435*54e60f84SAndroid Build Coastguard Worker uint32_t use_ref_frame_mvs : 1; 436*54e60f84SAndroid Build Coastguard Worker /* disable_frame_end_update_cdf is coded as refresh_frame_context. */ 437*54e60f84SAndroid Build Coastguard Worker uint32_t disable_frame_end_update_cdf : 1; 438*54e60f84SAndroid Build Coastguard Worker uint32_t uniform_tile_spacing_flag : 1; 439*54e60f84SAndroid Build Coastguard Worker uint32_t allow_warped_motion : 1; 440*54e60f84SAndroid Build Coastguard Worker /** \brief indicate if current frame in large scale tile mode */ 441*54e60f84SAndroid Build Coastguard Worker uint32_t large_scale_tile : 1; 442*54e60f84SAndroid Build Coastguard Worker 443*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 444*54e60f84SAndroid Build Coastguard Worker uint32_t reserved : 15; 445*54e60f84SAndroid Build Coastguard Worker } bits; 446*54e60f84SAndroid Build Coastguard Worker uint32_t value; 447*54e60f84SAndroid Build Coastguard Worker } pic_info_fields; 448*54e60f84SAndroid Build Coastguard Worker 449*54e60f84SAndroid Build Coastguard Worker /** \brief Supper resolution scale denominator. 450*54e60f84SAndroid Build Coastguard Worker * When use_superres=1, superres_scale_denominator must be in the range [9..16]. 451*54e60f84SAndroid Build Coastguard Worker * When use_superres=0, superres_scale_denominator must be 8. 452*54e60f84SAndroid Build Coastguard Worker */ 453*54e60f84SAndroid Build Coastguard Worker uint8_t superres_scale_denominator; 454*54e60f84SAndroid Build Coastguard Worker 455*54e60f84SAndroid Build Coastguard Worker /** \brief Interpolation filter. 456*54e60f84SAndroid Build Coastguard Worker * value range [0..4] 457*54e60f84SAndroid Build Coastguard Worker */ 458*54e60f84SAndroid Build Coastguard Worker uint8_t interp_filter; 459*54e60f84SAndroid Build Coastguard Worker 460*54e60f84SAndroid Build Coastguard Worker /** \brief luma loop filter levels. 461*54e60f84SAndroid Build Coastguard Worker * value range [0..63]. 462*54e60f84SAndroid Build Coastguard Worker */ 463*54e60f84SAndroid Build Coastguard Worker uint8_t filter_level[2]; 464*54e60f84SAndroid Build Coastguard Worker 465*54e60f84SAndroid Build Coastguard Worker /** \brief chroma loop filter levels. 466*54e60f84SAndroid Build Coastguard Worker * value range [0..63]. 467*54e60f84SAndroid Build Coastguard Worker */ 468*54e60f84SAndroid Build Coastguard Worker uint8_t filter_level_u; 469*54e60f84SAndroid Build Coastguard Worker uint8_t filter_level_v; 470*54e60f84SAndroid Build Coastguard Worker 471*54e60f84SAndroid Build Coastguard Worker union { 472*54e60f84SAndroid Build Coastguard Worker struct { 473*54e60f84SAndroid Build Coastguard Worker /** \brief flags for reference pictures 474*54e60f84SAndroid Build Coastguard Worker * same syntax and semantic as those in AV1 code 475*54e60f84SAndroid Build Coastguard Worker */ 476*54e60f84SAndroid Build Coastguard Worker uint8_t sharpness_level : 3; 477*54e60f84SAndroid Build Coastguard Worker uint8_t mode_ref_delta_enabled : 1; 478*54e60f84SAndroid Build Coastguard Worker uint8_t mode_ref_delta_update : 1; 479*54e60f84SAndroid Build Coastguard Worker 480*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 481*54e60f84SAndroid Build Coastguard Worker uint8_t reserved : 3; 482*54e60f84SAndroid Build Coastguard Worker } bits; 483*54e60f84SAndroid Build Coastguard Worker uint8_t value; 484*54e60f84SAndroid Build Coastguard Worker } loop_filter_info_fields; 485*54e60f84SAndroid Build Coastguard Worker 486*54e60f84SAndroid Build Coastguard Worker /** \brief The adjustment needed for the filter level based on 487*54e60f84SAndroid Build Coastguard Worker * the chosen reference frame. 488*54e60f84SAndroid Build Coastguard Worker * value range [-64..63]. 489*54e60f84SAndroid Build Coastguard Worker */ 490*54e60f84SAndroid Build Coastguard Worker int8_t ref_deltas[8]; 491*54e60f84SAndroid Build Coastguard Worker 492*54e60f84SAndroid Build Coastguard Worker /** \brief The adjustment needed for the filter level based on 493*54e60f84SAndroid Build Coastguard Worker * the chosen mode. 494*54e60f84SAndroid Build Coastguard Worker * value range [-64..63]. 495*54e60f84SAndroid Build Coastguard Worker */ 496*54e60f84SAndroid Build Coastguard Worker int8_t mode_deltas[2]; 497*54e60f84SAndroid Build Coastguard Worker 498*54e60f84SAndroid Build Coastguard Worker /** \brief quantization 499*54e60f84SAndroid Build Coastguard Worker */ 500*54e60f84SAndroid Build Coastguard Worker /** \brief Y AC index 501*54e60f84SAndroid Build Coastguard Worker * value range [0..255] 502*54e60f84SAndroid Build Coastguard Worker */ 503*54e60f84SAndroid Build Coastguard Worker uint8_t base_qindex; 504*54e60f84SAndroid Build Coastguard Worker /** \brief Y DC delta from Y AC 505*54e60f84SAndroid Build Coastguard Worker * value range [-64..63] 506*54e60f84SAndroid Build Coastguard Worker */ 507*54e60f84SAndroid Build Coastguard Worker int8_t y_dc_delta_q; 508*54e60f84SAndroid Build Coastguard Worker /** \brief U DC delta from Y AC 509*54e60f84SAndroid Build Coastguard Worker * value range [-64..63] 510*54e60f84SAndroid Build Coastguard Worker */ 511*54e60f84SAndroid Build Coastguard Worker int8_t u_dc_delta_q; 512*54e60f84SAndroid Build Coastguard Worker /** \brief U AC delta from Y AC 513*54e60f84SAndroid Build Coastguard Worker * value range [-64..63] 514*54e60f84SAndroid Build Coastguard Worker */ 515*54e60f84SAndroid Build Coastguard Worker int8_t u_ac_delta_q; 516*54e60f84SAndroid Build Coastguard Worker /** \brief V DC delta from Y AC 517*54e60f84SAndroid Build Coastguard Worker * value range [-64..63] 518*54e60f84SAndroid Build Coastguard Worker */ 519*54e60f84SAndroid Build Coastguard Worker int8_t v_dc_delta_q; 520*54e60f84SAndroid Build Coastguard Worker /** \brief V AC delta from Y AC 521*54e60f84SAndroid Build Coastguard Worker * value range [-64..63] 522*54e60f84SAndroid Build Coastguard Worker */ 523*54e60f84SAndroid Build Coastguard Worker int8_t v_ac_delta_q; 524*54e60f84SAndroid Build Coastguard Worker 525*54e60f84SAndroid Build Coastguard Worker /** \brief quantization_matrix 526*54e60f84SAndroid Build Coastguard Worker */ 527*54e60f84SAndroid Build Coastguard Worker union { 528*54e60f84SAndroid Build Coastguard Worker struct { 529*54e60f84SAndroid Build Coastguard Worker uint16_t using_qmatrix : 1; 530*54e60f84SAndroid Build Coastguard Worker /** \brief qm level 531*54e60f84SAndroid Build Coastguard Worker * value range [0..15] 532*54e60f84SAndroid Build Coastguard Worker * Invalid if using_qmatrix equals 0. 533*54e60f84SAndroid Build Coastguard Worker */ 534*54e60f84SAndroid Build Coastguard Worker uint16_t qm_y : 4; 535*54e60f84SAndroid Build Coastguard Worker uint16_t qm_u : 4; 536*54e60f84SAndroid Build Coastguard Worker uint16_t qm_v : 4; 537*54e60f84SAndroid Build Coastguard Worker 538*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 539*54e60f84SAndroid Build Coastguard Worker uint16_t reserved : 3; 540*54e60f84SAndroid Build Coastguard Worker } bits; 541*54e60f84SAndroid Build Coastguard Worker uint16_t value; 542*54e60f84SAndroid Build Coastguard Worker } qmatrix_fields; 543*54e60f84SAndroid Build Coastguard Worker 544*54e60f84SAndroid Build Coastguard Worker union { 545*54e60f84SAndroid Build Coastguard Worker struct { 546*54e60f84SAndroid Build Coastguard Worker /** \brief delta_q parameters 547*54e60f84SAndroid Build Coastguard Worker */ 548*54e60f84SAndroid Build Coastguard Worker uint32_t delta_q_present_flag : 1; 549*54e60f84SAndroid Build Coastguard Worker uint32_t log2_delta_q_res : 2; 550*54e60f84SAndroid Build Coastguard Worker 551*54e60f84SAndroid Build Coastguard Worker /** \brief delta_lf parameters 552*54e60f84SAndroid Build Coastguard Worker */ 553*54e60f84SAndroid Build Coastguard Worker uint32_t delta_lf_present_flag : 1; 554*54e60f84SAndroid Build Coastguard Worker uint32_t log2_delta_lf_res : 2; 555*54e60f84SAndroid Build Coastguard Worker 556*54e60f84SAndroid Build Coastguard Worker /** \brief CONFIG_LOOPFILTER_LEVEL 557*54e60f84SAndroid Build Coastguard Worker */ 558*54e60f84SAndroid Build Coastguard Worker uint32_t delta_lf_multi : 1; 559*54e60f84SAndroid Build Coastguard Worker 560*54e60f84SAndroid Build Coastguard Worker /** \brief read_tx_mode 561*54e60f84SAndroid Build Coastguard Worker * value range [0..2] 562*54e60f84SAndroid Build Coastguard Worker */ 563*54e60f84SAndroid Build Coastguard Worker uint32_t tx_mode : 2; 564*54e60f84SAndroid Build Coastguard Worker 565*54e60f84SAndroid Build Coastguard Worker /* AV1 frame reference mode semantic */ 566*54e60f84SAndroid Build Coastguard Worker uint32_t reference_select : 1; 567*54e60f84SAndroid Build Coastguard Worker 568*54e60f84SAndroid Build Coastguard Worker uint32_t reduced_tx_set_used : 1; 569*54e60f84SAndroid Build Coastguard Worker 570*54e60f84SAndroid Build Coastguard Worker uint32_t skip_mode_present : 1; 571*54e60f84SAndroid Build Coastguard Worker 572*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 573*54e60f84SAndroid Build Coastguard Worker uint32_t reserved : 20; 574*54e60f84SAndroid Build Coastguard Worker } bits; 575*54e60f84SAndroid Build Coastguard Worker uint32_t value; 576*54e60f84SAndroid Build Coastguard Worker } mode_control_fields; 577*54e60f84SAndroid Build Coastguard Worker 578*54e60f84SAndroid Build Coastguard Worker /** \brief CDEF parameters 579*54e60f84SAndroid Build Coastguard Worker */ 580*54e60f84SAndroid Build Coastguard Worker /* value range [0..3] */ 581*54e60f84SAndroid Build Coastguard Worker uint8_t cdef_damping_minus_3; 582*54e60f84SAndroid Build Coastguard Worker /* value range [0..3] */ 583*54e60f84SAndroid Build Coastguard Worker uint8_t cdef_bits; 584*54e60f84SAndroid Build Coastguard Worker 585*54e60f84SAndroid Build Coastguard Worker /** Encode cdef strength: 586*54e60f84SAndroid Build Coastguard Worker * 587*54e60f84SAndroid Build Coastguard Worker * The cdef_y_strengths[] and cdef_uv_strengths[] are expected to be packed 588*54e60f84SAndroid Build Coastguard Worker * with both primary and secondary strength. The secondary strength is 589*54e60f84SAndroid Build Coastguard Worker * given in the lower two bits and the primary strength is given in the next 590*54e60f84SAndroid Build Coastguard Worker * four bits. 591*54e60f84SAndroid Build Coastguard Worker * 592*54e60f84SAndroid Build Coastguard Worker * cdef_y_strengths[] & cdef_uv_strengths[] should be derived as: 593*54e60f84SAndroid Build Coastguard Worker * (cdef_y_strengths[]) = (cdef_y_pri_strength[] << 2) | (cdef_y_sec_strength[] & 0x03) 594*54e60f84SAndroid Build Coastguard Worker * (cdef_uv_strengths[]) = (cdef_uv_pri_strength[] << 2) | (cdef_uv_sec_strength[] & 0x03) 595*54e60f84SAndroid Build Coastguard Worker * In which, cdef_y_pri_strength[]/cdef_y_sec_strength[]/cdef_uv_pri_strength[]/cdef_uv_sec_strength[] 596*54e60f84SAndroid Build Coastguard Worker * are variables defined in AV1 Spec 5.9.19. The cdef_y_strengths[] & cdef_uv_strengths[] 597*54e60f84SAndroid Build Coastguard Worker * are corresponding to LIBAOM variables cm->cdef_strengths[] & cm->cdef_uv_strengths[] respectively. 598*54e60f84SAndroid Build Coastguard Worker */ 599*54e60f84SAndroid Build Coastguard Worker /* value range [0..63] */ 600*54e60f84SAndroid Build Coastguard Worker uint8_t cdef_y_strengths[8]; 601*54e60f84SAndroid Build Coastguard Worker /* value range [0..63] */ 602*54e60f84SAndroid Build Coastguard Worker uint8_t cdef_uv_strengths[8]; 603*54e60f84SAndroid Build Coastguard Worker 604*54e60f84SAndroid Build Coastguard Worker /** \brief loop restoration parameters 605*54e60f84SAndroid Build Coastguard Worker */ 606*54e60f84SAndroid Build Coastguard Worker union { 607*54e60f84SAndroid Build Coastguard Worker struct { 608*54e60f84SAndroid Build Coastguard Worker uint16_t yframe_restoration_type : 2; 609*54e60f84SAndroid Build Coastguard Worker uint16_t cbframe_restoration_type : 2; 610*54e60f84SAndroid Build Coastguard Worker uint16_t crframe_restoration_type : 2; 611*54e60f84SAndroid Build Coastguard Worker uint16_t lr_unit_shift : 2; 612*54e60f84SAndroid Build Coastguard Worker uint16_t lr_uv_shift : 1; 613*54e60f84SAndroid Build Coastguard Worker 614*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 615*54e60f84SAndroid Build Coastguard Worker uint16_t reserved : 7; 616*54e60f84SAndroid Build Coastguard Worker } bits; 617*54e60f84SAndroid Build Coastguard Worker uint16_t value; 618*54e60f84SAndroid Build Coastguard Worker } loop_restoration_fields; 619*54e60f84SAndroid Build Coastguard Worker 620*54e60f84SAndroid Build Coastguard Worker /** \brief global motion 621*54e60f84SAndroid Build Coastguard Worker */ 622*54e60f84SAndroid Build Coastguard Worker VAWarpedMotionParamsAV1 wm[7]; 623*54e60f84SAndroid Build Coastguard Worker 624*54e60f84SAndroid Build Coastguard Worker /**@}*/ 625*54e60f84SAndroid Build Coastguard Worker 626*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 627*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_MEDIUM]; 628*54e60f84SAndroid Build Coastguard Worker } VADecPictureParameterBufferAV1; 629*54e60f84SAndroid Build Coastguard Worker 630*54e60f84SAndroid Build Coastguard Worker 631*54e60f84SAndroid Build Coastguard Worker /** 632*54e60f84SAndroid Build Coastguard Worker * \brief AV1 Slice Parameter Buffer Structure 633*54e60f84SAndroid Build Coastguard Worker * 634*54e60f84SAndroid Build Coastguard Worker * This structure conveys parameters related to bit stream data and should be 635*54e60f84SAndroid Build Coastguard Worker * sent once per tile. 636*54e60f84SAndroid Build Coastguard Worker * 637*54e60f84SAndroid Build Coastguard Worker * It uses the name VASliceParameterBufferAV1 to be consistent with other codec, 638*54e60f84SAndroid Build Coastguard Worker * but actually means VATileParameterBufferAV1. 639*54e60f84SAndroid Build Coastguard Worker * 640*54e60f84SAndroid Build Coastguard Worker * Slice data buffer of VASliceDataBufferType is used 641*54e60f84SAndroid Build Coastguard Worker * to send the bitstream. 642*54e60f84SAndroid Build Coastguard Worker * 643*54e60f84SAndroid Build Coastguard Worker * Please note that host decoder is responsible to parse out the 644*54e60f84SAndroid Build Coastguard Worker * per tile information. And the bit stream in sent to driver in per 645*54e60f84SAndroid Build Coastguard Worker * tile granularity. 646*54e60f84SAndroid Build Coastguard Worker */ 647*54e60f84SAndroid Build Coastguard Worker typedef struct _VASliceParameterBufferAV1 { 648*54e60f84SAndroid Build Coastguard Worker /**@{*/ 649*54e60f84SAndroid Build Coastguard Worker /** \brief The byte count of current tile in the bitstream buffer, 650*54e60f84SAndroid Build Coastguard Worker * starting from first byte of the buffer. 651*54e60f84SAndroid Build Coastguard Worker * It uses the name slice_data_size to be consistent with other codec, 652*54e60f84SAndroid Build Coastguard Worker * but actually means tile_data_size. 653*54e60f84SAndroid Build Coastguard Worker */ 654*54e60f84SAndroid Build Coastguard Worker uint32_t slice_data_size; 655*54e60f84SAndroid Build Coastguard Worker /** 656*54e60f84SAndroid Build Coastguard Worker * offset to the first byte of the data buffer. 657*54e60f84SAndroid Build Coastguard Worker */ 658*54e60f84SAndroid Build Coastguard Worker uint32_t slice_data_offset; 659*54e60f84SAndroid Build Coastguard Worker /** 660*54e60f84SAndroid Build Coastguard Worker * see VA_SLICE_DATA_FLAG_XXX definitions 661*54e60f84SAndroid Build Coastguard Worker */ 662*54e60f84SAndroid Build Coastguard Worker uint32_t slice_data_flag; 663*54e60f84SAndroid Build Coastguard Worker 664*54e60f84SAndroid Build Coastguard Worker uint16_t tile_row; 665*54e60f84SAndroid Build Coastguard Worker uint16_t tile_column; 666*54e60f84SAndroid Build Coastguard Worker 667*54e60f84SAndroid Build Coastguard Worker va_deprecated uint16_t tg_start; 668*54e60f84SAndroid Build Coastguard Worker va_deprecated uint16_t tg_end; 669*54e60f84SAndroid Build Coastguard Worker /** \brief anchor frame index for large scale tile. 670*54e60f84SAndroid Build Coastguard Worker * index into an array AnchorFrames of the frames that the tile uses 671*54e60f84SAndroid Build Coastguard Worker * for prediction. 672*54e60f84SAndroid Build Coastguard Worker * valid only when large_scale_tile equals 1. 673*54e60f84SAndroid Build Coastguard Worker */ 674*54e60f84SAndroid Build Coastguard Worker uint8_t anchor_frame_idx; 675*54e60f84SAndroid Build Coastguard Worker 676*54e60f84SAndroid Build Coastguard Worker /** \brief tile index in the tile list. 677*54e60f84SAndroid Build Coastguard Worker * Valid only when large_scale_tile is enabled. 678*54e60f84SAndroid Build Coastguard Worker * Driver uses this field to decide the tile output location. 679*54e60f84SAndroid Build Coastguard Worker */ 680*54e60f84SAndroid Build Coastguard Worker uint16_t tile_idx_in_tile_list; 681*54e60f84SAndroid Build Coastguard Worker 682*54e60f84SAndroid Build Coastguard Worker /**@}*/ 683*54e60f84SAndroid Build Coastguard Worker 684*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 685*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_LOW]; 686*54e60f84SAndroid Build Coastguard Worker } VASliceParameterBufferAV1; 687*54e60f84SAndroid Build Coastguard Worker 688*54e60f84SAndroid Build Coastguard Worker 689*54e60f84SAndroid Build Coastguard Worker /**@}*/ 690*54e60f84SAndroid Build Coastguard Worker 691*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus 692*54e60f84SAndroid Build Coastguard Worker } 693*54e60f84SAndroid Build Coastguard Worker #endif 694*54e60f84SAndroid Build Coastguard Worker 695*54e60f84SAndroid Build Coastguard Worker #endif /* VA_DEC_AV1_H */ 696