Index: source/libvpx/vp9/common/vp9_entropy.c |
=================================================================== |
--- source/libvpx/vp9/common/vp9_entropy.c (revision 219822) |
+++ source/libvpx/vp9/common/vp9_entropy.c (working copy) |
@@ -73,7 +73,7 @@ |
13, 11, 14, 15, |
}; |
-DECLARE_ALIGNED(64, const int16_t, vp9_default_scan_8x8[64]) = { |
+DECLARE_ALIGNED(16, const int16_t, vp9_default_scan_8x8[64]) = { |
0, 8, 1, 16, 9, 2, 17, 24, |
10, 3, 18, 25, 32, 11, 4, 26, |
33, 19, 40, 12, 34, 27, 5, 41, |
@@ -377,7 +377,7 @@ |
static void extend_model_to_full_distribution(vp9_prob p, |
vp9_prob *tree_probs) { |
- const int l = ((p - 1) / 2); |
+ const int l = (p - 1) / 2; |
const vp9_prob (*model)[MODEL_NODES] = modelcoefprobs_pareto8; |
if (p & 1) { |
vpx_memcpy(tree_probs + UNCONSTRAINED_NODES, |
@@ -419,7 +419,7 @@ |
init_bit_tree(cat6, 14); |
} |
-vp9_extra_bit vp9_extra_bits[12] = { |
+const vp9_extra_bit vp9_extra_bits[12] = { |
{ 0, 0, 0, 0}, |
{ 0, 0, 0, 1}, |
{ 0, 0, 0, 2}, |
@@ -437,14 +437,10 @@ |
#include "vp9/common/vp9_default_coef_probs.h" |
void vp9_default_coef_probs(VP9_COMMON *pc) { |
- vpx_memcpy(pc->fc.coef_probs[TX_4X4], default_coef_probs_4x4, |
- sizeof(pc->fc.coef_probs[TX_4X4])); |
- vpx_memcpy(pc->fc.coef_probs[TX_8X8], default_coef_probs_8x8, |
- sizeof(pc->fc.coef_probs[TX_8X8])); |
- vpx_memcpy(pc->fc.coef_probs[TX_16X16], default_coef_probs_16x16, |
- sizeof(pc->fc.coef_probs[TX_16X16])); |
- vpx_memcpy(pc->fc.coef_probs[TX_32X32], default_coef_probs_32x32, |
- sizeof(pc->fc.coef_probs[TX_32X32])); |
+ vp9_copy(pc->fc.coef_probs[TX_4X4], default_coef_probs_4x4); |
+ vp9_copy(pc->fc.coef_probs[TX_8X8], default_coef_probs_8x8); |
+ vp9_copy(pc->fc.coef_probs[TX_16X16], default_coef_probs_16x16); |
+ vp9_copy(pc->fc.coef_probs[TX_32X32], default_coef_probs_32x32); |
} |
// Neighborhood 5-tuples for various scans and blocksizes, |
@@ -613,20 +609,19 @@ |
#define COEF_COUNT_SAT_AFTER_KEY 24 |
#define COEF_MAX_UPDATE_FACTOR_AFTER_KEY 128 |
-static void adapt_coef_probs(VP9_COMMON *cm, TX_SIZE txfm_size, |
- int count_sat, int update_factor) { |
+static void adapt_coef_probs(VP9_COMMON *cm, TX_SIZE tx_size, |
+ unsigned int count_sat, |
+ unsigned int update_factor) { |
FRAME_CONTEXT *pre_fc = &cm->frame_contexts[cm->frame_context_idx]; |
- 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->counts.coef[txfm_size]; |
+ vp9_coeff_probs_model *dst_coef_probs = cm->fc.coef_probs[tx_size]; |
+ vp9_coeff_probs_model *pre_coef_probs = pre_fc->coef_probs[tx_size]; |
+ vp9_coeff_count_model *coef_counts = cm->counts.coef[tx_size]; |
unsigned int (*eob_branch_count)[REF_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS] = |
- cm->counts.eob_branch[txfm_size]; |
- int t, i, j, k, l, count; |
- int factor; |
+ cm->counts.eob_branch[tx_size]; |
+ int t, i, j, k, l; |
unsigned int branch_ct[UNCONSTRAINED_NODES][2]; |
vp9_prob coef_probs[UNCONSTRAINED_NODES]; |
- int entropy_nodes_adapt = UNCONSTRAINED_NODES; |
for (i = 0; i < BLOCK_TYPES; ++i) |
for (j = 0; j < REF_TYPES; ++j) |
@@ -634,29 +629,23 @@ |
for (l = 0; l < PREV_COEF_CONTEXTS; ++l) { |
if (l >= 3 && k == 0) |
continue; |
- vp9_tree_probs_from_distribution( |
- vp9_coefmodel_tree, |
- coef_probs, branch_ct, |
- coef_counts[i][j][k][l], 0); |
+ vp9_tree_probs_from_distribution(vp9_coefmodel_tree, coef_probs, |
+ branch_ct, coef_counts[i][j][k][l], |
+ 0); |
branch_ct[0][1] = eob_branch_count[i][j][k][l] - branch_ct[0][0]; |
coef_probs[0] = get_binary_prob(branch_ct[0][0], branch_ct[0][1]); |
- for (t = 0; t < entropy_nodes_adapt; ++t) { |
- count = branch_ct[t][0] + branch_ct[t][1]; |
- count = count > count_sat ? count_sat : count; |
- factor = (update_factor * count / count_sat); |
- dst_coef_probs[i][j][k][l][t] = |
- weighted_prob(pre_coef_probs[i][j][k][l][t], |
- coef_probs[t], factor); |
- } |
+ for (t = 0; t < UNCONSTRAINED_NODES; ++t) |
+ dst_coef_probs[i][j][k][l][t] = merge_probs( |
+ pre_coef_probs[i][j][k][l][t], coef_probs[t], |
+ branch_ct[t], count_sat, update_factor); |
} |
} |
void vp9_adapt_coef_probs(VP9_COMMON *cm) { |
TX_SIZE t; |
- int count_sat; |
- int update_factor; /* denominator 256 */ |
+ unsigned int count_sat, update_factor; |
- if ((cm->frame_type == KEY_FRAME) || cm->intra_only) { |
+ if (cm->frame_type == KEY_FRAME || cm->intra_only) { |
update_factor = COEF_MAX_UPDATE_FACTOR_KEY; |
count_sat = COEF_COUNT_SAT_KEY; |
} else if (cm->last_frame_type == KEY_FRAME) { |