EC_ADAPT: faster CDF update. Also fix warning. Change-Id: Ia515360af9c3269901eb0d002d326b7af43a00e7
diff --git a/aom_dsp/prob.h b/aom_dsp/prob.h index 9384ffe..782e4b3 100644 --- a/aom_dsp/prob.h +++ b/aom_dsp/prob.h
@@ -138,9 +138,21 @@ #if CONFIG_EC_ADAPT static INLINE void update_cdf(aom_cdf_prob *cdf, int val, int nsymbs) { const int rate = 4 + get_msb(nsymbs); - int i, diff, tmp; + const int rate2 = 12 - rate; + int i, tmp; + int diff; +#if 1 + const int tmp0 = 1 << rate2; + tmp = tmp0; + diff = ((32768 - (nsymbs << rate2)) >> rate) << rate; + // Single loop (faster) + for (i = 0; i < nsymbs - 1; ++i, tmp += tmp0) { + tmp += (i == val ? diff : 0); + cdf[i] -= ((cdf[i] - tmp) >> rate); + } +#else for (i = 0; i < nsymbs; ++i) { - tmp = (i + 1) << (12 - rate); + tmp = (i + 1) << rate2; cdf[i] -= ((cdf[i] - tmp) >> rate); } diff = 32768 - cdf[nsymbs - 1]; @@ -148,6 +160,7 @@ for (i = val; i < nsymbs; ++i) { cdf[i] += diff; } +#endif } #endif