diff options
Diffstat (limited to 'vp9/common')
-rw-r--r-- | vp9/common/vp9_coefupdateprobs.h | 2 | ||||
-rw-r--r-- | vp9/common/vp9_entropymode.c | 50 | ||||
-rw-r--r-- | vp9/common/vp9_findnearmv.c | 6 | ||||
-rw-r--r-- | vp9/common/vp9_modecont.c | 3 | ||||
-rw-r--r-- | vp9/common/vp9_modecont.h | 3 | ||||
-rw-r--r-- | vp9/common/vp9_onyxc_int.h | 11 |
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 { |