entropymode.h 4.76 KB
Newer Older
Jingning Han's avatar
Jingning Han committed
1
2
3
4
5
6
7
8
9
10
/*
 *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

11
12
#ifndef VP10_COMMON_ENTROPYMODE_H_
#define VP10_COMMON_ENTROPYMODE_H_
Jingning Han's avatar
Jingning Han committed
13

Yaowu Xu's avatar
Yaowu Xu committed
14
15
16
17
#include "av1/common/entropy.h"
#include "av1/common/entropymv.h"
#include "av1/common/filter.h"
#include "av1/common/seg_common.h"
Yaowu Xu's avatar
Yaowu Xu committed
18
#include "aom_dsp/vpx_filter.h"
Jingning Han's avatar
Jingning Han committed
19
20
21
22
23
24
25
26
27

#ifdef __cplusplus
extern "C" {
#endif

#define BLOCK_SIZE_GROUPS 4

#define TX_SIZE_CONTEXTS 2

clang-format's avatar
clang-format committed
28
#define INTER_OFFSET(mode) ((mode)-NEARESTMV)
Jingning Han's avatar
Jingning Han committed
29

Yaowu Xu's avatar
Yaowu Xu committed
30
struct VP10Common;
Jingning Han's avatar
Jingning Han committed
31
32
33
34
35
36
37
38
39
40
41
42
43
44

struct tx_probs {
  vpx_prob p32x32[TX_SIZE_CONTEXTS][TX_SIZES - 1];
  vpx_prob p16x16[TX_SIZE_CONTEXTS][TX_SIZES - 2];
  vpx_prob p8x8[TX_SIZE_CONTEXTS][TX_SIZES - 3];
};

struct tx_counts {
  unsigned int p32x32[TX_SIZE_CONTEXTS][TX_SIZES];
  unsigned int p16x16[TX_SIZE_CONTEXTS][TX_SIZES - 1];
  unsigned int p8x8[TX_SIZE_CONTEXTS][TX_SIZES - 2];
  unsigned int tx_totals[TX_SIZES];
};

45
46
47
48
49
50
struct seg_counts {
  unsigned int tree_total[MAX_SEGMENTS];
  unsigned int tree_mispred[MAX_SEGMENTS];
  unsigned int pred[PREDICTION_PROBS][2];
};

Jingning Han's avatar
Jingning Han committed
51
52
53
54
55
typedef struct frame_contexts {
  vpx_prob y_mode_prob[BLOCK_SIZE_GROUPS][INTRA_MODES - 1];
  vpx_prob uv_mode_prob[INTRA_MODES][INTRA_MODES - 1];
  vpx_prob partition_prob[PARTITION_CONTEXTS][PARTITION_TYPES - 1];
  vp10_coeff_probs_model coef_probs[TX_SIZES][PLANE_TYPES];
clang-format's avatar
clang-format committed
56
57
58
  vpx_prob
      switchable_interp_prob[SWITCHABLE_FILTER_CONTEXTS][SWITCHABLE_FILTERS -
                                                         1];
Jingning Han's avatar
Jingning Han committed
59
60
61
62
63
64
65
66
  vpx_prob inter_mode_probs[INTER_MODE_CONTEXTS][INTER_MODES - 1];
  vpx_prob intra_inter_prob[INTRA_INTER_CONTEXTS];
  vpx_prob comp_inter_prob[COMP_INTER_CONTEXTS];
  vpx_prob single_ref_prob[REF_CONTEXTS][2];
  vpx_prob comp_ref_prob[REF_CONTEXTS];
  struct tx_probs tx_probs;
  vpx_prob skip_probs[SKIP_CONTEXTS];
  nmv_context nmvc;
67
68
69
#if CONFIG_MISC_FIXES
  struct segmentation_probs seg;
#endif
70
71
  vpx_prob intra_ext_tx_prob[EXT_TX_SIZES][TX_TYPES][TX_TYPES - 1];
  vpx_prob inter_ext_tx_prob[EXT_TX_SIZES][TX_TYPES - 1];
Jingning Han's avatar
Jingning Han committed
72
73
74
75
  int initialized;
} FRAME_CONTEXT;

typedef struct FRAME_COUNTS {
76
  unsigned int kf_y_mode[INTRA_MODES][INTRA_MODES][INTRA_MODES];
Jingning Han's avatar
Jingning Han committed
77
78
79
80
  unsigned int y_mode[BLOCK_SIZE_GROUPS][INTRA_MODES];
  unsigned int uv_mode[INTRA_MODES][INTRA_MODES];
  unsigned int partition[PARTITION_CONTEXTS][PARTITION_TYPES];
  vp10_coeff_count_model coef[TX_SIZES][PLANE_TYPES];
clang-format's avatar
clang-format committed
81
82
83
84
  unsigned int
      eob_branch[TX_SIZES][PLANE_TYPES][REF_TYPES][COEF_BANDS][COEFF_CONTEXTS];
  unsigned int
      switchable_interp[SWITCHABLE_FILTER_CONTEXTS][SWITCHABLE_FILTERS];
Jingning Han's avatar
Jingning Han committed
85
86
87
88
89
90
91
92
  unsigned int inter_mode[INTER_MODE_CONTEXTS][INTER_MODES];
  unsigned int intra_inter[INTRA_INTER_CONTEXTS][2];
  unsigned int comp_inter[COMP_INTER_CONTEXTS][2];
  unsigned int single_ref[REF_CONTEXTS][2][2];
  unsigned int comp_ref[REF_CONTEXTS][2];
  struct tx_counts tx;
  unsigned int skip[SKIP_CONTEXTS][2];
  nmv_context_counts mv;
93
94
95
#if CONFIG_MISC_FIXES
  struct seg_counts seg;
#endif
96
97
  unsigned int intra_ext_tx[EXT_TX_SIZES][TX_TYPES][TX_TYPES];
  unsigned int inter_ext_tx[EXT_TX_SIZES][TX_TYPES];
Jingning Han's avatar
Jingning Han committed
98
99
} FRAME_COUNTS;

clang-format's avatar
clang-format committed
100
101
extern const vpx_prob
    vp10_kf_y_mode_prob[INTRA_MODES][INTRA_MODES][INTRA_MODES - 1];
102
103
#if !CONFIG_MISC_FIXES
extern const vpx_prob vp10_kf_uv_mode_prob[INTRA_MODES][INTRA_MODES - 1];
clang-format's avatar
clang-format committed
104
105
extern const vpx_prob
    vp10_kf_partition_probs[PARTITION_CONTEXTS][PARTITION_TYPES - 1];
106
#endif
hui su's avatar
hui su committed
107

Jingning Han's avatar
Jingning Han committed
108
109
110
extern const vpx_tree_index vp10_intra_mode_tree[TREE_SIZE(INTRA_MODES)];
extern const vpx_tree_index vp10_inter_mode_tree[TREE_SIZE(INTER_MODES)];
extern const vpx_tree_index vp10_partition_tree[TREE_SIZE(PARTITION_TYPES)];
clang-format's avatar
clang-format committed
111
112
extern const vpx_tree_index
    vp10_switchable_interp_tree[TREE_SIZE(SWITCHABLE_FILTERS)];
Jingning Han's avatar
Jingning Han committed
113

Yaowu Xu's avatar
Yaowu Xu committed
114
void vp10_setup_past_independence(struct VP10Common *cm);
Jingning Han's avatar
Jingning Han committed
115

116
117
void vp10_adapt_intra_frame_probs(struct VP10Common *cm);
void vp10_adapt_inter_frame_probs(struct VP10Common *cm);
Jingning Han's avatar
Jingning Han committed
118
119

void vp10_tx_counts_to_branch_counts_32x32(const unsigned int *tx_count_32x32p,
clang-format's avatar
clang-format committed
120
                                           unsigned int (*ct_32x32p)[2]);
Jingning Han's avatar
Jingning Han committed
121
void vp10_tx_counts_to_branch_counts_16x16(const unsigned int *tx_count_16x16p,
clang-format's avatar
clang-format committed
122
                                           unsigned int (*ct_16x16p)[2]);
Jingning Han's avatar
Jingning Han committed
123
void vp10_tx_counts_to_branch_counts_8x8(const unsigned int *tx_count_8x8p,
clang-format's avatar
clang-format committed
124
                                         unsigned int (*ct_8x8p)[2]);
Jingning Han's avatar
Jingning Han committed
125

clang-format's avatar
clang-format committed
126
extern const vpx_tree_index vp10_ext_tx_tree[TREE_SIZE(TX_TYPES)];
127

hui su's avatar
hui su committed
128
129
130
131
132
133
134
135
136
static INLINE int vp10_ceil_log2(int n) {
  int i = 1, p = 2;
  while (p < n) {
    i++;
    p = p << 1;
  }
  return i;
}

Jingning Han's avatar
Jingning Han committed
137
138
139
140
#ifdef __cplusplus
}  // extern "C"
#endif

141
#endif  // VP10_COMMON_ENTROPYMODE_H_