Remove more code about probability based entropy coding
Change-Id: Ie0bc1dd68f7a5d81e49da0ae6f855e572e12aa10
diff --git a/aom_dsp/prob.h b/aom_dsp/prob.h
index c717c9a..cf8cabb 100644
--- a/aom_dsp/prob.h
+++ b/aom_dsp/prob.h
@@ -27,8 +27,6 @@
extern "C" {
#endif
-typedef uint8_t aom_prob;
-
// TODO(negge): Rename this aom_prob once we remove vpxbool.
typedef uint16_t aom_cdf_prob;
@@ -625,30 +623,13 @@
#define BR_NODE 1
-#define aom_prob_half ((aom_prob)128)
-
-typedef int8_t aom_tree_index;
-
-#define TREE_SIZE(leaf_count) (-2 + 2 * (leaf_count))
-
-#define MODE_MV_COUNT_SAT 20
-
-/* We build coding trees compactly in arrays.
- Each node of the tree is a pair of aom_tree_indices.
- Array index often references a corresponding probability table.
- Index <= 0 means done encoding/decoding and value = -Index,
- Index > 0 means need another bit, specification at index.
- Nonnegative indices are always even; processing begins at node 0. */
-
-typedef const aom_tree_index aom_tree[];
-
-static INLINE aom_prob get_prob(unsigned int num, unsigned int den) {
+static INLINE uint8_t get_prob(unsigned int num, unsigned int den) {
assert(den != 0);
{
const int p = (int)(((uint64_t)num * 256 + (den >> 1)) / den);
// (p > 255) ? 255 : (p < 1) ? 1 : p;
const int clipped_prob = p | ((255 - p) >> 23) | (p == 0);
- return (aom_prob)clipped_prob;
+ return (uint8_t)clipped_prob;
}
}
diff --git a/av1/common/seg_common.c b/av1/common/seg_common.c
index f14bc02..24d2847 100644
--- a/av1/common/seg_common.c
+++ b/av1/common/seg_common.c
@@ -75,8 +75,4 @@
seg->feature_data[segment_id][feature_id] = seg_data;
}
-const aom_tree_index av1_segment_tree[TREE_SIZE(MAX_SEGMENTS)] = {
- 2, 4, 6, 8, 10, 12, 0, -1, -2, -3, -4, -5, -6, -7
-};
-
// TBD? Functions to read and write segment data with range / validity checking
diff --git a/av1/common/seg_common.h b/av1/common/seg_common.h
index efcf055..3be785f 100644
--- a/av1/common/seg_common.h
+++ b/av1/common/seg_common.h
@@ -96,8 +96,6 @@
return seg->feature_data[segment_id][feature_id];
}
-extern const aom_tree_index av1_segment_tree[TREE_SIZE(MAX_SEGMENTS)];
-
#ifdef __cplusplus
} // extern "C"
#endif
diff --git a/tools/aom_entropy_optimizer.c b/tools/aom_entropy_optimizer.c
index ac8cc19..8019e02 100644
--- a/tools/aom_entropy_optimizer.c
+++ b/tools/aom_entropy_optimizer.c
@@ -28,64 +28,22 @@
#include "./aom_config.h"
#include "av1/common/entropymode.h"
-const aom_tree_index av1_intra_mode_tree[TREE_SIZE(INTRA_MODES)] = {
- -DC_PRED,
- 2, /* 0 = DC_NODE */
- -PAETH_PRED,
- 4, /* 1 = PAETH_NODE */
- -V_PRED,
- 6, /* 2 = V_NODE */
- 8,
- 12, /* 3 = COM_NODE */
- -H_PRED,
- 10, /* 4 = H_NODE */
- -D135_PRED,
- -D117_PRED, /* 5 = D135_NODE */
- -D45_PRED,
- 14, /* 6 = D45_NODE */
- -D63_PRED,
- 16, /* 7 = D63_NODE */
- -D153_PRED,
- 18, /* 8 = D153_NODE */
- -D207_PRED,
- 20, /* 9 = D207_NODE */
- -SMOOTH_PRED,
- 22, /* 10 = SMOOTH_NODE */
- -SMOOTH_V_PRED,
- -SMOOTH_H_PRED /* 11 = SMOOTH_V_NODE */
-};
-
#define SPACES_PER_TAB 2
typedef unsigned int aom_count_type;
// A log file recording parsed counts
static FILE *logfile; // TODO(yuec): make it a command line option
-static INLINE aom_prob get_binary_prob_new(unsigned int n0, unsigned int n1) {
+static INLINE uint8_t get_binary_prob_new(unsigned int n0, unsigned int n1) {
// The "+1" will prevent this function from generating extreme probability
// when both n0 and n1 are small
const unsigned int den = n0 + 1 + n1 + 1;
return get_prob(n0 + 1, den);
}
-// Optimized probabilities will be stored in probs[].
-static unsigned int optimize_tree_probs(const aom_tree_index *tree,
- unsigned int idx,
- const unsigned int *counts,
- aom_prob *probs) {
- const int l = tree[idx];
- const unsigned int left_count =
- (l <= 0) ? counts[-l] : optimize_tree_probs(tree, l, counts, probs);
- const int r = tree[idx + 1];
- const unsigned int right_count =
- (r <= 0) ? counts[-r] : optimize_tree_probs(tree, r, counts, probs);
- probs[idx >> 1] = get_binary_prob_new(left_count, right_count);
- return left_count + right_count;
-}
-
static int parse_stats(aom_count_type **ct_ptr, FILE *const probsfile, int tabs,
int dim_of_cts, int *cts_each_dim,
- const aom_tree_index *tree, int flatten_last_dim) {
+ int flatten_last_dim) {
if (dim_of_cts < 1) {
fprintf(stderr, "The dimension of a counts vector should be at least 1!\n");
return 1;
@@ -93,7 +51,7 @@
if (dim_of_cts == 1) {
const int total_modes = cts_each_dim[0];
aom_count_type *counts1d = *ct_ptr;
- aom_prob *probs = aom_malloc(sizeof(*probs) * (total_modes - 1));
+ uint8_t *probs = aom_malloc(sizeof(*probs) * (total_modes - 1));
if (probs == NULL) {
fprintf(stderr, "Allocating prob array failed!\n");
@@ -101,12 +59,8 @@
}
(*ct_ptr) += total_modes;
- if (tree != NULL) {
- optimize_tree_probs(tree, 0, counts1d, probs);
- } else {
- assert(total_modes == 2);
- probs[0] = get_binary_prob_new(counts1d[0], counts1d[1]);
- }
+ assert(total_modes == 2);
+ probs[0] = get_binary_prob_new(counts1d[0], counts1d[1]);
if (tabs > 0) fprintf(probsfile, "%*c", tabs * SPACES_PER_TAB, ' ');
for (int k = 0; k < total_modes - 1; ++k) {
if (k == total_modes - 2)
@@ -141,7 +95,7 @@
tabs_next_level = tabs + 1;
}
if (parse_stats(ct_ptr, probsfile, tabs_next_level, dim_of_cts - 1,
- cts_each_dim + 1, tree, flatten_last_dim)) {
+ cts_each_dim + 1, flatten_last_dim)) {
return 1;
}
if (dim_of_cts == 2 || (dim_of_cts == 3 && flatten_last_dim)) {
@@ -167,7 +121,6 @@
// probsfile: output file
// dim_of_cts: number of dimensions of counts array
// cts_each_dim: an array storing size of each dimension of counts array
-// tree: binary tree for a multi-symbol syntax, or NULL for a binary one
// flatten_last_dim: for a binary syntax, if flatten_last_dim is 0, probs in
// different contexts will be written separately, e.g.,
// {{p1}, {p2}, ...};
@@ -177,15 +130,14 @@
// prefix: declaration header for the entropy table
static void optimize_entropy_table(aom_count_type *counts,
FILE *const probsfile, int dim_of_cts,
- int *cts_each_dim,
- const aom_tree_index *tree,
- int flatten_last_dim, char *prefix) {
+ int *cts_each_dim, int flatten_last_dim,
+ char *prefix) {
aom_count_type *ct_ptr = counts;
assert(!flatten_last_dim || cts_each_dim[dim_of_cts - 1] == 2);
fprintf(probsfile, "%s = {\n", prefix);
- if (parse_stats(&ct_ptr, probsfile, 1, dim_of_cts, cts_each_dim, tree,
+ if (parse_stats(&ct_ptr, probsfile, 1, dim_of_cts, cts_each_dim,
flatten_last_dim)) {
fprintf(probsfile, "Optimizer failed!\n");
}
@@ -402,7 +354,7 @@
cts_each_dim[0] = NEWMV_MODE_CONTEXTS;
cts_each_dim[1] = 2;
optimize_entropy_table(
- &fc.newmv_mode[0][0], probsfile, 2, cts_each_dim, NULL, 1,
+ &fc.newmv_mode[0][0], probsfile, 2, cts_each_dim, 1,
"static const aom_prob default_newmv_prob[NEWMV_MODE_CONTEXTS]");
optimize_cdf_table(&fc.newmv_mode[0][0], probsfile, 2, cts_each_dim,
"static const aom_cdf_prob "
@@ -411,7 +363,7 @@
cts_each_dim[0] = GLOBALMV_MODE_CONTEXTS;
cts_each_dim[1] = 2;
optimize_entropy_table(
- &fc.zeromv_mode[0][0], probsfile, 2, cts_each_dim, NULL, 1,
+ &fc.zeromv_mode[0][0], probsfile, 2, cts_each_dim, 1,
"static const aom_prob default_zeromv_prob[GLOBALMV_MODE_CONTEXTS]");
optimize_cdf_table(&fc.zeromv_mode[0][0], probsfile, 2, cts_each_dim,
"static const aom_cdf_prob "
@@ -420,7 +372,7 @@
cts_each_dim[0] = REFMV_MODE_CONTEXTS;
cts_each_dim[1] = 2;
optimize_entropy_table(
- &fc.refmv_mode[0][0], probsfile, 2, cts_each_dim, NULL, 1,
+ &fc.refmv_mode[0][0], probsfile, 2, cts_each_dim, 1,
"static const aom_prob default_refmv_prob[REFMV_MODE_CONTEXTS]");
optimize_cdf_table(&fc.refmv_mode[0][0], probsfile, 2, cts_each_dim,
"static const aom_cdf_prob "
@@ -587,7 +539,7 @@
cts_each_dim[1] = TXB_SKIP_CONTEXTS;
cts_each_dim[2] = 2;
optimize_entropy_table(
- &fc.txb_skip[0][0][0], probsfile, 3, cts_each_dim, NULL, 1,
+ &fc.txb_skip[0][0][0], probsfile, 3, cts_each_dim, 1,
"static const aom_prob "
"default_txk_skip[TX_SIZES][PLANE_TYPES][SIG_COEF_CONTEXTS]");
optimize_cdf_table(&fc.txb_skip[0][0][0], probsfile, 3, cts_each_dim,
@@ -600,7 +552,7 @@
cts_each_dim[2] = EOB_COEF_CONTEXTS;
cts_each_dim[3] = 2;
optimize_entropy_table(
- &fc.eob_flag[0][0][0][0], probsfile, 4, cts_each_dim, NULL, 1,
+ &fc.eob_flag[0][0][0][0], probsfile, 4, cts_each_dim, 1,
"static const aom_prob "
"default_eob_flag[TX_SIZES][PLANE_TYPES][EOB_COEF_CONTEXTS]");
@@ -609,7 +561,7 @@
cts_each_dim[2] = EOB_COEF_CONTEXTS;
cts_each_dim[3] = 2;
optimize_entropy_table(
- &fc.eob_extra[0][0][0][0], probsfile, 4, cts_each_dim, NULL, 1,
+ &fc.eob_extra[0][0][0][0], probsfile, 4, cts_each_dim, 1,
"static const aom_prob "
"default_eob_extra[TX_SIZES][PLANE_TYPES][EOB_COEF_CONTEXTS]");
@@ -668,7 +620,7 @@
cts_each_dim[3] = LEVEL_CONTEXTS;
cts_each_dim[4] = 2;
optimize_entropy_table(&fc.coeff_lps[0][0][0][0][0], probsfile, 5,
- cts_each_dim, NULL, 1,
+ cts_each_dim, 1,
"static const aom_prob "
"default_coeff_lps[TX_SIZES][PLANE_TYPES][BR_CDF_SIZE-"
"1][LEVEL_CONTEXTS]");
@@ -709,7 +661,7 @@
cts_each_dim[0] = SKIP_MODE_CONTEXTS;
cts_each_dim[1] = 2;
optimize_entropy_table(
- &fc.skip_mode[0][0], probsfile, 2, cts_each_dim, NULL, 1,
+ &fc.skip_mode[0][0], probsfile, 2, cts_each_dim, 1,
"static const aom_prob default_skip_mode_probs[SKIP_MODE_CONTEXTS]");
optimize_cdf_table(&fc.skip_mode[0][0], probsfile, 2, cts_each_dim,
"static const aom_cdf_prob "