static void fill_value_tokens() { TOKENVALUE *const t = vp8_dct_value_tokens + DCT_MAX_VALUE; vp8_extra_bit_struct *const e = vp8_extra_bits; int i = -DCT_MAX_VALUE; int sign = 1; do { if (!i) sign = 0; { const int a = sign ? -i : i; int eb = sign; if (a > 4) { int j = 4; while (++j < 11 && e[j].base_val <= a) {} t[i].Token = --j; eb |= (a - e[j].base_val) << 1; } else t[i].Token = a; t[i].Extra = eb; } // initialize the cost for extra bits for all possible coefficient value. { int cost = 0; vp8_extra_bit_struct *p = vp8_extra_bits + t[i].Token; if (p->base_val) { const int extra = t[i].Extra; const int Length = p->Len; if (Length) cost += vp8_treed_cost(p->tree, p->prob, extra >> 1, Length); cost += vp8_cost_bit(vp8_prob_half, extra & 1); /* sign */ vp8_dct_value_cost[i + DCT_MAX_VALUE] = cost; } } } while (++i < DCT_MAX_VALUE); vp8_dct_value_tokens_ptr = vp8_dct_value_tokens + DCT_MAX_VALUE; vp8_dct_value_cost_ptr = vp8_dct_value_cost + DCT_MAX_VALUE; }
static void cost( int *const C, vp8_tree T, const vp8_prob *const P, int i, int c ) { const vp8_prob p = P [i>>1]; do { const vp8_tree_index j = T[i]; const int d = c + vp8_cost_bit(p, i & 1); if (j <= 0) C[-j] = d; else cost(C, T, P, j, d); } while (++i & 1); }