Add API for coding symbols with unscaled CDFs. Add aom_write_symbol_unscaled() and aom_read_symbol_unscaled() calls for encoding and decoding symbols with non-dyadic CDFs, e.g. that don't add up to 32768. This currently only works with the DAALA_EC backend, but does support AOM bit accounting. Change-Id: Icb37500f1b051dd2e8893ff0920302ece1d6ccfd
diff --git a/aom_dsp/bitreader.h b/aom_dsp/bitreader.h index 05216c8..14974a3 100644 --- a/aom_dsp/bitreader.h +++ b/aom_dsp/bitreader.h
@@ -54,6 +54,8 @@ aom_read_tree_bits_(r, tree, probs ACCT_STR_ARG(ACCT_STR_NAME)) #define aom_read_symbol(r, cdf, nsymbs, ACCT_STR_NAME) \ aom_read_symbol_(r, cdf, nsymbs ACCT_STR_ARG(ACCT_STR_NAME)) +#define aom_read_symbol_unscaled(r, cdf, nsymbs, ACCT_STR_NAME) \ + aom_read_symbol_unscaled_(r, cdf, nsymbs ACCT_STR_ARG(ACCT_STR_NAME)) #ifdef __cplusplus extern "C" { @@ -242,6 +244,24 @@ #endif return ret; } + +#if CONFIG_PVQ +static INLINE int aom_read_symbol_unscaled_(aom_reader *r, + const aom_cdf_prob *cdf, + int nsymbs ACCT_STR_PARAM) { + int ret; +#if CONFIG_DAALA_EC + ret = od_ec_decode_cdf_unscaled(&r->ec, cdf, nsymbs); +#else +#error "CONFIG_PVQ currently requires CONFIG_DAALA_EC." +#endif + +#if CONFIG_ACCOUNTING + if (ACCT_STR_NAME) aom_process_accounting(r, ACCT_STR_NAME); +#endif + return ret; +} +#endif #endif // CONFIG_EC_MULTISYMBOL #ifdef __cplusplus
diff --git a/aom_dsp/bitwriter.h b/aom_dsp/bitwriter.h index 1c2e96b..752453d 100644 --- a/aom_dsp/bitwriter.h +++ b/aom_dsp/bitwriter.h
@@ -204,6 +204,18 @@ update_cdf(cdf, symb, nsymbs); #endif } + +#if CONFIG_PVQ +static INLINE void aom_write_symbol_unscaled(aom_writer *w, int symb, + const aom_cdf_prob *cdf, + int nsymbs) { +#if CONFIG_DAALA_EC + od_ec_encode_cdf_unscaled(&w->ec, symb, cdf, nsymbs); +#else +#error "CONFIG_PVQ currently requires CONFIG_DAALA_EC." +#endif +} +#endif #endif // CONFIG_EC_MULTISYMBOL #ifdef __cplusplus