comparison vp8.c @ 12255:7db147ea02c4 libavcodec

VP8: Inline traversing vp8_small_mvtree Much faster read_mv_component, slightly faster overall
author conrad
date Fri, 23 Jul 2010 21:46:25 +0000
parents 17c151e1280a
children 161c205dcdd2
comparison
equal deleted inserted replaced
12254:17c151e1280a 12255:7db147ea02c4
597 /** 597 /**
598 * Motion vector coding, 17.1. 598 * Motion vector coding, 17.1.
599 */ 599 */
600 static int read_mv_component(VP56RangeCoder *c, const uint8_t *p) 600 static int read_mv_component(VP56RangeCoder *c, const uint8_t *p)
601 { 601 {
602 int x = 0; 602 int bit, x = 0;
603 603
604 if (vp56_rac_get_prob_branchy(c, p[0])) { 604 if (vp56_rac_get_prob_branchy(c, p[0])) {
605 int i; 605 int i;
606 606
607 for (i = 0; i < 3; i++) 607 for (i = 0; i < 3; i++)
608 x += vp56_rac_get_prob(c, p[9 + i]) << i; 608 x += vp56_rac_get_prob(c, p[9 + i]) << i;
609 for (i = 9; i > 3; i--) 609 for (i = 9; i > 3; i--)
610 x += vp56_rac_get_prob(c, p[9 + i]) << i; 610 x += vp56_rac_get_prob(c, p[9 + i]) << i;
611 if (!(x & 0xFFF0) || vp56_rac_get_prob(c, p[12])) 611 if (!(x & 0xFFF0) || vp56_rac_get_prob(c, p[12]))
612 x += 8; 612 x += 8;
613 } else 613 } else {
614 x = vp8_rac_get_tree(c, vp8_small_mvtree, &p[2]); 614 // small_mvtree
615 const uint8_t *ps = p+2;
616 bit = vp56_rac_get_prob(c, *ps);
617 ps += 1 + 3*bit;
618 x += 4*bit;
619 bit = vp56_rac_get_prob(c, *ps);
620 ps += 1 + bit;
621 x += 2*bit;
622 x += vp56_rac_get_prob(c, *ps);
623 }
615 624
616 return (x && vp56_rac_get_prob(c, p[1])) ? -x : x; 625 return (x && vp56_rac_get_prob(c, p[1])) ? -x : x;
617 } 626 }
618 627
619 static av_always_inline 628 static av_always_inline