Mercurial > libavcodec.hg
diff vp8.c @ 12351:3e02e2306209 libavcodec
VP8: unroll splitmv decoding tree
Much faster splitmv mode decoding.
author | darkshikari |
---|---|
date | Tue, 03 Aug 2010 10:37:14 +0000 |
parents | db60aff8eeef |
children | f0ea08f4599b |
line wrap: on
line diff
--- a/vp8.c Tue Aug 03 10:24:28 2010 +0000 +++ b/vp8.c Tue Aug 03 10:37:14 2010 +0000 @@ -673,20 +673,19 @@ submv_prob = get_submv_prob(left, above); - switch (vp8_rac_get_tree(c, vp8_submv_ref_tree, submv_prob)) { - case VP8_SUBMVMODE_NEW4X4: - mb->bmv[n].y = mb->mv.y + read_mv_component(c, s->prob->mvc[0]); - mb->bmv[n].x = mb->mv.x + read_mv_component(c, s->prob->mvc[1]); - break; - case VP8_SUBMVMODE_ZERO4X4: - AV_ZERO32(&mb->bmv[n]); - break; - case VP8_SUBMVMODE_LEFT4X4: + if (vp56_rac_get_prob_branchy(c, submv_prob[0])) { + if (vp56_rac_get_prob_branchy(c, submv_prob[1])) { + if (vp56_rac_get_prob_branchy(c, submv_prob[2])) { + mb->bmv[n].y = mb->mv.y + read_mv_component(c, s->prob->mvc[0]); + mb->bmv[n].x = mb->mv.x + read_mv_component(c, s->prob->mvc[1]); + } else { + AV_ZERO32(&mb->bmv[n]); + } + } else { + AV_WN32A(&mb->bmv[n], above); + } + } else { AV_WN32A(&mb->bmv[n], left); - break; - case VP8_SUBMVMODE_TOP4X4: - AV_WN32A(&mb->bmv[n], above); - break; } }