1/* 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3 * 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 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11#ifndef VP9_COMMON_VP9_ENTROPYMODE_H_ 12#define VP9_COMMON_VP9_ENTROPYMODE_H_ 13 14#include "vp9/common/vp9_blockd.h" 15#include "vp9/common/vp9_entropy.h" 16#include "vp9/common/vp9_entropymv.h" 17 18#ifdef __cplusplus 19extern "C" { 20#endif 21 22#define TX_SIZE_CONTEXTS 2 23#define SWITCHABLE_FILTERS 3 // number of switchable filters 24#define SWITCHABLE_FILTER_CONTEXTS (SWITCHABLE_FILTERS + 1) 25 26struct VP9Common; 27 28struct tx_probs { 29 vp9_prob p32x32[TX_SIZE_CONTEXTS][TX_SIZES - 1]; 30 vp9_prob p16x16[TX_SIZE_CONTEXTS][TX_SIZES - 2]; 31 vp9_prob p8x8[TX_SIZE_CONTEXTS][TX_SIZES - 3]; 32}; 33 34struct tx_counts { 35 unsigned int p32x32[TX_SIZE_CONTEXTS][TX_SIZES]; 36 unsigned int p16x16[TX_SIZE_CONTEXTS][TX_SIZES - 1]; 37 unsigned int p8x8[TX_SIZE_CONTEXTS][TX_SIZES - 2]; 38}; 39 40typedef struct frame_contexts { 41 vp9_prob y_mode_prob[BLOCK_SIZE_GROUPS][INTRA_MODES - 1]; 42 vp9_prob uv_mode_prob[INTRA_MODES][INTRA_MODES - 1]; 43 vp9_prob partition_prob[PARTITION_CONTEXTS][PARTITION_TYPES - 1]; 44 vp9_coeff_probs_model coef_probs[TX_SIZES][PLANE_TYPES]; 45 vp9_prob switchable_interp_prob[SWITCHABLE_FILTER_CONTEXTS] 46 [SWITCHABLE_FILTERS - 1]; 47 vp9_prob inter_mode_probs[INTER_MODE_CONTEXTS][INTER_MODES - 1]; 48 vp9_prob intra_inter_prob[INTRA_INTER_CONTEXTS]; 49 vp9_prob comp_inter_prob[COMP_INTER_CONTEXTS]; 50 vp9_prob single_ref_prob[REF_CONTEXTS][2]; 51 vp9_prob comp_ref_prob[REF_CONTEXTS]; 52 struct tx_probs tx_probs; 53 vp9_prob skip_probs[SKIP_CONTEXTS]; 54 nmv_context nmvc; 55} FRAME_CONTEXT; 56 57typedef struct { 58 unsigned int y_mode[BLOCK_SIZE_GROUPS][INTRA_MODES]; 59 unsigned int uv_mode[INTRA_MODES][INTRA_MODES]; 60 unsigned int partition[PARTITION_CONTEXTS][PARTITION_TYPES]; 61 vp9_coeff_count_model coef[TX_SIZES][PLANE_TYPES]; 62 unsigned int eob_branch[TX_SIZES][PLANE_TYPES][REF_TYPES] 63 [COEF_BANDS][COEFF_CONTEXTS]; 64 unsigned int switchable_interp[SWITCHABLE_FILTER_CONTEXTS] 65 [SWITCHABLE_FILTERS]; 66 unsigned int inter_mode[INTER_MODE_CONTEXTS][INTER_MODES]; 67 unsigned int intra_inter[INTRA_INTER_CONTEXTS][2]; 68 unsigned int comp_inter[COMP_INTER_CONTEXTS][2]; 69 unsigned int single_ref[REF_CONTEXTS][2][2]; 70 unsigned int comp_ref[REF_CONTEXTS][2]; 71 struct tx_counts tx; 72 unsigned int skip[SKIP_CONTEXTS][2]; 73 nmv_context_counts mv; 74} FRAME_COUNTS; 75 76extern const vp9_prob vp9_kf_uv_mode_prob[INTRA_MODES][INTRA_MODES - 1]; 77extern const vp9_prob vp9_kf_y_mode_prob[INTRA_MODES][INTRA_MODES] 78 [INTRA_MODES - 1]; 79extern const vp9_prob vp9_kf_partition_probs[PARTITION_CONTEXTS] 80 [PARTITION_TYPES - 1]; 81extern const vp9_tree_index vp9_intra_mode_tree[TREE_SIZE(INTRA_MODES)]; 82extern const vp9_tree_index vp9_inter_mode_tree[TREE_SIZE(INTER_MODES)]; 83extern const vp9_tree_index vp9_partition_tree[TREE_SIZE(PARTITION_TYPES)]; 84extern const vp9_tree_index vp9_switchable_interp_tree 85 [TREE_SIZE(SWITCHABLE_FILTERS)]; 86 87void vp9_setup_past_independence(struct VP9Common *cm); 88 89void vp9_init_mode_probs(FRAME_CONTEXT *fc); 90 91void vp9_adapt_mode_probs(struct VP9Common *cm); 92 93void tx_counts_to_branch_counts_32x32(const unsigned int *tx_count_32x32p, 94 unsigned int (*ct_32x32p)[2]); 95void tx_counts_to_branch_counts_16x16(const unsigned int *tx_count_16x16p, 96 unsigned int (*ct_16x16p)[2]); 97void tx_counts_to_branch_counts_8x8(const unsigned int *tx_count_8x8p, 98 unsigned int (*ct_8x8p)[2]); 99 100static INLINE const vp9_prob *get_y_mode_probs(const MODE_INFO *mi, 101 const MODE_INFO *above_mi, 102 const MODE_INFO *left_mi, 103 int block) { 104 const MB_PREDICTION_MODE above = vp9_above_block_mode(mi, above_mi, block); 105 const MB_PREDICTION_MODE left = vp9_left_block_mode(mi, left_mi, block); 106 return vp9_kf_y_mode_prob[above][left]; 107} 108 109#ifdef __cplusplus 110} // extern "C" 111#endif 112 113#endif // VP9_COMMON_VP9_ENTROPYMODE_H_ 114