1*437bfbebSnyanmisaka /* 2*437bfbebSnyanmisaka * 3*437bfbebSnyanmisaka * Copyright 2015 Rockchip Electronics Co. LTD 4*437bfbebSnyanmisaka * 5*437bfbebSnyanmisaka * Licensed under the Apache License, Version 2.0 (the "License"); 6*437bfbebSnyanmisaka * you may not use this file except in compliance with the License. 7*437bfbebSnyanmisaka * You may obtain a copy of the License at 8*437bfbebSnyanmisaka * 9*437bfbebSnyanmisaka * http://www.apache.org/licenses/LICENSE-2.0 10*437bfbebSnyanmisaka * 11*437bfbebSnyanmisaka * Unless required by applicable law or agreed to in writing, software 12*437bfbebSnyanmisaka * distributed under the License is distributed on an "AS IS" BASIS, 13*437bfbebSnyanmisaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*437bfbebSnyanmisaka * See the License for the specific language governing permissions and 15*437bfbebSnyanmisaka * limitations under the License. 16*437bfbebSnyanmisaka */ 17*437bfbebSnyanmisaka #ifndef _VP9D_SYNTAX_H_ 18*437bfbebSnyanmisaka #define _VP9D_SYNTAX_H_ 19*437bfbebSnyanmisaka 20*437bfbebSnyanmisaka typedef unsigned long DWORD; 21*437bfbebSnyanmisaka typedef unsigned char BYTE; 22*437bfbebSnyanmisaka typedef unsigned short WORD; 23*437bfbebSnyanmisaka typedef unsigned long ULONG; 24*437bfbebSnyanmisaka typedef unsigned short USHORT; 25*437bfbebSnyanmisaka typedef unsigned char UCHAR; 26*437bfbebSnyanmisaka typedef unsigned int UINT; 27*437bfbebSnyanmisaka typedef unsigned int UINT32; 28*437bfbebSnyanmisaka 29*437bfbebSnyanmisaka typedef signed int BOOL; 30*437bfbebSnyanmisaka typedef signed int INT; 31*437bfbebSnyanmisaka typedef signed char CHAR; 32*437bfbebSnyanmisaka typedef signed short SHORT; 33*437bfbebSnyanmisaka typedef signed long LONG; 34*437bfbebSnyanmisaka typedef void *PVOID; 35*437bfbebSnyanmisaka 36*437bfbebSnyanmisaka typedef struct _DXVA_PicEntry_VPx { 37*437bfbebSnyanmisaka union { 38*437bfbebSnyanmisaka struct { 39*437bfbebSnyanmisaka UCHAR Index7Bits : 7; 40*437bfbebSnyanmisaka UCHAR AssociatedFlag : 1; 41*437bfbebSnyanmisaka }; 42*437bfbebSnyanmisaka UCHAR bPicEntry; 43*437bfbebSnyanmisaka }; 44*437bfbebSnyanmisaka } DXVA_PicEntry_VPx, *LPDXVA_PicEntry_Vpx; 45*437bfbebSnyanmisaka 46*437bfbebSnyanmisaka typedef struct _segmentation_VP9 { 47*437bfbebSnyanmisaka union { 48*437bfbebSnyanmisaka struct { 49*437bfbebSnyanmisaka UCHAR enabled : 1; 50*437bfbebSnyanmisaka UCHAR update_map : 1; 51*437bfbebSnyanmisaka UCHAR temporal_update : 1; 52*437bfbebSnyanmisaka UCHAR abs_delta : 1; 53*437bfbebSnyanmisaka UCHAR ReservedSegmentFlags4Bits : 4; 54*437bfbebSnyanmisaka }; 55*437bfbebSnyanmisaka UCHAR wSegmentInfoFlags; 56*437bfbebSnyanmisaka }; 57*437bfbebSnyanmisaka UCHAR tree_probs[7]; 58*437bfbebSnyanmisaka UCHAR pred_probs[3]; 59*437bfbebSnyanmisaka SHORT feature_data[8][4]; 60*437bfbebSnyanmisaka UCHAR feature_mask[8]; 61*437bfbebSnyanmisaka } DXVA_segmentation_VP9; 62*437bfbebSnyanmisaka 63*437bfbebSnyanmisaka typedef struct { 64*437bfbebSnyanmisaka RK_U8 y_mode[4][9]; 65*437bfbebSnyanmisaka RK_U8 uv_mode[10][9]; 66*437bfbebSnyanmisaka RK_U8 filter[4][2]; 67*437bfbebSnyanmisaka RK_U8 mv_mode[7][3]; 68*437bfbebSnyanmisaka RK_U8 intra[4]; 69*437bfbebSnyanmisaka RK_U8 comp[5]; 70*437bfbebSnyanmisaka RK_U8 single_ref[5][2]; 71*437bfbebSnyanmisaka RK_U8 comp_ref[5]; 72*437bfbebSnyanmisaka RK_U8 tx32p[2][3]; 73*437bfbebSnyanmisaka RK_U8 tx16p[2][2]; 74*437bfbebSnyanmisaka RK_U8 tx8p[2]; 75*437bfbebSnyanmisaka RK_U8 skip[3]; 76*437bfbebSnyanmisaka RK_U8 mv_joint[3]; 77*437bfbebSnyanmisaka struct { 78*437bfbebSnyanmisaka RK_U8 sign; 79*437bfbebSnyanmisaka RK_U8 classes[10]; 80*437bfbebSnyanmisaka RK_U8 class0; 81*437bfbebSnyanmisaka RK_U8 bits[10]; 82*437bfbebSnyanmisaka RK_U8 class0_fp[2][3]; 83*437bfbebSnyanmisaka RK_U8 fp[3]; 84*437bfbebSnyanmisaka RK_U8 class0_hp; 85*437bfbebSnyanmisaka RK_U8 hp; 86*437bfbebSnyanmisaka } mv_comp[2]; 87*437bfbebSnyanmisaka RK_U8 partition[4][4][3]; 88*437bfbebSnyanmisaka } DXVA_prob_vp9; 89*437bfbebSnyanmisaka 90*437bfbebSnyanmisaka typedef struct _DXVA_PicParams_VP9 { 91*437bfbebSnyanmisaka DXVA_PicEntry_VPx CurrPic; 92*437bfbebSnyanmisaka UCHAR profile; 93*437bfbebSnyanmisaka union { 94*437bfbebSnyanmisaka struct { 95*437bfbebSnyanmisaka USHORT frame_type : 1; 96*437bfbebSnyanmisaka USHORT show_frame : 1; 97*437bfbebSnyanmisaka USHORT error_resilient_mode : 1; 98*437bfbebSnyanmisaka USHORT subsampling_x : 1; 99*437bfbebSnyanmisaka USHORT subsampling_y : 1; 100*437bfbebSnyanmisaka USHORT extra_plane : 1; 101*437bfbebSnyanmisaka USHORT refresh_frame_context : 1; 102*437bfbebSnyanmisaka USHORT intra_only : 1; 103*437bfbebSnyanmisaka USHORT frame_context_idx : 2; 104*437bfbebSnyanmisaka USHORT reset_frame_context : 2; 105*437bfbebSnyanmisaka USHORT allow_high_precision_mv : 1; 106*437bfbebSnyanmisaka USHORT parallelmode : 1; 107*437bfbebSnyanmisaka USHORT show_existing_frame : 1; 108*437bfbebSnyanmisaka }; 109*437bfbebSnyanmisaka USHORT wFormatAndPictureInfoFlags; 110*437bfbebSnyanmisaka }; 111*437bfbebSnyanmisaka UINT width; 112*437bfbebSnyanmisaka UINT height; 113*437bfbebSnyanmisaka UCHAR BitDepthMinus8Luma; 114*437bfbebSnyanmisaka UCHAR BitDepthMinus8Chroma; 115*437bfbebSnyanmisaka UCHAR interp_filter; 116*437bfbebSnyanmisaka UCHAR Reserved8Bits; 117*437bfbebSnyanmisaka DXVA_PicEntry_VPx ref_frame_map[8]; 118*437bfbebSnyanmisaka UINT ref_frame_coded_width[8]; 119*437bfbebSnyanmisaka UINT ref_frame_coded_height[8]; 120*437bfbebSnyanmisaka DXVA_PicEntry_VPx frame_refs[3]; 121*437bfbebSnyanmisaka CHAR ref_frame_sign_bias[4]; 122*437bfbebSnyanmisaka CHAR filter_level; 123*437bfbebSnyanmisaka CHAR sharpness_level; 124*437bfbebSnyanmisaka union { 125*437bfbebSnyanmisaka struct { 126*437bfbebSnyanmisaka UCHAR mode_ref_delta_enabled : 1; 127*437bfbebSnyanmisaka UCHAR mode_ref_delta_update : 1; 128*437bfbebSnyanmisaka UCHAR use_prev_in_find_mv_refs : 1; 129*437bfbebSnyanmisaka UCHAR ReservedControlInfo5Bits : 5; 130*437bfbebSnyanmisaka }; 131*437bfbebSnyanmisaka UCHAR wControlInfoFlags; 132*437bfbebSnyanmisaka }; 133*437bfbebSnyanmisaka CHAR ref_deltas[4]; 134*437bfbebSnyanmisaka CHAR mode_deltas[2]; 135*437bfbebSnyanmisaka SHORT base_qindex; 136*437bfbebSnyanmisaka CHAR y_dc_delta_q; 137*437bfbebSnyanmisaka CHAR uv_dc_delta_q; 138*437bfbebSnyanmisaka CHAR uv_ac_delta_q; 139*437bfbebSnyanmisaka DXVA_segmentation_VP9 stVP9Segments; 140*437bfbebSnyanmisaka UCHAR log2_tile_cols; 141*437bfbebSnyanmisaka UCHAR log2_tile_rows; 142*437bfbebSnyanmisaka USHORT uncompressed_header_size_byte_aligned; 143*437bfbebSnyanmisaka USHORT first_partition_size; 144*437bfbebSnyanmisaka USHORT Reserved16Bits; 145*437bfbebSnyanmisaka USHORT Reserved32Bits; 146*437bfbebSnyanmisaka UINT StatusReportFeedbackNumber; 147*437bfbebSnyanmisaka struct { 148*437bfbebSnyanmisaka UCHAR y_mode[4][9]; 149*437bfbebSnyanmisaka UCHAR uv_mode[10][9]; 150*437bfbebSnyanmisaka UCHAR filter[4][2]; 151*437bfbebSnyanmisaka UCHAR mv_mode[7][3]; 152*437bfbebSnyanmisaka UCHAR intra[4]; 153*437bfbebSnyanmisaka UCHAR comp[5]; 154*437bfbebSnyanmisaka UCHAR single_ref[5][2]; 155*437bfbebSnyanmisaka UCHAR comp_ref[5]; 156*437bfbebSnyanmisaka UCHAR tx32p[2][3]; 157*437bfbebSnyanmisaka UCHAR tx16p[2][2]; 158*437bfbebSnyanmisaka UCHAR tx8p[2]; 159*437bfbebSnyanmisaka UCHAR skip[3]; 160*437bfbebSnyanmisaka UCHAR mv_joint[3]; 161*437bfbebSnyanmisaka struct { 162*437bfbebSnyanmisaka UCHAR sign; 163*437bfbebSnyanmisaka UCHAR classes[10]; 164*437bfbebSnyanmisaka UCHAR class0; 165*437bfbebSnyanmisaka UCHAR bits[10]; 166*437bfbebSnyanmisaka UCHAR class0_fp[2][3]; 167*437bfbebSnyanmisaka UCHAR fp[3]; 168*437bfbebSnyanmisaka UCHAR class0_hp; 169*437bfbebSnyanmisaka UCHAR hp; 170*437bfbebSnyanmisaka } mv_comp[2]; 171*437bfbebSnyanmisaka UCHAR partition[4][4][3]; 172*437bfbebSnyanmisaka UCHAR coef[4][2][2][6][6][3]; 173*437bfbebSnyanmisaka } prob; 174*437bfbebSnyanmisaka struct { 175*437bfbebSnyanmisaka UINT partition[4][4][4]; 176*437bfbebSnyanmisaka UINT skip[3][2]; 177*437bfbebSnyanmisaka UINT intra[4][2]; 178*437bfbebSnyanmisaka UINT tx32p[2][4]; 179*437bfbebSnyanmisaka UINT tx16p[2][4]; 180*437bfbebSnyanmisaka UINT tx8p[2][2]; 181*437bfbebSnyanmisaka UINT y_mode[4][10]; 182*437bfbebSnyanmisaka UINT uv_mode[10][10]; 183*437bfbebSnyanmisaka UINT comp[5][2]; 184*437bfbebSnyanmisaka UINT comp_ref[5][2]; 185*437bfbebSnyanmisaka UINT single_ref[5][2][2]; 186*437bfbebSnyanmisaka UINT mv_mode[7][4]; 187*437bfbebSnyanmisaka UINT filter[4][3]; 188*437bfbebSnyanmisaka UINT mv_joint[4]; 189*437bfbebSnyanmisaka UINT sign[2][2]; 190*437bfbebSnyanmisaka UINT classes[2][12]; // orign classes[12] 191*437bfbebSnyanmisaka UINT class0[2][2]; 192*437bfbebSnyanmisaka UINT bits[2][10][2]; 193*437bfbebSnyanmisaka UINT class0_fp[2][2][4]; 194*437bfbebSnyanmisaka UINT fp[2][4]; 195*437bfbebSnyanmisaka UINT class0_hp[2][2]; 196*437bfbebSnyanmisaka UINT hp[2][2]; 197*437bfbebSnyanmisaka UINT coef[4][2][2][6][6][3]; 198*437bfbebSnyanmisaka UINT eob[4][2][2][6][6][2]; 199*437bfbebSnyanmisaka } counts; 200*437bfbebSnyanmisaka struct { 201*437bfbebSnyanmisaka DXVA_prob_vp9 p_flag; 202*437bfbebSnyanmisaka DXVA_prob_vp9 p_delta; 203*437bfbebSnyanmisaka RK_U8 coef_flag[4][2][2][6][6][3]; 204*437bfbebSnyanmisaka RK_U8 coef_delta[4][2][2][6][6][3]; 205*437bfbebSnyanmisaka } prob_flag_delta; 206*437bfbebSnyanmisaka USHORT mvscale[3][2]; 207*437bfbebSnyanmisaka CHAR txmode; 208*437bfbebSnyanmisaka CHAR refmode; 209*437bfbebSnyanmisaka } DXVA_PicParams_VP9, *LPDXVA_PicParams_VP9; 210*437bfbebSnyanmisaka 211*437bfbebSnyanmisaka typedef struct _DXVA_Slice_VPx_Short { 212*437bfbebSnyanmisaka UINT BSNALunitDataLocation; 213*437bfbebSnyanmisaka UINT SliceByteInBuffer; 214*437bfbebSnyanmisaka USHORT wBadSliceChopping; 215*437bfbebSnyanmisaka } DXVA_Slice_VPx_Short, *LPDXVA_Slice_VPx_Short; 216*437bfbebSnyanmisaka 217*437bfbebSnyanmisaka #endif 218*437bfbebSnyanmisaka 219