OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. | 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 | 135 |
136 struct VP9Common; | 136 struct VP9Common; |
137 void vp9_default_coef_probs(struct VP9Common *cm); | 137 void vp9_default_coef_probs(struct VP9Common *cm); |
138 void vp9_adapt_coef_probs(struct VP9Common *cm); | 138 void vp9_adapt_coef_probs(struct VP9Common *cm); |
139 | 139 |
140 static INLINE void reset_skip_context(MACROBLOCKD *xd, BLOCK_SIZE bsize) { | 140 static INLINE void reset_skip_context(MACROBLOCKD *xd, BLOCK_SIZE bsize) { |
141 int i; | 141 int i; |
142 for (i = 0; i < MAX_MB_PLANE; i++) { | 142 for (i = 0; i < MAX_MB_PLANE; i++) { |
143 struct macroblockd_plane *const pd = &xd->plane[i]; | 143 struct macroblockd_plane *const pd = &xd->plane[i]; |
144 const BLOCK_SIZE plane_bsize = get_plane_block_size(bsize, pd); | 144 const BLOCK_SIZE plane_bsize = get_plane_block_size(bsize, pd); |
145 vpx_memset(pd->above_context, 0, sizeof(ENTROPY_CONTEXT) * | 145 memset(pd->above_context, 0, |
146 num_4x4_blocks_wide_lookup[plane_bsize]); | 146 sizeof(ENTROPY_CONTEXT) * num_4x4_blocks_wide_lookup[plane_bsize]); |
147 vpx_memset(pd->left_context, 0, sizeof(ENTROPY_CONTEXT) * | 147 memset(pd->left_context, 0, |
148 num_4x4_blocks_high_lookup[plane_bsize]); | 148 sizeof(ENTROPY_CONTEXT) * num_4x4_blocks_high_lookup[plane_bsize]); |
149 } | 149 } |
150 } | 150 } |
151 | 151 |
152 // This is the index in the scan order beyond which all coefficients for | 152 // This is the index in the scan order beyond which all coefficients for |
153 // 8x8 transform and above are in the top band. | 153 // 8x8 transform and above are in the top band. |
154 // This macro is currently unused but may be used by certain implementations | 154 // This macro is currently unused but may be used by certain implementations |
155 #define MAXBAND_INDEX 21 | 155 #define MAXBAND_INDEX 21 |
156 | 156 |
157 DECLARE_ALIGNED(16, extern const uint8_t, vp9_coefband_trans_8x8plus[1024]); | 157 DECLARE_ALIGNED(16, extern const uint8_t, vp9_coefband_trans_8x8plus[1024]); |
158 DECLARE_ALIGNED(16, extern const uint8_t, vp9_coefband_trans_4x4[16]); | 158 DECLARE_ALIGNED(16, extern const uint8_t, vp9_coefband_trans_4x4[16]); |
159 | 159 |
160 static INLINE const uint8_t *get_band_translate(TX_SIZE tx_size) { | 160 static INLINE const uint8_t *get_band_translate(TX_SIZE tx_size) { |
161 return tx_size == TX_4X4 ? vp9_coefband_trans_4x4 | 161 return tx_size == TX_4X4 ? vp9_coefband_trans_4x4 |
162 : vp9_coefband_trans_8x8plus; | 162 : vp9_coefband_trans_8x8plus; |
163 } | 163 } |
164 | 164 |
165 // 128 lists of probabilities are stored for the following ONE node probs: | 165 // 128 lists of probabilities are stored for the following ONE node probs: |
166 // 1, 3, 5, 7, ..., 253, 255 | 166 // 1, 3, 5, 7, ..., 253, 255 |
167 // In between probabilities are interpolated linearly | 167 // In between probabilities are interpolated linearly |
168 | 168 |
169 #define COEFF_PROB_MODELS 256 | 169 #define COEFF_PROB_MODELS 256 |
170 | 170 |
171 #define UNCONSTRAINED_NODES 3 | 171 #define UNCONSTRAINED_NODES 3 |
172 | 172 |
173 #define PIVOT_NODE 2 // which node is pivot | 173 #define PIVOT_NODE 2 // which node is pivot |
174 | 174 |
175 #define MODEL_NODES (ENTROPY_NODES - UNCONSTRAINED_NODES) | 175 #define MODEL_NODES (ENTROPY_NODES - UNCONSTRAINED_NODES) |
| 176 extern const vp9_tree_index vp9_coef_con_tree[TREE_SIZE(ENTROPY_TOKENS)]; |
176 extern const vp9_prob vp9_pareto8_full[COEFF_PROB_MODELS][MODEL_NODES]; | 177 extern const vp9_prob vp9_pareto8_full[COEFF_PROB_MODELS][MODEL_NODES]; |
177 | 178 |
178 typedef vp9_prob vp9_coeff_probs_model[REF_TYPES][COEF_BANDS] | 179 typedef vp9_prob vp9_coeff_probs_model[REF_TYPES][COEF_BANDS] |
179 [COEFF_CONTEXTS][UNCONSTRAINED_NODES]; | 180 [COEFF_CONTEXTS][UNCONSTRAINED_NODES]; |
180 | 181 |
181 typedef unsigned int vp9_coeff_count_model[REF_TYPES][COEF_BANDS] | 182 typedef unsigned int vp9_coeff_count_model[REF_TYPES][COEF_BANDS] |
182 [COEFF_CONTEXTS] | 183 [COEFF_CONTEXTS] |
183 [UNCONSTRAINED_NODES + 1]; | 184 [UNCONSTRAINED_NODES + 1]; |
184 | 185 |
185 void vp9_model_to_full_probs(const vp9_prob *model, vp9_prob *full); | 186 void vp9_model_to_full_probs(const vp9_prob *model, vp9_prob *full); |
(...skipping 22 matching lines...) Expand all Loading... |
208 default: | 209 default: |
209 assert(0 && "Invalid transform size."); | 210 assert(0 && "Invalid transform size."); |
210 break; | 211 break; |
211 } | 212 } |
212 | 213 |
213 return combine_entropy_contexts(above_ec, left_ec); | 214 return combine_entropy_contexts(above_ec, left_ec); |
214 } | 215 } |
215 | 216 |
216 static INLINE const scan_order *get_scan(const MACROBLOCKD *xd, TX_SIZE tx_size, | 217 static INLINE const scan_order *get_scan(const MACROBLOCKD *xd, TX_SIZE tx_size, |
217 PLANE_TYPE type, int block_idx) { | 218 PLANE_TYPE type, int block_idx) { |
218 const MODE_INFO *const mi = xd->mi[0].src_mi; | 219 const MODE_INFO *const mi = xd->mi[0]; |
219 | 220 |
220 if (is_inter_block(&mi->mbmi) || type != PLANE_TYPE_Y || xd->lossless) { | 221 if (is_inter_block(&mi->mbmi) || type != PLANE_TYPE_Y || xd->lossless) { |
221 return &vp9_default_scan_orders[tx_size]; | 222 return &vp9_default_scan_orders[tx_size]; |
222 } else { | 223 } else { |
223 const PREDICTION_MODE mode = get_y_mode(mi, block_idx); | 224 const PREDICTION_MODE mode = get_y_mode(mi, block_idx); |
224 return &vp9_scan_orders[tx_size][intra_mode_to_tx_type_lookup[mode]]; | 225 return &vp9_scan_orders[tx_size][intra_mode_to_tx_type_lookup[mode]]; |
225 } | 226 } |
226 } | 227 } |
227 | 228 |
228 #ifdef __cplusplus | 229 #ifdef __cplusplus |
229 } // extern "C" | 230 } // extern "C" |
230 #endif | 231 #endif |
231 | 232 |
232 #endif // VP9_COMMON_VP9_ENTROPY_H_ | 233 #endif // VP9_COMMON_VP9_ENTROPY_H_ |
OLD | NEW |