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;
         }
     }