diff options
author | Dmitry Kovalev <dkovalev@google.com> | 2013-07-23 17:02:08 -0700 |
---|---|---|
committer | Dmitry Kovalev <dkovalev@google.com> | 2013-07-23 17:02:08 -0700 |
commit | 1099a436d3be3fac43248dac4a5fd57727683fbd (patch) | |
tree | e43de6625812f4a9965ad54ffdca3bdafa293ffd /vp9/common | |
parent | 8d13b0d1dfccf2359ea4b8e93d016b28eab538cd (diff) | |
download | libvpx-1099a436d3be3fac43248dac4a5fd57727683fbd.tar libvpx-1099a436d3be3fac43248dac4a5fd57727683fbd.tar.gz libvpx-1099a436d3be3fac43248dac4a5fd57727683fbd.tar.bz2 libvpx-1099a436d3be3fac43248dac4a5fd57727683fbd.zip |
Moving counts from FRAME_CONTEXT to new struct FRAME_COUNTS.
Counts are separate from frame context. We have several frame contexts but
need only one copy of all counts.
Change-Id: I5279b0321cb450bbea7049adaa9275306a7cef7d
Diffstat (limited to 'vp9/common')
-rw-r--r-- | vp9/common/vp9_entropy.c | 4 | ||||
-rw-r--r-- | vp9/common/vp9_entropymode.c | 32 | ||||
-rw-r--r-- | vp9/common/vp9_entropymv.c | 2 | ||||
-rw-r--r-- | vp9/common/vp9_onyxc_int.h | 53 |
4 files changed, 41 insertions, 50 deletions
diff --git a/vp9/common/vp9_entropy.c b/vp9/common/vp9_entropy.c index 06929180e..ae25bf355 100644 --- a/vp9/common/vp9_entropy.c +++ b/vp9/common/vp9_entropy.c @@ -629,9 +629,9 @@ static void adapt_coef_probs(VP9_COMMON *cm, TX_SIZE txfm_size, vp9_coeff_probs_model *dst_coef_probs = cm->fc.coef_probs[txfm_size]; vp9_coeff_probs_model *pre_coef_probs = pre_fc->coef_probs[txfm_size]; - vp9_coeff_count_model *coef_counts = cm->fc.coef_counts[txfm_size]; + vp9_coeff_count_model *coef_counts = cm->counts.coef[txfm_size]; unsigned int (*eob_branch_count)[REF_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS] = - cm->fc.eob_branch_counts[txfm_size]; + cm->counts.eob_branch[txfm_size]; int t, i, j, k, l, count; int factor; unsigned int branch_ct[UNCONSTRAINED_NODES][2]; diff --git a/vp9/common/vp9_entropymode.c b/vp9/common/vp9_entropymode.c index fe16423e1..9b9c359a2 100644 --- a/vp9/common/vp9_entropymode.c +++ b/vp9/common/vp9_entropymode.c @@ -357,7 +357,7 @@ void vp9_entropy_mode_init() { } void vp9_init_mode_contexts(VP9_COMMON *pc) { - vp9_zero(pc->fc.inter_mode_counts); + vp9_zero(pc->counts.inter_mode); vp9_copy(pc->fc.inter_mode_probs, default_inter_mode_probs); } @@ -365,7 +365,7 @@ void vp9_accum_mv_refs(VP9_COMMON *pc, MB_PREDICTION_MODE m, const int context) { unsigned int (*inter_mode_counts)[VP9_INTER_MODES - 1][2] = - pc->fc.inter_mode_counts; + pc->counts.inter_mode; if (m == ZEROMV) { ++inter_mode_counts[context][0][0]; @@ -402,11 +402,12 @@ void vp9_adapt_mode_context(VP9_COMMON *pc) { int i, j; FRAME_CONTEXT *const fc = &pc->fc; FRAME_CONTEXT *const pre_fc = &pc->frame_contexts[pc->frame_context_idx]; + FRAME_COUNTS *const counts = &pc->counts; for (j = 0; j < INTER_MODE_CONTEXTS; j++) for (i = 0; i < VP9_INTER_MODES - 1; i++) fc->inter_mode_probs[j][i] = update_ct2(pre_fc->inter_mode_probs[j][i], - fc->inter_mode_counts[j][i]); + counts->inter_mode[j][i]); } static void update_mode_probs(int n_modes, @@ -428,41 +429,42 @@ void vp9_adapt_mode_probs(VP9_COMMON *cm) { int i, j; FRAME_CONTEXT *fc = &cm->fc; FRAME_CONTEXT *pre_fc = &cm->frame_contexts[cm->frame_context_idx]; + FRAME_COUNTS *counts = &cm->counts; for (i = 0; i < INTRA_INTER_CONTEXTS; i++) fc->intra_inter_prob[i] = update_ct2(pre_fc->intra_inter_prob[i], - fc->intra_inter_count[i]); + counts->intra_inter[i]); for (i = 0; i < COMP_INTER_CONTEXTS; i++) fc->comp_inter_prob[i] = update_ct2(pre_fc->comp_inter_prob[i], - fc->comp_inter_count[i]); + counts->comp_inter[i]); for (i = 0; i < REF_CONTEXTS; i++) fc->comp_ref_prob[i] = update_ct2(pre_fc->comp_ref_prob[i], - fc->comp_ref_count[i]); + counts->comp_ref[i]); for (i = 0; i < REF_CONTEXTS; i++) for (j = 0; j < 2; j++) fc->single_ref_prob[i][j] = update_ct2(pre_fc->single_ref_prob[i][j], - fc->single_ref_count[i][j]); + counts->single_ref[i][j]); for (i = 0; i < BLOCK_SIZE_GROUPS; i++) update_mode_probs(VP9_INTRA_MODES, vp9_intra_mode_tree, - fc->y_mode_counts[i], pre_fc->y_mode_prob[i], + counts->y_mode[i], pre_fc->y_mode_prob[i], fc->y_mode_prob[i], 0); for (i = 0; i < VP9_INTRA_MODES; ++i) update_mode_probs(VP9_INTRA_MODES, vp9_intra_mode_tree, - fc->uv_mode_counts[i], pre_fc->uv_mode_prob[i], + counts->uv_mode[i], pre_fc->uv_mode_prob[i], fc->uv_mode_prob[i], 0); for (i = 0; i < NUM_PARTITION_CONTEXTS; i++) update_mode_probs(PARTITION_TYPES, vp9_partition_tree, - fc->partition_counts[i], + counts->partition[i], pre_fc->partition_prob[INTER_FRAME][i], fc->partition_prob[INTER_FRAME][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], + counts->switchable_interp[i], pre_fc->switchable_interp_prob[i], fc->switchable_interp_prob[i], 0); } @@ -474,18 +476,18 @@ void vp9_adapt_mode_probs(VP9_COMMON *cm) { unsigned int branch_ct_32x32p[TX_SIZE_MAX_SB - 1][2]; for (i = 0; i < TX_SIZE_CONTEXTS; ++i) { - tx_counts_to_branch_counts_8x8(fc->tx_counts.p8x8[i], branch_ct_8x8p); + tx_counts_to_branch_counts_8x8(counts->tx.p8x8[i], branch_ct_8x8p); for (j = 0; j < TX_SIZE_MAX_SB - 3; ++j) fc->tx_probs.p8x8[i][j] = update_ct2(pre_fc->tx_probs.p8x8[i][j], branch_ct_8x8p[j]); - tx_counts_to_branch_counts_16x16(fc->tx_counts.p16x16[i], + tx_counts_to_branch_counts_16x16(counts->tx.p16x16[i], branch_ct_16x16p); for (j = 0; j < TX_SIZE_MAX_SB - 2; ++j) fc->tx_probs.p16x16[i][j] = update_ct2(pre_fc->tx_probs.p16x16[i][j], branch_ct_16x16p[j]); - tx_counts_to_branch_counts_32x32(fc->tx_counts.p32x32[i], + tx_counts_to_branch_counts_32x32(counts->tx.p32x32[i], branch_ct_32x32p); for (j = 0; j < TX_SIZE_MAX_SB - 1; ++j) fc->tx_probs.p32x32[i][j] = update_ct2(pre_fc->tx_probs.p32x32[i][j], @@ -495,7 +497,7 @@ void vp9_adapt_mode_probs(VP9_COMMON *cm) { for (i = 0; i < MBSKIP_CONTEXTS; ++i) fc->mbskip_probs[i] = update_ct2(pre_fc->mbskip_probs[i], - fc->mbskip_count[i]); + counts->mbskip[i]); } static void set_default_lf_deltas(MACROBLOCKD *xd) { diff --git a/vp9/common/vp9_entropymv.c b/vp9/common/vp9_entropymv.c index a03862bb1..343b6241d 100644 --- a/vp9/common/vp9_entropymv.c +++ b/vp9/common/vp9_entropymv.c @@ -226,7 +226,7 @@ void vp9_adapt_mv_probs(VP9_COMMON *cm, int usehp) { nmv_context *ctx = &cm->fc.nmvc; nmv_context *pre_ctx = &pre_fc->nmvc; - nmv_context_counts *cts = &cm->fc.NMVcount; + nmv_context_counts *cts = &cm->counts.mv; vp9_counts_process(cts, usehp); diff --git a/vp9/common/vp9_onyxc_int.h b/vp9/common/vp9_onyxc_int.h index 8b76ac711..f31f24b26 100644 --- a/vp9/common/vp9_onyxc_int.h +++ b/vp9/common/vp9_onyxc_int.h @@ -38,55 +38,43 @@ #define NUM_FRAME_CONTEXTS (1 << NUM_FRAME_CONTEXTS_LOG2) typedef struct frame_contexts { - // y_mode, uv_mode, partition vp9_prob y_mode_prob[BLOCK_SIZE_GROUPS][VP9_INTRA_MODES - 1]; vp9_prob uv_mode_prob[VP9_INTRA_MODES][VP9_INTRA_MODES - 1]; vp9_prob partition_prob[NUM_FRAME_TYPES][NUM_PARTITION_CONTEXTS] [PARTITION_TYPES - 1]; - - unsigned int y_mode_counts[BLOCK_SIZE_GROUPS][VP9_INTRA_MODES]; - unsigned int uv_mode_counts[VP9_INTRA_MODES][VP9_INTRA_MODES]; - unsigned int partition_counts[NUM_PARTITION_CONTEXTS][PARTITION_TYPES]; - - // coeff vp9_coeff_probs_model coef_probs[TX_SIZE_MAX_SB][BLOCK_TYPES]; - vp9_coeff_count_model coef_counts[TX_SIZE_MAX_SB][BLOCK_TYPES]; - unsigned int eob_branch_counts[TX_SIZE_MAX_SB][BLOCK_TYPES][REF_TYPES] - [COEF_BANDS][PREV_COEF_CONTEXTS]; - - // switchable_interp vp9_prob switchable_interp_prob[VP9_SWITCHABLE_FILTERS + 1] [VP9_SWITCHABLE_FILTERS - 1]; - unsigned int switchable_interp_count[VP9_SWITCHABLE_FILTERS + 1] - [VP9_SWITCHABLE_FILTERS]; - // inter_mode vp9_prob inter_mode_probs[INTER_MODE_CONTEXTS][VP9_INTER_MODES - 1]; - unsigned int inter_mode_counts[INTER_MODE_CONTEXTS][VP9_INTER_MODES - 1][2]; - - // intra_inter, comp_inter, single_ref, comp_ref vp9_prob intra_inter_prob[INTRA_INTER_CONTEXTS]; vp9_prob comp_inter_prob[COMP_INTER_CONTEXTS]; vp9_prob single_ref_prob[REF_CONTEXTS][2]; vp9_prob comp_ref_prob[REF_CONTEXTS]; - - unsigned int intra_inter_count[INTRA_INTER_CONTEXTS][2]; - unsigned int comp_inter_count[COMP_INTER_CONTEXTS][2]; - unsigned int single_ref_count[REF_CONTEXTS][2][2]; - unsigned int comp_ref_count[REF_CONTEXTS][2]; - - // tx_probs struct tx_probs tx_probs; - struct tx_counts tx_counts; - - // mbskip vp9_prob mbskip_probs[MBSKIP_CONTEXTS]; - unsigned int mbskip_count[MBSKIP_CONTEXTS][2]; - - // mv nmv_context nmvc; - nmv_context_counts NMVcount; } FRAME_CONTEXT; +typedef struct { + unsigned int y_mode[BLOCK_SIZE_GROUPS][VP9_INTRA_MODES]; + unsigned int uv_mode[VP9_INTRA_MODES][VP9_INTRA_MODES]; + unsigned int partition[NUM_PARTITION_CONTEXTS][PARTITION_TYPES]; + vp9_coeff_count_model coef[TX_SIZE_MAX_SB][BLOCK_TYPES]; + unsigned int eob_branch[TX_SIZE_MAX_SB][BLOCK_TYPES][REF_TYPES] + [COEF_BANDS][PREV_COEF_CONTEXTS]; + unsigned int switchable_interp[VP9_SWITCHABLE_FILTERS + 1] + [VP9_SWITCHABLE_FILTERS]; + unsigned int inter_mode[INTER_MODE_CONTEXTS][VP9_INTER_MODES - 1][2]; + 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 mbskip[MBSKIP_CONTEXTS][2]; + nmv_context_counts mv; +} FRAME_COUNTS; + + typedef enum { SINGLE_PREDICTION_ONLY = 0, COMP_PREDICTION_ONLY = 1, @@ -205,6 +193,7 @@ typedef struct VP9Common { FRAME_CONTEXT fc; /* this frame entropy */ FRAME_CONTEXT frame_contexts[NUM_FRAME_CONTEXTS]; unsigned int frame_context_idx; /* Context to use/update */ + FRAME_COUNTS counts; unsigned int current_video_frame; int version; |