NEW_TOKENSET: Initialise tail probabilities correctly.
A bug, but no change to BDR.
Change-Id: I17fbe836fd72d148a4f0608fcff7e2fbcaf75eb0
diff --git a/av1/common/entropy.c b/av1/common/entropy.c
index d47c678..70c1df4 100644
--- a/av1/common/entropy.c
+++ b/av1/common/entropy.c
@@ -5363,21 +5363,23 @@
#if CONFIG_NEW_TOKENSET
-static void build_tail_cdfs(aom_cdf_prob cdf_tail[ENTROPY_TOKENS + 1],
- aom_cdf_prob cdf_head[ENTROPY_TOKENS + 1]) {
+static void build_tail_cdfs(aom_cdf_prob cdf_tail[CDF_SIZE(ENTROPY_TOKENS)],
+ aom_cdf_prob cdf_head[CDF_SIZE(ENTROPY_TOKENS)],
+ int band_zero) {
int probNZ, prob1, prob_idx, i;
- int phead[6], sum, p;
- for (i = 0; i < 6; ++i) {
+ int phead[HEAD_TOKENS + 1], sum, p;
+ const int is_dc = !!band_zero;
+ for (i = 0; i < HEAD_TOKENS + is_dc; ++i) {
phead[i] = cdf_head[i] - (i == 0 ? 0 : cdf_head[i - 1]);
}
// Do the tail
- probNZ = 32768 - phead[1 + ZERO_TOKEN] - phead[0];
- prob1 = phead[1 + ONE_TOKEN_EOB] + phead[1 + ONE_TOKEN_NEOB];
+ probNZ = CDF_PROB_TOP - phead[ZERO_TOKEN + is_dc] - (is_dc ? phead[0] : 0);
+ prob1 = phead[is_dc + ONE_TOKEN_EOB] + phead[is_dc + ONE_TOKEN_NEOB];
prob_idx =
AOMMIN(COEFF_PROB_MODELS - 1, AOMMAX(0, ((256 * prob1) / probNZ) - 1));
sum = 0;
- for (i = 0; i < ENTROPY_TOKENS - 3; ++i) {
+ for (i = 0; i < TAIL_TOKENS; ++i) {
p = av1_pareto8_tail_probs[prob_idx][i];
cdf_tail[i] = sum += p;
}
@@ -5521,7 +5523,7 @@
for (l = 0; l < BAND_COEFF_CONTEXTS(k); ++l)
#if CONFIG_NEW_TOKENSET
build_tail_cdfs(fc->coef_tail_cdfs[t][i][j][k][l],
- fc->coef_head_cdfs[t][i][j][k][l]);
+ fc->coef_head_cdfs[t][i][j][k][l], k == 0);
#else
build_token_cdfs(fc->coef_probs[t][i][j][k][l],
fc->coef_cdfs[t][i][j][k][l]);