Commit 9fdf2e2e by Hui Su

### Remove more code about probability based entropy coding

`Change-Id: Ie0bc1dd68f7a5d81e49da0ae6f855e572e12aa10`
parent 5b5f3d50
 ... ... @@ -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 @@ typedef uint16_t aom_cdf_prob; #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; } } ... ...
 ... ... @@ -75,8 +75,4 @@ void av1_set_segdata(struct segmentation *seg, int segment_id, 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
 ... ... @@ -96,8 +96,6 @@ static INLINE int get_segdata(const struct segmentation *seg, int segment_id, 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 ... ...
 ... ... @@ -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 @@ static int parse_stats(aom_count_type **ct_ptr, FILE *const probsfile, int tabs, 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 @@ static int parse_stats(aom_count_type **ct_ptr, FILE *const probsfile, int tabs, } (*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 @@ static int parse_stats(aom_count_type **ct_ptr, FILE *const probsfile, int tabs, 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 @@ static int parse_stats(aom_count_type **ct_ptr, FILE *const probsfile, int tabs, // 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 @@ static int parse_stats(aom_count_type **ct_ptr, FILE *const probsfile, int tabs, // 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 @@ int main(int argc, const char **argv) { 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 @@ int main(int argc, const char **argv) { 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 @@ int main(int argc, const char **argv) { 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 @@ int main(int argc, const char **argv) { 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 @@ int main(int argc, const char **argv) { 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 @@ int main(int argc, const char **argv) { 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 @@ int main(int argc, const char **argv) { 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 @@ int main(int argc, const char **argv) { 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 " ... ...
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!