summaryrefslogtreecommitdiff
path: root/vp9/common
diff options
context:
space:
mode:
Diffstat (limited to 'vp9/common')
-rw-r--r--vp9/common/vp9_coefupdateprobs.h2
-rw-r--r--vp9/common/vp9_entropymode.c50
-rw-r--r--vp9/common/vp9_findnearmv.c6
-rw-r--r--vp9/common/vp9_modecont.c3
-rw-r--r--vp9/common/vp9_modecont.h3
-rw-r--r--vp9/common/vp9_onyxc_int.h11
6 files changed, 48 insertions, 27 deletions
diff --git a/vp9/common/vp9_coefupdateprobs.h b/vp9/common/vp9_coefupdateprobs.h
index e86200802..ce3563483 100644
--- a/vp9/common/vp9_coefupdateprobs.h
+++ b/vp9/common/vp9_coefupdateprobs.h
@@ -14,6 +14,8 @@
/* Update probabilities for the nodes in the token entropy tree.
Generated file included by vp9_entropy.c */
+#define VP9_DEF_UPDATE_PROB 252
+
static const vp9_prob vp9_coef_update_prob[UNCONSTRAINED_NODES] = {
252, 252, 252,
};
diff --git a/vp9/common/vp9_entropymode.c b/vp9/common/vp9_entropymode.c
index 0274b4d05..516e82a68 100644
--- a/vp9/common/vp9_entropymode.c
+++ b/vp9/common/vp9_entropymode.c
@@ -169,29 +169,30 @@ void vp9_entropy_mode_init() {
}
void vp9_init_mode_contexts(VP9_COMMON *pc) {
- vpx_memset(pc->fc.mv_ref_ct, 0, sizeof(pc->fc.mv_ref_ct));
- vpx_memcpy(pc->fc.vp9_mode_contexts,
- vp9_default_mode_contexts,
- sizeof(vp9_default_mode_contexts));
+ vpx_memset(pc->fc.inter_mode_counts, 0, sizeof(pc->fc.inter_mode_counts));
+ vpx_memcpy(pc->fc.inter_mode_probs,
+ vp9_default_inter_mode_probs,
+ sizeof(vp9_default_inter_mode_probs));
}
void vp9_accum_mv_refs(VP9_COMMON *pc,
MB_PREDICTION_MODE m,
const int context) {
- unsigned int (*mv_ref_ct)[VP9_MVREFS - 1][2] = pc->fc.mv_ref_ct;
+ unsigned int (*inter_mode_counts)[VP9_MVREFS - 1][2] =
+ pc->fc.inter_mode_counts;
if (m == ZEROMV) {
- ++mv_ref_ct[context][0][0];
+ ++inter_mode_counts[context][0][0];
} else {
- ++mv_ref_ct[context][0][1];
+ ++inter_mode_counts[context][0][1];
if (m == NEARESTMV) {
- ++mv_ref_ct[context][1][0];
+ ++inter_mode_counts[context][1][0];
} else {
- ++mv_ref_ct[context][1][1];
+ ++inter_mode_counts[context][1][1];
if (m == NEARMV) {
- ++mv_ref_ct[context][2][0];
+ ++inter_mode_counts[context][2][0];
} else {
- ++mv_ref_ct[context][2][1];
+ ++inter_mode_counts[context][2][1];
}
}
}
@@ -201,19 +202,21 @@ void vp9_accum_mv_refs(VP9_COMMON *pc,
#define MVREF_MAX_UPDATE_FACTOR 128
void vp9_adapt_mode_context(VP9_COMMON *pc) {
int i, j;
- unsigned int (*mv_ref_ct)[VP9_MVREFS - 1][2] = pc->fc.mv_ref_ct;
- int (*mode_context)[VP9_MVREFS - 1] = pc->fc.vp9_mode_contexts;
+ unsigned int (*inter_mode_counts)[VP9_MVREFS - 1][2] =
+ pc->fc.inter_mode_counts;
+ vp9_prob (*mode_context)[VP9_MVREFS - 1] = pc->fc.inter_mode_probs;
for (j = 0; j < INTER_MODE_CONTEXTS; j++) {
for (i = 0; i < VP9_MVREFS - 1; i++) {
- int count = mv_ref_ct[j][i][0] + mv_ref_ct[j][i][1], factor;
-
+ int count = inter_mode_counts[j][i][0] + inter_mode_counts[j][i][1];
+ int factor;
count = count > MVREF_COUNT_SAT ? MVREF_COUNT_SAT : count;
factor = (MVREF_MAX_UPDATE_FACTOR * count / MVREF_COUNT_SAT);
- mode_context[j][i] = weighted_prob(pc->fc.vp9_mode_contexts[j][i],
- get_binary_prob(mv_ref_ct[j][i][0],
- mv_ref_ct[j][i][1]),
- factor);
+ mode_context[j][i] = weighted_prob(
+ pc->fc.pre_inter_mode_probs[j][i],
+ get_binary_prob(inter_mode_counts[j][i][0],
+ inter_mode_counts[j][i][1]),
+ factor);
}
}
}
@@ -290,6 +293,15 @@ void vp9_adapt_mode_probs(VP9_COMMON *cm) {
update_mode_probs(PARTITION_TYPES, vp9_partition_tree,
fc->partition_counts[i], fc->pre_partition_prob[i],
fc->partition_prob[i], 0);
+
+ if (cm->mcomp_filter_type == SWITCHABLE) {
+ for (i = 0; i <= VP9_SWITCHABLE_FILTERS; i++) {
+ update_mode_probs(VP9_SWITCHABLE_FILTERS, vp9_switchable_interp_tree,
+ fc->switchable_interp_count[i],
+ fc->pre_switchable_interp_prob[i],
+ fc->switchable_interp_prob[i], 0);
+ }
+ }
}
static void set_default_lf_deltas(MACROBLOCKD *xd) {
diff --git a/vp9/common/vp9_findnearmv.c b/vp9/common/vp9_findnearmv.c
index 9df6ce141..e3a46f26b 100644
--- a/vp9/common/vp9_findnearmv.c
+++ b/vp9/common/vp9_findnearmv.c
@@ -25,9 +25,9 @@ static void lower_mv_precision(int_mv *mv, int usehp) {
}
vp9_prob *vp9_mv_ref_probs(VP9_COMMON *pc, vp9_prob *p, int context) {
- p[0] = pc->fc.vp9_mode_contexts[context][0];
- p[1] = pc->fc.vp9_mode_contexts[context][1];
- p[2] = pc->fc.vp9_mode_contexts[context][2];
+ p[0] = pc->fc.inter_mode_probs[context][0];
+ p[1] = pc->fc.inter_mode_probs[context][1];
+ p[2] = pc->fc.inter_mode_probs[context][2];
return p;
}
diff --git a/vp9/common/vp9_modecont.c b/vp9/common/vp9_modecont.c
index 973bb068c..2aaeaffd9 100644
--- a/vp9/common/vp9_modecont.c
+++ b/vp9/common/vp9_modecont.c
@@ -11,7 +11,8 @@
#include "vp9/common/vp9_entropy.h"
-const int vp9_default_mode_contexts[INTER_MODE_CONTEXTS][VP9_MVREFS - 1] = {
+const vp9_prob vp9_default_inter_mode_probs[INTER_MODE_CONTEXTS]
+ [VP9_MVREFS - 1] = {
{2, 173, 34}, // 0 = both zero mv
{7, 145, 85}, // 1 = one zero mv + one a predicted mv
{7, 166, 63}, // 2 = two predicted mvs
diff --git a/vp9/common/vp9_modecont.h b/vp9/common/vp9_modecont.h
index a6c489325..7a6b35903 100644
--- a/vp9/common/vp9_modecont.h
+++ b/vp9/common/vp9_modecont.h
@@ -13,6 +13,7 @@
#include "vp9/common/vp9_entropy.h"
-extern const int vp9_default_mode_contexts[INTER_MODE_CONTEXTS][VP9_MVREFS - 1];
+extern const int vp9_default_inter_mode_probs[INTER_MODE_CONTEXTS]
+ [VP9_MVREFS - 1];
#endif // VP9_COMMON_VP9_MODECONT_H_
diff --git a/vp9/common/vp9_onyxc_int.h b/vp9/common/vp9_onyxc_int.h
index cbe010a12..91b6bf0dc 100644
--- a/vp9/common/vp9_onyxc_int.h
+++ b/vp9/common/vp9_onyxc_int.h
@@ -71,9 +71,14 @@ typedef struct frame_contexts {
nmv_context_counts NMVcount;
vp9_prob switchable_interp_prob[VP9_SWITCHABLE_FILTERS + 1]
[VP9_SWITCHABLE_FILTERS - 1];
-
- int vp9_mode_contexts[INTER_MODE_CONTEXTS][VP9_MVREFS - 1];
- unsigned int mv_ref_ct[INTER_MODE_CONTEXTS][VP9_MVREFS - 1][2];
+ vp9_prob pre_switchable_interp_prob[VP9_SWITCHABLE_FILTERS + 1]
+ [VP9_SWITCHABLE_FILTERS - 1];
+ unsigned int switchable_interp_count[VP9_SWITCHABLE_FILTERS + 1]
+ [VP9_SWITCHABLE_FILTERS];
+
+ vp9_prob inter_mode_probs[INTER_MODE_CONTEXTS][VP9_MVREFS - 1];
+ vp9_prob pre_inter_mode_probs[INTER_MODE_CONTEXTS][VP9_MVREFS - 1];
+ unsigned int inter_mode_counts[INTER_MODE_CONTEXTS][VP9_MVREFS - 1][2];
} FRAME_CONTEXT;
typedef enum {