Simplify update_coef_probs()

1. reduce the size of temporaray arrays on stack
2. avoid build_tree_distribution for tx size that is not used at all.

Change-Id: I0f8d7124e16a3789d3c15ad24cf02c1c12789e2c
This commit is contained in:
Yaowu Xu 2015-01-28 15:12:42 -08:00
parent c29c613400
commit ff99a3c750

View File

@ -611,12 +611,10 @@ static void update_coef_probs_common(vp9_writer* const bc, VP9_COMP *cpi,
case ONE_LOOP_REDUCED: { case ONE_LOOP_REDUCED: {
int updates = 0; int updates = 0;
int noupdates_before_first = 0; int noupdates_before_first = 0;
if (tx_size >= TX_16X16 && cpi->sf.tx_size_search_method == USE_TX_8X8) { if (tx_size >= TX_16X16 && cpi->sf.tx_size_search_method == USE_TX_8X8) {
vp9_write_bit(bc, 0); vp9_write_bit(bc, 0);
return; return;
} }
for (i = 0; i < PLANE_TYPES; ++i) { for (i = 0; i < PLANE_TYPES; ++i) {
for (j = 0; j < REF_TYPES; ++j) { for (j = 0; j < REF_TYPES; ++j) {
for (k = 0; k < COEF_BANDS; ++k) { for (k = 0; k < COEF_BANDS; ++k) {
@ -668,7 +666,6 @@ static void update_coef_probs_common(vp9_writer* const bc, VP9_COMP *cpi,
} }
return; return;
} }
default: default:
assert(0); assert(0);
} }
@ -678,16 +675,14 @@ static void update_coef_probs(VP9_COMP *cpi, vp9_writer* w) {
const TX_MODE tx_mode = cpi->common.tx_mode; const TX_MODE tx_mode = cpi->common.tx_mode;
const TX_SIZE max_tx_size = tx_mode_to_biggest_tx_size[tx_mode]; const TX_SIZE max_tx_size = tx_mode_to_biggest_tx_size[tx_mode];
TX_SIZE tx_size; TX_SIZE tx_size;
vp9_coeff_stats frame_branch_ct[TX_SIZES][PLANE_TYPES]; for (tx_size = TX_4X4; tx_size <= max_tx_size; ++tx_size) {
vp9_coeff_probs_model frame_coef_probs[TX_SIZES][PLANE_TYPES]; vp9_coeff_stats frame_branch_ct[PLANE_TYPES];
vp9_coeff_probs_model frame_coef_probs[PLANE_TYPES];
for (tx_size = TX_4X4; tx_size <= TX_32X32; ++tx_size) build_tree_distribution(cpi, tx_size, frame_branch_ct,
build_tree_distribution(cpi, tx_size, frame_branch_ct[tx_size], frame_coef_probs);
frame_coef_probs[tx_size]); update_coef_probs_common(w, cpi, tx_size, frame_branch_ct,
frame_coef_probs);
for (tx_size = TX_4X4; tx_size <= max_tx_size; ++tx_size) }
update_coef_probs_common(w, cpi, tx_size, frame_branch_ct[tx_size],
frame_coef_probs[tx_size]);
} }
static void encode_loopfilter(struct loopfilter *lf, static void encode_loopfilter(struct loopfilter *lf,