1*54e60f84SAndroid Build Coastguard Worker /* 2*54e60f84SAndroid Build Coastguard Worker * Copyright (c) 2007-2012 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_vp8.h 27*54e60f84SAndroid Build Coastguard Worker * \brief VP8 decoding API 28*54e60f84SAndroid Build Coastguard Worker * 29*54e60f84SAndroid Build Coastguard Worker * This file contains the \ref api_dec_vp8 "VP8 decoding API". 30*54e60f84SAndroid Build Coastguard Worker */ 31*54e60f84SAndroid Build Coastguard Worker 32*54e60f84SAndroid Build Coastguard Worker #ifndef VA_DEC_VP8_H 33*54e60f84SAndroid Build Coastguard Worker #define VA_DEC_VP8_H 34*54e60f84SAndroid Build Coastguard Worker 35*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus 36*54e60f84SAndroid Build Coastguard Worker extern "C" { 37*54e60f84SAndroid Build Coastguard Worker #endif 38*54e60f84SAndroid Build Coastguard Worker 39*54e60f84SAndroid Build Coastguard Worker /** 40*54e60f84SAndroid Build Coastguard Worker * \defgroup api_dec_vp8 VP8 decoding API 41*54e60f84SAndroid Build Coastguard Worker * 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 * \brief VPX Bool Coder Context structure 47*54e60f84SAndroid Build Coastguard Worker * 48*54e60f84SAndroid Build Coastguard Worker * This common structure is defined for potential sharing by other VP formats 49*54e60f84SAndroid Build Coastguard Worker * 50*54e60f84SAndroid Build Coastguard Worker */ 51*54e60f84SAndroid Build Coastguard Worker typedef struct _VABoolCoderContextVPX { 52*54e60f84SAndroid Build Coastguard Worker /* partition 0 "range" */ 53*54e60f84SAndroid Build Coastguard Worker uint8_t range; 54*54e60f84SAndroid Build Coastguard Worker /* partition 0 "value" */ 55*54e60f84SAndroid Build Coastguard Worker uint8_t value; 56*54e60f84SAndroid Build Coastguard Worker /* 57*54e60f84SAndroid Build Coastguard Worker * 'partition 0 number of shifts before an output byte is available' 58*54e60f84SAndroid Build Coastguard Worker * it is the number of remaining bits in 'value' for decoding, range [0, 7]. 59*54e60f84SAndroid Build Coastguard Worker */ 60*54e60f84SAndroid Build Coastguard Worker 61*54e60f84SAndroid Build Coastguard Worker uint8_t count; 62*54e60f84SAndroid Build Coastguard Worker } VABoolCoderContextVPX; 63*54e60f84SAndroid Build Coastguard Worker 64*54e60f84SAndroid Build Coastguard Worker /** 65*54e60f84SAndroid Build Coastguard Worker * \brief VP8 Decoding Picture Parameter Buffer Structure 66*54e60f84SAndroid Build Coastguard Worker * 67*54e60f84SAndroid Build Coastguard Worker * This structure conveys frame level parameters and should be sent once 68*54e60f84SAndroid Build Coastguard Worker * per frame. 69*54e60f84SAndroid Build Coastguard Worker * 70*54e60f84SAndroid Build Coastguard Worker */ 71*54e60f84SAndroid Build Coastguard Worker typedef struct _VAPictureParameterBufferVP8 { 72*54e60f84SAndroid Build Coastguard Worker /* frame width in pixels */ 73*54e60f84SAndroid Build Coastguard Worker uint32_t frame_width; 74*54e60f84SAndroid Build Coastguard Worker /* frame height in pixels */ 75*54e60f84SAndroid Build Coastguard Worker uint32_t frame_height; 76*54e60f84SAndroid Build Coastguard Worker 77*54e60f84SAndroid Build Coastguard Worker /* specifies the "last" reference frame */ 78*54e60f84SAndroid Build Coastguard Worker VASurfaceID last_ref_frame; 79*54e60f84SAndroid Build Coastguard Worker /* specifies the "golden" reference frame */ 80*54e60f84SAndroid Build Coastguard Worker VASurfaceID golden_ref_frame; 81*54e60f84SAndroid Build Coastguard Worker /* specifies the "alternate" referrence frame */ 82*54e60f84SAndroid Build Coastguard Worker VASurfaceID alt_ref_frame; 83*54e60f84SAndroid Build Coastguard Worker /* specifies the out-of-loop deblocked frame, not used currently */ 84*54e60f84SAndroid Build Coastguard Worker VASurfaceID out_of_loop_frame; 85*54e60f84SAndroid Build Coastguard Worker 86*54e60f84SAndroid Build Coastguard Worker union { 87*54e60f84SAndroid Build Coastguard Worker struct { 88*54e60f84SAndroid Build Coastguard Worker /* same as key_frame in bitstream syntax, 0 means a key frame */ 89*54e60f84SAndroid Build Coastguard Worker uint32_t key_frame : 1; 90*54e60f84SAndroid Build Coastguard Worker /* same as version in bitstream syntax */ 91*54e60f84SAndroid Build Coastguard Worker uint32_t version : 3; 92*54e60f84SAndroid Build Coastguard Worker /* same as segmentation_enabled in bitstream syntax */ 93*54e60f84SAndroid Build Coastguard Worker uint32_t segmentation_enabled : 1; 94*54e60f84SAndroid Build Coastguard Worker /* same as update_mb_segmentation_map in bitstream syntax */ 95*54e60f84SAndroid Build Coastguard Worker uint32_t update_mb_segmentation_map : 1; 96*54e60f84SAndroid Build Coastguard Worker /* same as update_segment_feature_data in bitstream syntax */ 97*54e60f84SAndroid Build Coastguard Worker uint32_t update_segment_feature_data : 1; 98*54e60f84SAndroid Build Coastguard Worker /* same as filter_type in bitstream syntax */ 99*54e60f84SAndroid Build Coastguard Worker uint32_t filter_type : 1; 100*54e60f84SAndroid Build Coastguard Worker /* same as sharpness_level in bitstream syntax */ 101*54e60f84SAndroid Build Coastguard Worker uint32_t sharpness_level : 3; 102*54e60f84SAndroid Build Coastguard Worker /* same as loop_filter_adj_enable in bitstream syntax */ 103*54e60f84SAndroid Build Coastguard Worker uint32_t loop_filter_adj_enable : 1; 104*54e60f84SAndroid Build Coastguard Worker /* same as mode_ref_lf_delta_update in bitstream syntax */ 105*54e60f84SAndroid Build Coastguard Worker uint32_t mode_ref_lf_delta_update : 1; 106*54e60f84SAndroid Build Coastguard Worker /* same as sign_bias_golden in bitstream syntax */ 107*54e60f84SAndroid Build Coastguard Worker uint32_t sign_bias_golden : 1; 108*54e60f84SAndroid Build Coastguard Worker /* same as sign_bias_alternate in bitstream syntax */ 109*54e60f84SAndroid Build Coastguard Worker uint32_t sign_bias_alternate : 1; 110*54e60f84SAndroid Build Coastguard Worker /* same as mb_no_coeff_skip in bitstream syntax */ 111*54e60f84SAndroid Build Coastguard Worker uint32_t mb_no_coeff_skip : 1; 112*54e60f84SAndroid Build Coastguard Worker /* flag to indicate that loop filter should be disabled */ 113*54e60f84SAndroid Build Coastguard Worker uint32_t loop_filter_disable : 1; 114*54e60f84SAndroid Build Coastguard Worker } bits; 115*54e60f84SAndroid Build Coastguard Worker uint32_t value; 116*54e60f84SAndroid Build Coastguard Worker } pic_fields; 117*54e60f84SAndroid Build Coastguard Worker 118*54e60f84SAndroid Build Coastguard Worker /* 119*54e60f84SAndroid Build Coastguard Worker * probabilities of the segment_id decoding tree and same as 120*54e60f84SAndroid Build Coastguard Worker * mb_segment_tree_probs in the spec. 121*54e60f84SAndroid Build Coastguard Worker */ 122*54e60f84SAndroid Build Coastguard Worker uint8_t mb_segment_tree_probs[3]; 123*54e60f84SAndroid Build Coastguard Worker 124*54e60f84SAndroid Build Coastguard Worker /* Post-adjustment loop filter levels for the 4 segments */ 125*54e60f84SAndroid Build Coastguard Worker uint8_t loop_filter_level[4]; 126*54e60f84SAndroid Build Coastguard Worker /* loop filter deltas for reference frame based MB level adjustment */ 127*54e60f84SAndroid Build Coastguard Worker int8_t loop_filter_deltas_ref_frame[4]; 128*54e60f84SAndroid Build Coastguard Worker /* loop filter deltas for coding mode based MB level adjustment */ 129*54e60f84SAndroid Build Coastguard Worker int8_t loop_filter_deltas_mode[4]; 130*54e60f84SAndroid Build Coastguard Worker 131*54e60f84SAndroid Build Coastguard Worker /* same as prob_skip_false in bitstream syntax */ 132*54e60f84SAndroid Build Coastguard Worker uint8_t prob_skip_false; 133*54e60f84SAndroid Build Coastguard Worker /* same as prob_intra in bitstream syntax */ 134*54e60f84SAndroid Build Coastguard Worker uint8_t prob_intra; 135*54e60f84SAndroid Build Coastguard Worker /* same as prob_last in bitstream syntax */ 136*54e60f84SAndroid Build Coastguard Worker uint8_t prob_last; 137*54e60f84SAndroid Build Coastguard Worker /* same as prob_gf in bitstream syntax */ 138*54e60f84SAndroid Build Coastguard Worker uint8_t prob_gf; 139*54e60f84SAndroid Build Coastguard Worker 140*54e60f84SAndroid Build Coastguard Worker /* 141*54e60f84SAndroid Build Coastguard Worker * list of 4 probabilities of the luma intra prediction mode decoding 142*54e60f84SAndroid Build Coastguard Worker * tree and same as y_mode_probs in frame header 143*54e60f84SAndroid Build Coastguard Worker */ 144*54e60f84SAndroid Build Coastguard Worker uint8_t y_mode_probs[4]; 145*54e60f84SAndroid Build Coastguard Worker /* 146*54e60f84SAndroid Build Coastguard Worker * list of 3 probabilities of the chroma intra prediction mode decoding 147*54e60f84SAndroid Build Coastguard Worker * tree and same as uv_mode_probs in frame header 148*54e60f84SAndroid Build Coastguard Worker */ 149*54e60f84SAndroid Build Coastguard Worker uint8_t uv_mode_probs[3]; 150*54e60f84SAndroid Build Coastguard Worker /* 151*54e60f84SAndroid Build Coastguard Worker * updated mv decoding probabilities and same as mv_probs in 152*54e60f84SAndroid Build Coastguard Worker * frame header 153*54e60f84SAndroid Build Coastguard Worker */ 154*54e60f84SAndroid Build Coastguard Worker uint8_t mv_probs[2][19]; 155*54e60f84SAndroid Build Coastguard Worker 156*54e60f84SAndroid Build Coastguard Worker VABoolCoderContextVPX bool_coder_ctx; 157*54e60f84SAndroid Build Coastguard Worker 158*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 159*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_LOW]; 160*54e60f84SAndroid Build Coastguard Worker } VAPictureParameterBufferVP8; 161*54e60f84SAndroid Build Coastguard Worker 162*54e60f84SAndroid Build Coastguard Worker /** 163*54e60f84SAndroid Build Coastguard Worker * \brief VP8 Slice Parameter Buffer Structure 164*54e60f84SAndroid Build Coastguard Worker * 165*54e60f84SAndroid Build Coastguard Worker * This structure conveys parameters related to data partitions and should be 166*54e60f84SAndroid Build Coastguard Worker * sent once per frame. Slice data buffer of VASliceDataBufferType is used 167*54e60f84SAndroid Build Coastguard Worker * to send the partition data. 168*54e60f84SAndroid Build Coastguard Worker * 169*54e60f84SAndroid Build Coastguard Worker */ 170*54e60f84SAndroid Build Coastguard Worker typedef struct _VASliceParameterBufferVP8 { 171*54e60f84SAndroid Build Coastguard Worker /* 172*54e60f84SAndroid Build Coastguard Worker * number of bytes in the slice data buffer for the partitions 173*54e60f84SAndroid Build Coastguard Worker */ 174*54e60f84SAndroid Build Coastguard Worker uint32_t slice_data_size; 175*54e60f84SAndroid Build Coastguard Worker /* 176*54e60f84SAndroid Build Coastguard Worker * offset to the first byte of partition data (control partition) 177*54e60f84SAndroid Build Coastguard Worker */ 178*54e60f84SAndroid Build Coastguard Worker uint32_t slice_data_offset; 179*54e60f84SAndroid Build Coastguard Worker /* 180*54e60f84SAndroid Build Coastguard Worker * see VA_SLICE_DATA_FLAG_XXX definitions 181*54e60f84SAndroid Build Coastguard Worker */ 182*54e60f84SAndroid Build Coastguard Worker uint32_t slice_data_flag; 183*54e60f84SAndroid Build Coastguard Worker /* 184*54e60f84SAndroid Build Coastguard Worker * offset to the first bit of MB from the first byte of partition data(slice_data_offset) 185*54e60f84SAndroid Build Coastguard Worker */ 186*54e60f84SAndroid Build Coastguard Worker uint32_t macroblock_offset; 187*54e60f84SAndroid Build Coastguard Worker 188*54e60f84SAndroid Build Coastguard Worker /* 189*54e60f84SAndroid Build Coastguard Worker * Partitions 190*54e60f84SAndroid Build Coastguard Worker * (1<<log2_nbr_of_dct_partitions)+1, count both control partition (frame header) and toke partition 191*54e60f84SAndroid Build Coastguard Worker */ 192*54e60f84SAndroid Build Coastguard Worker uint8_t num_of_partitions; 193*54e60f84SAndroid Build Coastguard Worker /* 194*54e60f84SAndroid Build Coastguard Worker * partition_size[0] is remaining bytes of control partition after parsed by application. 195*54e60f84SAndroid Build Coastguard Worker * exclude current byte for the remaining bits in bool_coder_ctx. 196*54e60f84SAndroid Build Coastguard Worker * exclude the uncompress data chunk since first_part_size 'excluding the uncompressed data chunk' 197*54e60f84SAndroid Build Coastguard Worker */ 198*54e60f84SAndroid Build Coastguard Worker uint32_t partition_size[9]; 199*54e60f84SAndroid Build Coastguard Worker 200*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 201*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_LOW]; 202*54e60f84SAndroid Build Coastguard Worker } VASliceParameterBufferVP8; 203*54e60f84SAndroid Build Coastguard Worker 204*54e60f84SAndroid Build Coastguard Worker /** 205*54e60f84SAndroid Build Coastguard Worker * \brief VP8 Coefficient Probability Data Buffer Structure 206*54e60f84SAndroid Build Coastguard Worker * 207*54e60f84SAndroid Build Coastguard Worker * Contains the contents of the token probability table, which may be 208*54e60f84SAndroid Build Coastguard Worker * incrementally modified in the frame header. There are four dimensions to 209*54e60f84SAndroid Build Coastguard Worker * the token probability array. The outermost dimension is indexed by the 210*54e60f84SAndroid Build Coastguard Worker * type of plane being decoded; the next dimension is selected by the 211*54e60f84SAndroid Build Coastguard Worker * position of the coefficient being decoded; the third dimension, * roughly 212*54e60f84SAndroid Build Coastguard Worker * speaking, measures the "local complexity" or extent to which nearby 213*54e60f84SAndroid Build Coastguard Worker * coefficients are non-zero; the fourth, and final, dimension of the token 214*54e60f84SAndroid Build Coastguard Worker * probability array is indexed by the position in the token tree structure, 215*54e60f84SAndroid Build Coastguard Worker * as are all tree probability arrays. This structure is sent once per frame. 216*54e60f84SAndroid Build Coastguard Worker * 217*54e60f84SAndroid Build Coastguard Worker */ 218*54e60f84SAndroid Build Coastguard Worker typedef struct _VAProbabilityDataBufferVP8 { 219*54e60f84SAndroid Build Coastguard Worker uint8_t dct_coeff_probs[4][8][3][11]; 220*54e60f84SAndroid Build Coastguard Worker 221*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 222*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_LOW]; 223*54e60f84SAndroid Build Coastguard Worker } VAProbabilityDataBufferVP8; 224*54e60f84SAndroid Build Coastguard Worker 225*54e60f84SAndroid Build Coastguard Worker /** 226*54e60f84SAndroid Build Coastguard Worker * \brief VP8 Inverse Quantization Matrix Buffer Structure 227*54e60f84SAndroid Build Coastguard Worker * 228*54e60f84SAndroid Build Coastguard Worker * Contains quantization indices for yac(0),ydc(1),y2dc(2),y2ac(3),uvdc(4), 229*54e60f84SAndroid Build Coastguard Worker * uvac(5) for each segment (0-3). When segmentation is disabled, only 230*54e60f84SAndroid Build Coastguard Worker * quantization_index[0][] will be used. This structure is sent once per frame. 231*54e60f84SAndroid Build Coastguard Worker */ 232*54e60f84SAndroid Build Coastguard Worker typedef struct _VAIQMatrixBufferVP8 { 233*54e60f84SAndroid Build Coastguard Worker /* 234*54e60f84SAndroid Build Coastguard Worker * array first dimensional is segment and 2nd dimensional is Q index 235*54e60f84SAndroid Build Coastguard Worker * all Q indexs should be clipped to be range [0, 127] 236*54e60f84SAndroid Build Coastguard Worker */ 237*54e60f84SAndroid Build Coastguard Worker uint16_t quantization_index[4][6]; 238*54e60f84SAndroid Build Coastguard Worker 239*54e60f84SAndroid Build Coastguard Worker /** \brief Reserved bytes for future use, must be zero */ 240*54e60f84SAndroid Build Coastguard Worker uint32_t va_reserved[VA_PADDING_LOW]; 241*54e60f84SAndroid Build Coastguard Worker } VAIQMatrixBufferVP8; 242*54e60f84SAndroid Build Coastguard Worker 243*54e60f84SAndroid Build Coastguard Worker /**@}*/ 244*54e60f84SAndroid Build Coastguard Worker 245*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus 246*54e60f84SAndroid Build Coastguard Worker } 247*54e60f84SAndroid Build Coastguard Worker #endif 248*54e60f84SAndroid Build Coastguard Worker 249*54e60f84SAndroid Build Coastguard Worker #endif /* VA_DEC_VP8_H */ 250