summaryrefslogtreecommitdiff
path: root/vp9/common
diff options
context:
space:
mode:
authorRonald S. Bultje <rbultje@google.com>2013-05-30 09:58:53 -0700
committerRonald S. Bultje <rbultje@google.com>2013-05-30 09:58:53 -0700
commit98c192ae83a4a5f470ac63162af321b6085994f3 (patch)
treeb79ddab89a3b19a60a2b4abfa9b98300b67a256c /vp9/common
parentc98bfcfbbb23dc7c8c8641831922877d0d31c67e (diff)
downloadlibvpx-98c192ae83a4a5f470ac63162af321b6085994f3.tar
libvpx-98c192ae83a4a5f470ac63162af321b6085994f3.tar.gz
libvpx-98c192ae83a4a5f470ac63162af321b6085994f3.tar.bz2
libvpx-98c192ae83a4a5f470ac63162af321b6085994f3.zip
Merge all intra mode coding trees into a single one.
Also merge all counters. This removes a few unused probability updates from the bitstream. Change-Id: I20f58853e9dac84d8c0d9703ae012c55917516eb
Diffstat (limited to 'vp9/common')
-rw-r--r--vp9/common/vp9_alloccommon.c4
-rw-r--r--vp9/common/vp9_entropymode.c104
-rw-r--r--vp9/common/vp9_entropymode.h17
-rw-r--r--vp9/common/vp9_onyxc_int.h22
4 files changed, 19 insertions, 128 deletions
diff --git a/vp9/common/vp9_alloccommon.c b/vp9/common/vp9_alloccommon.c
index 73f26f6b8..ef14e1ab6 100644
--- a/vp9/common/vp9_alloccommon.c
+++ b/vp9/common/vp9_alloccommon.c
@@ -202,8 +202,6 @@ void vp9_create_common(VP9_COMMON *oci) {
vp9_init_mbmode_probs(oci);
- vp9_default_bmode_probs(oci->fc.bmode_prob);
-
oci->txfm_mode = ONLY_4X4;
oci->comp_pred_mode = HYBRID_PREDICTION;
oci->no_lpf = 0;
@@ -212,8 +210,6 @@ void vp9_create_common(VP9_COMMON *oci) {
// Initialize reference frame sign bias structure to defaults
vpx_memset(oci->ref_frame_sign_bias, 0, sizeof(oci->ref_frame_sign_bias));
-
- oci->kf_ymode_probs_update = 0;
}
void vp9_remove_common(VP9_COMMON *oci) {
diff --git a/vp9/common/vp9_entropymode.c b/vp9/common/vp9_entropymode.c
index 9c390dfd0..f45877580 100644
--- a/vp9/common/vp9_entropymode.c
+++ b/vp9/common/vp9_entropymode.c
@@ -89,7 +89,7 @@ const vp9_prob vp9_partition_probs[NUM_PARTITION_CONTEXTS]
};
/* Array indices are identical to previously-existing INTRAMODECONTEXTNODES. */
-const vp9_tree_index vp9_bmode_tree[VP9_BINTRAMODES * 2 - 2] = {
+const vp9_tree_index vp9_intra_mode_tree[VP9_BINTRAMODES * 2 - 2] = {
-DC_PRED, 2, /* 0 = DC_NODE */
-TM_PRED, 4, /* 1 = TM_NODE */
-V_PRED, 6, /* 2 = V_NODE */
@@ -101,46 +101,6 @@ const vp9_tree_index vp9_bmode_tree[VP9_BINTRAMODES * 2 - 2] = {
-D153_PRED, -D27_PRED /* 8 = D153_NODE */
};
-/* Again, these trees use the same probability indices as their
- explicitly-programmed predecessors. */
-const vp9_tree_index vp9_ymode_tree[VP9_YMODES * 2 - 2] = {
- 2, 14,
- -DC_PRED, 4,
- 6, 8,
- -D45_PRED, -D135_PRED,
- 10, 12,
- -D117_PRED, -D153_PRED,
- -D27_PRED, -D63_PRED,
- 16, 18,
- -V_PRED, -H_PRED,
- -TM_PRED, -I4X4_PRED
-};
-
-const vp9_tree_index vp9_kf_ymode_tree[VP9_YMODES * 2 - 2] = {
- 2, 14,
- -DC_PRED, 4,
- 6, 8,
- -D45_PRED, -D135_PRED,
- 10, 12,
- -D117_PRED, -D153_PRED,
- -D27_PRED, -D63_PRED,
- 16, 18,
- -V_PRED, -H_PRED,
- -TM_PRED, -I4X4_PRED
-};
-
-const vp9_tree_index vp9_uv_mode_tree[VP9_UV_MODES * 2 - 2] = {
- 2, 14,
- -DC_PRED, 4,
- 6, 8,
- -D45_PRED, -D135_PRED,
- 10, 12,
- -D117_PRED, -D153_PRED,
- -D27_PRED, -D63_PRED,
- -V_PRED, 16,
- -H_PRED, -TM_PRED
-};
-
const vp9_tree_index vp9_sb_mv_ref_tree[6] = {
-ZEROMV, 2,
-NEARESTMV, 4,
@@ -153,13 +113,7 @@ const vp9_tree_index vp9_partition_tree[6] = {
-PARTITION_VERT, -PARTITION_SPLIT
};
-struct vp9_token vp9_bmode_encodings[VP9_BINTRAMODES];
-struct vp9_token vp9_kf_bmode_encodings[VP9_BINTRAMODES];
-struct vp9_token vp9_ymode_encodings[VP9_YMODES];
-struct vp9_token vp9_sb_ymode_encodings[VP9_I32X32_MODES];
-struct vp9_token vp9_sb_kf_ymode_encodings[VP9_I32X32_MODES];
-struct vp9_token vp9_kf_ymode_encodings[VP9_YMODES];
-struct vp9_token vp9_uv_mode_encodings[VP9_UV_MODES];
+struct vp9_token vp9_intra_mode_encodings[VP9_BINTRAMODES];
struct vp9_token vp9_sb_mv_ref_encoding_array[VP9_MVREFS];
@@ -169,22 +123,13 @@ void vp9_init_mbmode_probs(VP9_COMMON *x) {
unsigned int bct[VP9_YMODES][2]; // num Ymodes > num UV modes
int i;
- vp9_tree_probs_from_distribution(vp9_ymode_tree, x->fc.ymode_prob,
- bct, y_mode_cts, 0);
- vp9_tree_probs_from_distribution(vp9_sb_ymode_tree, x->fc.sb_ymode_prob,
+ vp9_tree_probs_from_distribution(vp9_intra_mode_tree, x->fc.y_mode_prob,
bct, y_mode_cts, 0);
- for (i = 0; i < 8; i++) {
- vp9_tree_probs_from_distribution(vp9_kf_ymode_tree, x->kf_ymode_prob[i],
- bct, kf_y_mode_cts[i], 0);
- vp9_tree_probs_from_distribution(vp9_sb_kf_ymode_tree,
- x->sb_kf_ymode_prob[i], bct,
- kf_y_mode_cts[i], 0);
- }
for (i = 0; i < VP9_YMODES; i++) {
- vp9_tree_probs_from_distribution(vp9_uv_mode_tree, x->kf_uv_mode_prob[i],
+ vp9_tree_probs_from_distribution(vp9_intra_mode_tree, x->kf_uv_mode_prob[i],
bct, kf_uv_mode_cts[i], 0);
- vp9_tree_probs_from_distribution(vp9_uv_mode_tree, x->fc.uv_mode_prob[i],
+ vp9_tree_probs_from_distribution(vp9_intra_mode_tree, x->fc.uv_mode_prob[i],
bct, uv_mode_cts[i], 0);
}
@@ -199,19 +144,6 @@ void vp9_init_mbmode_probs(VP9_COMMON *x) {
x->ref_pred_probs[2] = DEFAULT_PRED_PROB_2;
}
-
-static void intra_bmode_probs_from_distribution(
- vp9_prob p[VP9_BINTRAMODES - 1],
- unsigned int branch_ct[VP9_BINTRAMODES - 1][2],
- const unsigned int events[VP9_BINTRAMODES]) {
- vp9_tree_probs_from_distribution(vp9_bmode_tree, p, branch_ct, events, 0);
-}
-
-void vp9_default_bmode_probs(vp9_prob p[VP9_BINTRAMODES - 1]) {
- unsigned int branch_ct[VP9_BINTRAMODES - 1][2];
- intra_bmode_probs_from_distribution(p, branch_ct, bmode_cts);
-}
-
#if VP9_SWITCHABLE_FILTERS == 3
const vp9_tree_index vp9_switchable_interp_tree[VP9_SWITCHABLE_FILTERS*2-2] = {
-0, 2,
@@ -246,13 +178,7 @@ const int vp9_switchable_interp_map[SWITCHABLE+1] = {-1, 0, 1, -1, -1};
const int vp9_is_interpolating_filter[SWITCHABLE + 1] = {0, 1, 1, 1, -1};
void vp9_entropy_mode_init() {
- vp9_tokens_from_tree(vp9_kf_bmode_encodings, vp9_bmode_tree);
- vp9_tokens_from_tree(vp9_bmode_encodings, vp9_bmode_tree);
- vp9_tokens_from_tree(vp9_ymode_encodings, vp9_ymode_tree);
- vp9_tokens_from_tree(vp9_kf_ymode_encodings, vp9_kf_ymode_tree);
- vp9_tokens_from_tree(vp9_sb_ymode_encodings, vp9_sb_ymode_tree);
- vp9_tokens_from_tree(vp9_sb_kf_ymode_encodings, vp9_sb_kf_ymode_tree);
- vp9_tokens_from_tree(vp9_uv_mode_encodings, vp9_uv_mode_tree);
+ vp9_tokens_from_tree(vp9_intra_mode_encodings, vp9_intra_mode_tree);
vp9_tokens_from_tree(vp9_switchable_interp_encodings,
vp9_switchable_interp_tree);
vp9_tokens_from_tree(vp9_partition_encodings, vp9_partition_tree);
@@ -375,22 +301,15 @@ void vp9_adapt_mode_probs(VP9_COMMON *cm) {
printf("};\n");
#endif
- update_mode_probs(VP9_YMODES, vp9_ymode_tree,
- fc->ymode_counts, fc->pre_ymode_prob,
- fc->ymode_prob, 0);
- update_mode_probs(VP9_I32X32_MODES, vp9_sb_ymode_tree,
- fc->sb_ymode_counts, fc->pre_sb_ymode_prob,
- fc->sb_ymode_prob, 0);
+ update_mode_probs(VP9_YMODES, vp9_intra_mode_tree,
+ fc->y_mode_counts, fc->pre_y_mode_prob,
+ fc->y_mode_prob, 0);
for (i = 0; i < VP9_YMODES; ++i)
- update_mode_probs(VP9_UV_MODES, vp9_uv_mode_tree,
+ update_mode_probs(VP9_UV_MODES, vp9_intra_mode_tree,
fc->uv_mode_counts[i], fc->pre_uv_mode_prob[i],
fc->uv_mode_prob[i], 0);
- update_mode_probs(VP9_BINTRAMODES, vp9_bmode_tree,
- fc->bmode_counts, fc->pre_bmode_prob,
- fc->bmode_prob, 0);
-
for (i = 0; i < NUM_PARTITION_CONTEXTS; i++)
update_mode_probs(PARTITION_TYPES, vp9_partition_tree,
fc->partition_counts[i], fc->pre_partition_prob[i],
@@ -428,8 +347,7 @@ void vp9_setup_past_independence(VP9_COMMON *cm, MACROBLOCKD *xd) {
vp9_default_coef_probs(cm);
vp9_init_mbmode_probs(cm);
- vp9_default_bmode_probs(cm->fc.bmode_prob);
- vpx_memcpy(cm->kf_bmode_prob, vp9_kf_default_bmode_probs,
+ vpx_memcpy(cm->kf_y_mode_prob, vp9_kf_default_bmode_probs,
sizeof(vp9_kf_default_bmode_probs));
vp9_init_mv_probs(cm);
diff --git a/vp9/common/vp9_entropymode.h b/vp9/common/vp9_entropymode.h
index 7a83c702e..120c81d4c 100644
--- a/vp9/common/vp9_entropymode.h
+++ b/vp9/common/vp9_entropymode.h
@@ -23,21 +23,10 @@ extern const vp9_prob vp9_kf_default_bmode_probs[VP9_BINTRAMODES]
[VP9_BINTRAMODES]
[VP9_BINTRAMODES -1 ];
-extern const vp9_tree_index vp9_bmode_tree[];
-extern const vp9_tree_index vp9_ymode_tree[];
-extern const vp9_tree_index vp9_kf_ymode_tree[];
-extern const vp9_tree_index vp9_uv_mode_tree[];
-#define vp9_sb_ymode_tree vp9_uv_mode_tree
-#define vp9_sb_kf_ymode_tree vp9_uv_mode_tree
+extern const vp9_tree_index vp9_intra_mode_tree[];
extern const vp9_tree_index vp9_sb_mv_ref_tree[];
-extern struct vp9_token vp9_bmode_encodings[VP9_BINTRAMODES];
-extern struct vp9_token vp9_kf_bmode_encodings[VP9_BINTRAMODES];
-extern struct vp9_token vp9_ymode_encodings[VP9_YMODES];
-extern struct vp9_token vp9_sb_ymode_encodings[VP9_I32X32_MODES];
-extern struct vp9_token vp9_sb_kf_ymode_encodings[VP9_I32X32_MODES];
-extern struct vp9_token vp9_kf_ymode_encodings[VP9_YMODES];
-extern struct vp9_token vp9_uv_mode_encodings[VP9_UV_MODES];
+extern struct vp9_token vp9_intra_mode_encodings[VP9_BINTRAMODES];
/* Inter mode values do not start at zero */
@@ -64,8 +53,6 @@ extern void vp9_accum_mv_refs(struct VP9Common *pc,
MB_PREDICTION_MODE m,
const int context);
-void vp9_default_bmode_probs(vp9_prob dest[VP9_BINTRAMODES - 1]);
-
void vp9_adapt_mode_probs(struct VP9Common *);
#define VP9_SWITCHABLE_FILTERS 3 /* number of switchable filters */
diff --git a/vp9/common/vp9_onyxc_int.h b/vp9/common/vp9_onyxc_int.h
index b148a6377..946c33dd5 100644
--- a/vp9/common/vp9_onyxc_int.h
+++ b/vp9/common/vp9_onyxc_int.h
@@ -47,22 +47,16 @@ void vp9_initialize_common(void);
#define MAX_LAG_BUFFERS 25
typedef struct frame_contexts {
- vp9_prob bmode_prob[VP9_BINTRAMODES - 1];
- vp9_prob ymode_prob[VP9_YMODES - 1]; /* interframe intra mode probs */
- vp9_prob sb_ymode_prob[VP9_I32X32_MODES - 1];
+ vp9_prob y_mode_prob[VP9_YMODES - 1]; /* interframe intra mode probs */
vp9_prob uv_mode_prob[VP9_YMODES][VP9_UV_MODES - 1];
vp9_prob partition_prob[NUM_PARTITION_CONTEXTS][PARTITION_TYPES - 1];
nmv_context nmvc;
nmv_context pre_nmvc;
- vp9_prob pre_bmode_prob[VP9_BINTRAMODES - 1];
- vp9_prob pre_ymode_prob[VP9_YMODES - 1]; /* interframe intra mode probs */
- vp9_prob pre_sb_ymode_prob[VP9_I32X32_MODES - 1];
+ vp9_prob pre_y_mode_prob[VP9_YMODES - 1]; /* interframe intra mode probs */
vp9_prob pre_uv_mode_prob[VP9_YMODES][VP9_UV_MODES - 1];
vp9_prob pre_partition_prob[NUM_PARTITION_CONTEXTS][PARTITION_TYPES - 1];
- unsigned int bmode_counts[VP9_BINTRAMODES];
- unsigned int ymode_counts[VP9_YMODES]; /* interframe intra mode probs */
- unsigned int sb_ymode_counts[VP9_I32X32_MODES];
+ unsigned int y_mode_counts[VP9_YMODES]; /* interframe intra mode probs */
unsigned int uv_mode_counts[VP9_YMODES][VP9_UV_MODES];
unsigned int partition_counts[NUM_PARTITION_CONTEXTS][PARTITION_TYPES];
@@ -217,13 +211,9 @@ typedef struct VP9Common {
/* keyframe block modes are predicted by their above, left neighbors */
- vp9_prob kf_bmode_prob[VP9_BINTRAMODES]
- [VP9_BINTRAMODES]
- [VP9_BINTRAMODES - 1];
- vp9_prob kf_ymode_prob[8][VP9_YMODES - 1]; /* keyframe "" */
- vp9_prob sb_kf_ymode_prob[8][VP9_I32X32_MODES - 1];
- int kf_ymode_probs_index;
- int kf_ymode_probs_update;
+ vp9_prob kf_y_mode_prob[VP9_BINTRAMODES]
+ [VP9_BINTRAMODES]
+ [VP9_BINTRAMODES - 1];
vp9_prob kf_uv_mode_prob[VP9_YMODES] [VP9_UV_MODES - 1];
vp9_prob prob_intra_coded;