| 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 |