Refactor tokenization coding tree

Expand the tokenization tree writing to support per transform block
type coding in next CLs.

Change-Id: I3560e658f89cc500eb49603f95dd2b4e99045f5b
This commit is contained in:
Jingning Han 2015-11-20 09:35:41 -08:00
Родитель c1629ca53b
Коммит 2ec5ed258a
1 изменённых файлов: 15 добавлений и 20 удалений

Просмотреть файл

@ -325,7 +325,6 @@ static void pack_mb_tokens(vpx_writer *w,
while (p < stop && p->token != EOSB_TOKEN) { while (p < stop && p->token != EOSB_TOKEN) {
const int t = p->token; const int t = p->token;
const struct vp10_token *const a = &vp10_coef_encodings[t]; const struct vp10_token *const a = &vp10_coef_encodings[t];
int i = 0;
int v = a->value; int v = a->value;
int n = a->len; int n = a->len;
#if CONFIG_VP9_HIGHBITDEPTH #if CONFIG_VP9_HIGHBITDEPTH
@ -342,28 +341,24 @@ static void pack_mb_tokens(vpx_writer *w,
#endif // CONFIG_VP9_HIGHBITDEPTH #endif // CONFIG_VP9_HIGHBITDEPTH
/* skip one or two nodes */ /* skip one or two nodes */
if (p->skip_eob_node) { if (p->skip_eob_node)
n -= p->skip_eob_node; n -= p->skip_eob_node;
i = 2 * p->skip_eob_node; else
} vpx_write(w, t != EOB_TOKEN, p->context_tree[0]);
// TODO(jbb): expanding this can lead to big gains. It allows if (t != EOB_TOKEN) {
// much better branch prediction and would enable us to avoid numerous vpx_write(w, t != ZERO_TOKEN, p->context_tree[1]);
// lookups and compares.
// If we have a token that's in the constrained set, the coefficient tree if (t != ZERO_TOKEN) {
// is split into two treed writes. The first treed write takes care of the vpx_write(w, t != ONE_TOKEN, p->context_tree[2]);
// unconstrained nodes. The second treed write takes care of the
// constrained nodes. if (t != ONE_TOKEN) {
if (t >= TWO_TOKEN && t < EOB_TOKEN) {
int len = UNCONSTRAINED_NODES - p->skip_eob_node; int len = UNCONSTRAINED_NODES - p->skip_eob_node;
int bits = v >> (n - len);
vp10_write_tree(w, vp10_coef_tree, p->context_tree, bits, len, i);
vp10_write_tree(w, vp10_coef_con_tree, vp10_write_tree(w, vp10_coef_con_tree,
vp10_pareto8_full[p->context_tree[PIVOT_NODE] - 1], vp10_pareto8_full[p->context_tree[PIVOT_NODE] - 1],
v, n - len, 0); v, n - len, 0);
} else { }
vp10_write_tree(w, vp10_coef_tree, p->context_tree, v, n, i); }
} }
if (b->base_val) { if (b->base_val) {