add symbol to bin utility
diff --git a/aom_dsp/bitreader.h b/aom_dsp/bitreader.h index 43bec15..42f962b 100644 --- a/aom_dsp/bitreader.h +++ b/aom_dsp/bitreader.h
@@ -124,7 +124,8 @@ #if CONFIG_THROUGHPUT_ANALYSIS static INLINE void aom_update_symb_counts(const aom_reader *r, int is_binary, int is_context_coded, int n_bits, - const aom_cdf_prob *cdf) { + const aom_cdf_prob *cdf, + int sym_len) { #else static INLINE void aom_update_symb_counts(const aom_reader *r, int is_binary, int n_bits) { @@ -135,9 +136,12 @@ #if CONFIG_THROUGHPUT_ANALYSIS if (is_context_coded) { r->accounting->syms.num_ctx_coded += n_bits; + r->accounting->syms.num_ctx_log2 += aom_ceil_log2(sym_len); } else { r->accounting->syms.num_bypass_coded += n_bits; + r->accounting->syms.num_bypass_log2 += aom_ceil_log2(sym_len); } + r->accounting->syms.num_symlen_minus1 += sym_len - 1; if (is_context_coded && cdf != NULL) { if (cdf != r->accounting->syms.prev_context_id) { r->accounting->syms.context_switch += 1; @@ -192,7 +196,7 @@ if (ACCT_INFO_NAME.c_file) aom_process_accounting(r, bit, SYMBOL_BIT, ACCT_INFO_NAME); #if CONFIG_THROUGHPUT_ANALYSIS - aom_update_symb_counts(r, 1, 0, 1, NULL); + aom_update_symb_counts(r, 1, 0, 1, NULL, 2); #else aom_update_symb_counts(r, 1, 1); #endif // CONFIG_THROUGHPUT_ANALYSIS @@ -249,7 +253,7 @@ if (ACCT_INFO_NAME.c_file) aom_process_accounting(r, ret, SYMBOL_BIT_BYPASS, ACCT_INFO_NAME); #if CONFIG_THROUGHPUT_ANALYSIS - aom_update_symb_counts(r, 1, 0, 1, NULL); + aom_update_symb_counts(r, 1, 0, 1, NULL, 2); #else aom_update_symb_counts(r, 1, 1); #endif @@ -290,7 +294,7 @@ if (ACCT_INFO_NAME.c_file) aom_process_accounting(r, literal, SYMBOL_LITERAL_BYPASS, ACCT_INFO_NAME); #if CONFIG_THROUGHPUT_ANALYSIS - aom_update_symb_counts(r, 1, 0, bits, NULL); + aom_update_symb_counts(r, 1, 0, bits, NULL, bits + 1); #else aom_update_symb_counts(r, 1, bits); #endif @@ -318,7 +322,7 @@ if (ACCT_INFO_NAME.c_file) aom_process_accounting(r, ret, SYMBOL_UNARY, ACCT_INFO_NAME); #if CONFIG_THROUGHPUT_ANALYSIS - aom_update_symb_counts(r, 1, 0, n_bits, NULL); + aom_update_symb_counts(r, 1, 0, n_bits, NULL, n_bits + 1); #else aom_update_symb_counts(r, 1, n_bits); #endif @@ -376,7 +380,7 @@ if (ACCT_INFO_NAME.c_file) aom_process_accounting(r, symb, SYMBOL_CDF, ACCT_INFO_NAME); #if CONFIG_THROUGHPUT_ANALYSIS - aom_update_symb_counts(r, (nsymbs == 2), 1, 1, cdf); + aom_update_symb_counts(r, (nsymbs == 2), 1, 1, cdf, nsymbs); #else aom_update_symb_counts(r, (nsymbs == 2), 1); #endif // CONFIG_THROUGHPUT_ANALYSIS
diff --git a/av1/av1_dx_iface.c b/av1/av1_dx_iface.c index ce9d6da..efd2de0 100644 --- a/av1/av1_dx_iface.c +++ b/av1/av1_dx_iface.c
@@ -135,12 +135,19 @@ printf( "avg_ctx_syms : %lld\t avg_bypass_syms : %lld\t max_ctx_syms : %lld\t " "max_bypass_syms : %lld\t max_bits : %lld\t total_bits : %lld\t " - "context_switches : %lld\t total_hits : %lld\n", + "context_switches : %lld\t total_hits : %lld\t avg_bins(sym-1) : %lld\t max_bins(sym-1) : %lld \t " + "avg_ctx_log2 : %lld\t avg_bypass_log2 : %lld\t max_ctx_log2 : %lld\t max_bypass_log2 : %lld\t \n", (long long)(tot_ctx_syms / tot_frames), (long long)(tot_bypass_syms / tot_frames), max_ctx_syms, max_bypass_syms, (long long)(max_bits / 65536), (long long)(tot_bits / 65536), (long long)(total_context_switch / tot_frames), - (long long)(total_total_hits / tot_frames)); + (long long)(total_total_hits / tot_frames), + (long long)(tot_symlen_minus1 / tot_frames), + (long long)(max_symlen_minus1), + (long long)(tot_ctx_log2 / tot_frames), + (long long)(tot_bypass_log2 / tot_frames), + (long long)(max_ctx_log2), + (long long)(max_bypass_log2)); #endif // CONFIG_THROUGHPUT_ANALYSIS if (ctx->frame_worker != NULL) {
diff --git a/av1/common/av1_common_int.h b/av1/common/av1_common_int.h index 699e26e..3afcdb9 100644 --- a/av1/common/av1_common_int.h +++ b/av1/common/av1_common_int.h
@@ -1376,12 +1376,20 @@ int64_t tot_bits; /** total ctx coded symbols. */ int64_t tot_ctx_syms; + /** total symbol - 1 counts for bin estimate. */ + int64_t tot_symlen_minus1; + int64_t tot_bypass_log2; + int64_t tot_ctx_log2; /** total bypass coded symbols. */ int64_t tot_bypass_syms; /** peak ctx coded symbols. */ int64_t peak_ctx_syms; /** peak bypass coded symbols. */ int64_t peak_bypass_syms; + /** peak symbols - 1 symbols. */ + int64_t peak_symlen_minus1; + int64_t peak_bypass_log2; + int64_t peak_ctx_log2; /** peak bits. */ int64_t peak_bits; /** total number of cdf switches */
diff --git a/av1/decoder/accounting.c b/av1/decoder/accounting.c index c24c5d5..6f98eeb 100644 --- a/av1/decoder/accounting.c +++ b/av1/decoder/accounting.c
@@ -98,6 +98,9 @@ accounting->syms.total_hits = 0; accounting->syms.prev_context_id = NULL; accounting->syms.num_ctx_coded = 0; + accounting->syms.num_symlen_minus1 = 0; + accounting->syms.num_ctx_log2 = 0; + accounting->syms.num_bypass_log2 = 0; accounting->context.x = -1; accounting->context.y = -1; accounting->last_tell_frac = 0;
diff --git a/av1/decoder/accounting.h b/av1/decoder/accounting.h index 104ed5d..93806ce 100644 --- a/av1/decoder/accounting.h +++ b/av1/decoder/accounting.h
@@ -102,6 +102,10 @@ int num_bypass_coded; /** Context coded. */ int num_ctx_coded; + /** Estimate bins coded. */ + int num_symlen_minus1; + int num_ctx_log2; + int num_bypass_log2; uint16_t *prev_context_id; int context_switch; int total_hits;
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c index 1773302..e6553b8 100644 --- a/av1/decoder/decodeframe.c +++ b/av1/decoder/decodeframe.c
@@ -114,9 +114,15 @@ #if CONFIG_THROUGHPUT_ANALYSIS int64_t tot_ctx_syms = { 0 }; +int64_t tot_symlen_minus1 = { 0 }; +int64_t tot_bypass_log2 = { 0 }; +int64_t tot_ctx_log2 = { 0 }; int64_t tot_bypass_syms = { 0 }; int64_t max_ctx_syms = { 0 }; int64_t max_bypass_syms = { 0 }; +int64_t max_symlen_minus1 = { 0 }; +int64_t max_bypass_log2 = { 0 }; +int64_t max_ctx_log2 = { 0 }; int64_t max_bits = { 0 }; int64_t tot_bits = { 0 }; int64_t tot_frames = { 0 }; @@ -4720,17 +4726,26 @@ if (pbi->decoding_first_frame) { pbi->common.sym_stats.frame_dec_order = 0; pbi->common.sym_stats.tot_ctx_syms = 0; + pbi->common.sym_stats.tot_symlen_minus1 = 0; + pbi->common.sym_stats.tot_bypass_log2 = 0; + pbi->common.sym_stats.tot_ctx_log2 = 0; pbi->common.sym_stats.total_total_hits = 0; pbi->common.sym_stats.total_context_switch = 0; pbi->common.sym_stats.tot_bypass_syms = 0; pbi->common.sym_stats.tot_bits = 0; pbi->common.sym_stats.peak_ctx_syms = 0; + pbi->common.sym_stats.peak_symlen_minus1 = 0; + pbi->common.sym_stats.peak_bypass_log2 = 0; + pbi->common.sym_stats.peak_ctx_log2 = 0; pbi->common.sym_stats.peak_bypass_syms = 0; pbi->common.sym_stats.peak_bits = 0; } Accounting accounting = pbi->accounting; int64_t frm_ctx_syms = accounting.syms.num_ctx_coded; int64_t frm_bypass_syms = accounting.syms.num_bypass_coded; + int64_t frm_symlen_minus1 = accounting.syms.num_symlen_minus1; + int64_t frm_bypass_log2 = accounting.syms.num_bypass_log2; + int64_t frm_ctx_log2 = accounting.syms.num_ctx_log2; int64_t frm_context_switch = accounting.syms.context_switch; int64_t frm_total_hits = accounting.syms.total_hits; int64_t frm_bits = 0; @@ -4741,6 +4756,9 @@ int64_t peak_ctx_syms = pbi->common.sym_stats.peak_ctx_syms; int64_t peak_bypass_syms = pbi->common.sym_stats.peak_bypass_syms; pbi->common.sym_stats.tot_ctx_syms += frm_ctx_syms; + pbi->common.sym_stats.tot_symlen_minus1 += frm_symlen_minus1; + pbi->common.sym_stats.tot_bypass_log2 += frm_bypass_log2; + pbi->common.sym_stats.tot_ctx_log2 += frm_ctx_log2; pbi->common.sym_stats.total_context_switch += frm_context_switch; pbi->common.sym_stats.total_total_hits += frm_total_hits; pbi->common.sym_stats.tot_bypass_syms += frm_bypass_syms; @@ -4751,13 +4769,22 @@ pbi->common.sym_stats.peak_ctx_syms = frm_ctx_syms; pbi->common.sym_stats.peak_bypass_syms = frm_bypass_syms; pbi->common.sym_stats.peak_bits = frm_bits; + pbi->common.sym_stats.peak_symlen_minus1 = frm_symlen_minus1; + pbi->common.sym_stats.peak_bypass_log2 = frm_bypass_log2; + pbi->common.sym_stats.peak_ctx_log2 = frm_ctx_log2; } tot_ctx_syms = pbi->common.sym_stats.tot_ctx_syms; + tot_symlen_minus1 = pbi->common.sym_stats.tot_symlen_minus1; + tot_ctx_log2 = pbi->common.sym_stats.tot_ctx_log2; + tot_bypass_log2 = pbi->common.sym_stats.tot_bypass_log2; tot_bypass_syms = pbi->common.sym_stats.tot_bypass_syms; tot_bits = pbi->common.sym_stats.tot_bits; total_context_switch = pbi->common.sym_stats.total_context_switch; total_total_hits = pbi->common.sym_stats.total_total_hits; max_ctx_syms = pbi->common.sym_stats.peak_ctx_syms; + max_symlen_minus1 = pbi->common.sym_stats.peak_symlen_minus1; + max_bypass_log2 = pbi->common.sym_stats.peak_bypass_log2; + max_ctx_log2 = pbi->common.sym_stats.peak_ctx_log2; max_bypass_syms = pbi->common.sym_stats.peak_bypass_syms; max_bits = pbi->common.sym_stats.peak_bits; tot_frames = pbi->common.sym_stats.frame_dec_order;
diff --git a/av1/decoder/decodeframe.h b/av1/decoder/decodeframe.h index 9e32dfb..ca42d41 100644 --- a/av1/decoder/decodeframe.h +++ b/av1/decoder/decodeframe.h
@@ -19,9 +19,15 @@ #if CONFIG_THROUGHPUT_ANALYSIS extern int64_t tot_ctx_syms; +extern int64_t tot_symlen_minus1; +extern int64_t tot_bypass_log2; +extern int64_t tot_ctx_log2; extern int64_t tot_bypass_syms; extern int64_t max_ctx_syms; extern int64_t max_bypass_syms; +extern int64_t max_symlen_minus1; +extern int64_t max_bypass_log2; +extern int64_t max_ctx_log2; extern int64_t max_bits; extern int64_t tot_bits; extern int64_t tot_frames;