1 /* 2 * Copyright (c) 2007-2012 Intel Corporation. All Rights Reserved. 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the 6 * "Software"), to deal in the Software without restriction, including 7 * without limitation the rights to use, copy, modify, merge, publish, 8 * distribute, sub license, and/or sell copies of the Software, and to 9 * permit persons to whom the Software is furnished to do so, subject to 10 * the following conditions: 11 * 12 * The above copyright notice and this permission notice (including the 13 * next paragraph) shall be included in all copies or substantial portions 14 * of the Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 19 * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR 20 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 */ 24 25 /** 26 * \file va_dec_vp.h 27 * \brief VP8 decoding API 28 * 29 * This file contains the \ref api_dec_vp8 "VP8 decoding API". 30 */ 31 32 #ifndef VA_DEC_VP8_H 33 #define VA_DEC_VP8_H 34 35 #ifdef __cplusplus 36 extern "C" { 37 #endif 38 39 /** 40 * \defgroup api_dec_vp8 VP8 decoding API 41 * 42 * @{ 43 */ 44 45 /** 46 * \brief VPX Bool Coder Context structure 47 * 48 * This common structure is defined for potential sharing by other VP formats 49 * 50 */ 51 typedef struct _VABoolCoderContextVPX 52 { 53 /* partition 0 "range" */ 54 unsigned char range; 55 /* partition 0 "value" */ 56 unsigned char value; 57 /* 58 * 'partition 0 number of shifts before an output byte is available' 59 * it is the number of remaining bits in 'value' for decoding, range [0, 7]. 60 */ 61 62 unsigned char count; 63 } VABoolCoderContextVPX; 64 65 /** 66 * \brief VP8 Decoding Picture Parameter Buffer Structure 67 * 68 * This structure conveys frame level parameters and should be sent once 69 * per frame. 70 * 71 */ 72 typedef struct _VAPictureParameterBufferVP8 73 { 74 /* frame width in pixels */ 75 unsigned int frame_width; 76 /* frame height in pixels */ 77 unsigned int frame_height; 78 79 /* specifies the "last" reference frame */ 80 VASurfaceID last_ref_frame; 81 /* specifies the "golden" reference frame */ 82 VASurfaceID golden_ref_frame; 83 /* specifies the "alternate" referrence frame */ 84 VASurfaceID alt_ref_frame; 85 /* specifies the out-of-loop deblocked frame, not used currently */ 86 VASurfaceID out_of_loop_frame; 87 88 union { 89 struct { 90 /* same as key_frame in bitstream syntax, 0 means a key frame */ 91 unsigned int key_frame : 1; 92 /* same as version in bitstream syntax */ 93 unsigned int version : 3; 94 /* same as segmentation_enabled in bitstream syntax */ 95 unsigned int segmentation_enabled : 1; 96 /* same as update_mb_segmentation_map in bitstream syntax */ 97 unsigned int update_mb_segmentation_map : 1; 98 /* same as update_segment_feature_data in bitstream syntax */ 99 unsigned int update_segment_feature_data : 1; 100 /* same as filter_type in bitstream syntax */ 101 unsigned int filter_type : 1; 102 /* same as sharpness_level in bitstream syntax */ 103 unsigned int sharpness_level : 3; 104 /* same as loop_filter_adj_enable in bitstream syntax */ 105 unsigned int loop_filter_adj_enable : 1; 106 /* same as mode_ref_lf_delta_update in bitstream syntax */ 107 unsigned int mode_ref_lf_delta_update : 1; 108 /* same as sign_bias_golden in bitstream syntax */ 109 unsigned int sign_bias_golden : 1; 110 /* same as sign_bias_alternate in bitstream syntax */ 111 unsigned int sign_bias_alternate : 1; 112 /* same as mb_no_coeff_skip in bitstream syntax */ 113 unsigned int mb_no_coeff_skip : 1; 114 /* flag to indicate that loop filter should be disabled */ 115 unsigned int loop_filter_disable : 1; 116 } bits; 117 unsigned int value; 118 } pic_fields; 119 120 /* 121 * probabilities of the segment_id decoding tree and same as 122 * mb_segment_tree_probs in the spec. 123 */ 124 unsigned char mb_segment_tree_probs[3]; 125 126 /* Post-adjustment loop filter levels for the 4 segments */ 127 unsigned char loop_filter_level[4]; 128 /* loop filter deltas for reference frame based MB level adjustment */ 129 char loop_filter_deltas_ref_frame[4]; 130 /* loop filter deltas for coding mode based MB level adjustment */ 131 char loop_filter_deltas_mode[4]; 132 133 /* same as prob_skip_false in bitstream syntax */ 134 unsigned char prob_skip_false; 135 /* same as prob_intra in bitstream syntax */ 136 unsigned char prob_intra; 137 /* same as prob_last in bitstream syntax */ 138 unsigned char prob_last; 139 /* same as prob_gf in bitstream syntax */ 140 unsigned char prob_gf; 141 142 /* 143 * list of 4 probabilities of the luma intra prediction mode decoding 144 * tree and same as y_mode_probs in frame header 145 */ 146 unsigned char y_mode_probs[4]; 147 /* 148 * list of 3 probabilities of the chroma intra prediction mode decoding 149 * tree and same as uv_mode_probs in frame header 150 */ 151 unsigned char uv_mode_probs[3]; 152 /* 153 * updated mv decoding probabilities and same as mv_probs in 154 * frame header 155 */ 156 unsigned char mv_probs[2][19]; 157 158 VABoolCoderContextVPX bool_coder_ctx; 159 160 } VAPictureParameterBufferVP8; 161 162 /** 163 * \brief VP8 Slice Parameter Buffer Structure 164 * 165 * This structure conveys parameters related to data partitions and should be 166 * sent once per frame. Slice data buffer of VASliceDataBufferType is used 167 * to send the partition data. 168 * 169 */ 170 typedef struct _VASliceParameterBufferVP8 171 { 172 /* 173 * number of bytes in the slice data buffer for the partitions 174 */ 175 unsigned int slice_data_size; 176 /* 177 * offset to the first byte of partition data (control partition) 178 */ 179 unsigned int slice_data_offset; 180 /* 181 * see VA_SLICE_DATA_FLAG_XXX definitions 182 */ 183 unsigned int slice_data_flag; 184 /* 185 * offset to the first bit of MB from the first byte of partition data(slice_data_offset) 186 */ 187 unsigned int macroblock_offset; 188 189 /* 190 * Partitions 191 * (1<<log2_nbr_of_dct_partitions)+1, count both control partition (frame header) and toke partition 192 */ 193 unsigned char num_of_partitions; 194 /* 195 * partition_size[0] is remaining bytes of control partition after parsed by application. 196 * exclude current byte for the remaining bits in bool_coder_ctx. 197 * exclude the uncompress data chunk since first_part_size 'excluding the uncompressed data chunk' 198 */ 199 unsigned int partition_size[9]; 200 } VASliceParameterBufferVP8; 201 202 /** 203 * \brief VP8 Coefficient Probability Data Buffer Structure 204 * 205 * Contains the contents of the token probability table, which may be 206 * incrementally modified in the frame header. There are four dimensions to 207 * the token probability array. The outermost dimension is indexed by the 208 * type of plane being decoded; the next dimension is selected by the 209 * position of the coefficient being decoded; the third dimension, * roughly 210 * speaking, measures the "local complexity" or extent to which nearby 211 * coefficients are non-zero; the fourth, and final, dimension of the token 212 * probability array is indexed by the position in the token tree structure, 213 * as are all tree probability arrays. This structure is sent once per frame. 214 * 215 */ 216 typedef struct _VAProbabilityDataBufferVP8 217 { 218 unsigned char dct_coeff_probs[4][8][3][11]; 219 } VAProbabilityDataBufferVP8; 220 221 /** 222 * \brief VP8 Inverse Quantization Matrix Buffer Structure 223 * 224 * Contains quantization indices for yac(0),ydc(1),y2dc(2),y2ac(3),uvdc(4), 225 * uvac(5) for each segment (0-3). When segmentation is disabled, only 226 * quantization_index[0][] will be used. This structure is sent once per frame. 227 */ 228 typedef struct _VAIQMatrixBufferVP8 229 { 230 /* 231 * array first dimensional is segment and 2nd dimensional is Q index 232 * all Q indexs should be clipped to be range [0, 127] 233 */ 234 unsigned short quantization_index[4][6]; 235 } VAIQMatrixBufferVP8; 236 237 /**@}*/ 238 239 #ifdef __cplusplus 240 } 241 #endif 242 243 #endif /* VA_DEC_VP8_H */ 244