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 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 } | 112 } |
113 | 113 |
114 // This is the index in the scan order beyond which all coefficients for | 114 // This is the index in the scan order beyond which all coefficients for |
115 // 8x8 transform and above are in the top band. | 115 // 8x8 transform and above are in the top band. |
116 // This macro is currently unused but may be used by certain implementations | 116 // This macro is currently unused but may be used by certain implementations |
117 #define MAXBAND_INDEX 21 | 117 #define MAXBAND_INDEX 21 |
118 | 118 |
119 extern DECLARE_ALIGNED(16, const uint8_t, vp9_coefband_trans_8x8plus[1024]); | 119 extern DECLARE_ALIGNED(16, const uint8_t, vp9_coefband_trans_8x8plus[1024]); |
120 extern DECLARE_ALIGNED(16, const uint8_t, vp9_coefband_trans_4x4[16]); | 120 extern DECLARE_ALIGNED(16, const uint8_t, vp9_coefband_trans_4x4[16]); |
121 | 121 |
122 static const uint8_t *get_band_translate(TX_SIZE tx_size) { | 122 static INLINE const uint8_t *get_band_translate(TX_SIZE tx_size) { |
123 return tx_size == TX_4X4 ? vp9_coefband_trans_4x4 | 123 return tx_size == TX_4X4 ? vp9_coefband_trans_4x4 |
124 : vp9_coefband_trans_8x8plus; | 124 : vp9_coefband_trans_8x8plus; |
125 } | 125 } |
126 | 126 |
127 // 128 lists of probabilities are stored for the following ONE node probs: | 127 // 128 lists of probabilities are stored for the following ONE node probs: |
128 // 1, 3, 5, 7, ..., 253, 255 | 128 // 1, 3, 5, 7, ..., 253, 255 |
129 // In between probabilities are interpolated linearly | 129 // In between probabilities are interpolated linearly |
130 | 130 |
131 #define COEFF_PROB_MODELS 256 | 131 #define COEFF_PROB_MODELS 256 |
132 | 132 |
133 #define UNCONSTRAINED_NODES 3 | 133 #define UNCONSTRAINED_NODES 3 |
134 | 134 |
135 #define PIVOT_NODE 2 // which node is pivot | 135 #define PIVOT_NODE 2 // which node is pivot |
136 | 136 |
137 #define MODEL_NODES (ENTROPY_NODES - UNCONSTRAINED_NODES) | 137 #define MODEL_NODES (ENTROPY_NODES - UNCONSTRAINED_NODES) |
138 extern const vp9_prob vp9_pareto8_full[COEFF_PROB_MODELS][MODEL_NODES]; | 138 extern const vp9_prob vp9_pareto8_full[COEFF_PROB_MODELS][MODEL_NODES]; |
139 | 139 |
140 typedef vp9_prob vp9_coeff_probs_model[REF_TYPES][COEF_BANDS] | 140 typedef vp9_prob vp9_coeff_probs_model[REF_TYPES][COEF_BANDS] |
141 [COEFF_CONTEXTS][UNCONSTRAINED_NODES]; | 141 [COEFF_CONTEXTS][UNCONSTRAINED_NODES]; |
142 | 142 |
143 typedef unsigned int vp9_coeff_count_model[REF_TYPES][COEF_BANDS] | 143 typedef unsigned int vp9_coeff_count_model[REF_TYPES][COEF_BANDS] |
144 [COEFF_CONTEXTS] | 144 [COEFF_CONTEXTS] |
145 [UNCONSTRAINED_NODES + 1]; | 145 [UNCONSTRAINED_NODES + 1]; |
146 | 146 |
147 void vp9_model_to_full_probs(const vp9_prob *model, vp9_prob *full); | 147 void vp9_model_to_full_probs(const vp9_prob *model, vp9_prob *full); |
148 | 148 |
149 static int get_entropy_context(TX_SIZE tx_size, const ENTROPY_CONTEXT *a, | 149 static INLINE int get_entropy_context(TX_SIZE tx_size, const ENTROPY_CONTEXT *a, |
150 const ENTROPY_CONTEXT *l) { | 150 const ENTROPY_CONTEXT *l) { |
151 ENTROPY_CONTEXT above_ec = 0, left_ec = 0; | 151 ENTROPY_CONTEXT above_ec = 0, left_ec = 0; |
152 | 152 |
153 switch (tx_size) { | 153 switch (tx_size) { |
154 case TX_4X4: | 154 case TX_4X4: |
155 above_ec = a[0] != 0; | 155 above_ec = a[0] != 0; |
156 left_ec = l[0] != 0; | 156 left_ec = l[0] != 0; |
157 break; | 157 break; |
158 case TX_8X8: | 158 case TX_8X8: |
159 above_ec = !!*(const uint16_t *)a; | 159 above_ec = !!*(const uint16_t *)a; |
160 left_ec = !!*(const uint16_t *)l; | 160 left_ec = !!*(const uint16_t *)l; |
161 break; | 161 break; |
162 case TX_16X16: | 162 case TX_16X16: |
163 above_ec = !!*(const uint32_t *)a; | 163 above_ec = !!*(const uint32_t *)a; |
164 left_ec = !!*(const uint32_t *)l; | 164 left_ec = !!*(const uint32_t *)l; |
165 break; | 165 break; |
166 case TX_32X32: | 166 case TX_32X32: |
167 above_ec = !!*(const uint64_t *)a; | 167 above_ec = !!*(const uint64_t *)a; |
168 left_ec = !!*(const uint64_t *)l; | 168 left_ec = !!*(const uint64_t *)l; |
169 break; | 169 break; |
170 default: | 170 default: |
171 assert(0 && "Invalid transform size."); | 171 assert(0 && "Invalid transform size."); |
172 } | 172 } |
173 | 173 |
174 return combine_entropy_contexts(above_ec, left_ec); | 174 return combine_entropy_contexts(above_ec, left_ec); |
175 } | 175 } |
176 | 176 |
177 static const scan_order *get_scan(const MACROBLOCKD *xd, TX_SIZE tx_size, | 177 static const INLINE scan_order *get_scan(const MACROBLOCKD *xd, TX_SIZE tx_size, |
178 PLANE_TYPE type, int block_idx) { | 178 PLANE_TYPE type, int block_idx) { |
179 const MODE_INFO *const mi = xd->mi_8x8[0]; | 179 const MODE_INFO *const mi = xd->mi_8x8[0]; |
180 const MB_MODE_INFO *const mbmi = &mi->mbmi; | 180 const MB_MODE_INFO *const mbmi = &mi->mbmi; |
181 | 181 |
182 if (is_inter_block(mbmi) || type != PLANE_TYPE_Y || xd->lossless) { | 182 if (is_inter_block(mbmi) || type != PLANE_TYPE_Y || xd->lossless) { |
183 return &vp9_default_scan_orders[tx_size]; | 183 return &vp9_default_scan_orders[tx_size]; |
184 } else { | 184 } else { |
185 const MB_PREDICTION_MODE mode = | 185 const MB_PREDICTION_MODE mode = |
186 mbmi->sb_type < BLOCK_8X8 ? mi->bmi[block_idx].as_mode : mbmi->mode; | 186 mbmi->sb_type < BLOCK_8X8 ? mi->bmi[block_idx].as_mode : mbmi->mode; |
187 return &vp9_scan_orders[tx_size][mode2txfm_map[mode]]; | 187 return &vp9_scan_orders[tx_size][mode2txfm_map[mode]]; |
188 } | 188 } |
189 } | 189 } |
190 | 190 |
191 #ifdef __cplusplus | 191 #ifdef __cplusplus |
192 } // extern "C" | 192 } // extern "C" |
193 #endif | 193 #endif |
194 | 194 |
195 #endif // VP9_COMMON_VP9_ENTROPY_H_ | 195 #endif // VP9_COMMON_VP9_ENTROPY_H_ |
OLD | NEW |