| Index: source/libvpx/vp9/decoder/vp9_dsubexp.c
|
| ===================================================================
|
| --- source/libvpx/vp9/decoder/vp9_dsubexp.c (revision 251189)
|
| +++ source/libvpx/vp9/decoder/vp9_dsubexp.c (working copy)
|
| @@ -19,14 +19,10 @@
|
| return v % 2 ? m - (v + 1) / 2 : m + v / 2;
|
| }
|
|
|
| -static int decode_uniform(vp9_reader *r, int n) {
|
| - int v;
|
| - const int l = get_unsigned_bits(n);
|
| - const int m = (1 << l) - n;
|
| - if (!l)
|
| - return 0;
|
| -
|
| - v = vp9_read_literal(r, l - 1);
|
| +static int decode_uniform(vp9_reader *r) {
|
| + const int l = 8;
|
| + const int m = (1 << l) - 191;
|
| + const int v = vp9_read_literal(r, l - 1);
|
| return v < m ? v : (v << 1) - m + vp9_read_bit(r);
|
| }
|
|
|
| @@ -78,30 +74,19 @@
|
| }
|
| }
|
|
|
| -static int decode_term_subexp(vp9_reader *r, int k, int num_syms) {
|
| - int i = 0, mk = 0, word;
|
| - while (1) {
|
| - const int b = i ? k + i - 1 : k;
|
| - const int a = 1 << b;
|
| - if (num_syms <= mk + 3 * a) {
|
| - word = decode_uniform(r, num_syms - mk) + mk;
|
| - break;
|
| - } else {
|
| - if (vp9_read_bit(r)) {
|
| - i++;
|
| - mk += a;
|
| - } else {
|
| - word = vp9_read_literal(r, b) + mk;
|
| - break;
|
| - }
|
| - }
|
| - }
|
| - return word;
|
| +static int decode_term_subexp(vp9_reader *r) {
|
| + if (!vp9_read_bit(r))
|
| + return vp9_read_literal(r, 4);
|
| + if (!vp9_read_bit(r))
|
| + return vp9_read_literal(r, 4) + 16;
|
| + if (!vp9_read_bit(r))
|
| + return vp9_read_literal(r, 5) + 32;
|
| + return decode_uniform(r) + 64;
|
| }
|
|
|
| void vp9_diff_update_prob(vp9_reader *r, vp9_prob* p) {
|
| if (vp9_read(r, DIFF_UPDATE_PROB)) {
|
| - const int delp = decode_term_subexp(r, SUBEXP_PARAM, 255);
|
| + const int delp = decode_term_subexp(r);
|
| *p = (vp9_prob)inv_remap_prob(delp, *p);
|
| }
|
| }
|
|
|