Mercurial > libavcodec.hg
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 |