Commit 2ec5ed25 authored by Jingning Han's avatar Jingning Han
Browse files

Refactor tokenization coding tree

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

Change-Id: I3560e658f89cc500eb49603f95dd2b4e99045f5b
parent c1629ca5
...@@ -325,7 +325,6 @@ static void pack_mb_tokens(vpx_writer *w, ...@@ -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, ...@@ -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]);
if (t != EOB_TOKEN) {
vpx_write(w, t != ZERO_TOKEN, p->context_tree[1]);
// TODO(jbb): expanding this can lead to big gains. It allows if (t != ZERO_TOKEN) {
// much better branch prediction and would enable us to avoid numerous vpx_write(w, t != ONE_TOKEN, p->context_tree[2]);
// lookups and compares.
// If we have a token that's in the constrained set, the coefficient tree if (t != ONE_TOKEN) {
// is split into two treed writes. The first treed write takes care of the
// unconstrained nodes. The second treed write takes care of the
// constrained nodes.
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) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment