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; }
static void setup_txfm_mode(VP9_COMMON *pc, int lossless, vp9_reader *r) { if (lossless) { pc->txfm_mode = ONLY_4X4; } else { pc->txfm_mode = vp9_read_literal(r, 2); if (pc->txfm_mode == ALLOW_32X32) pc->txfm_mode += vp9_read_bit(r); if (pc->txfm_mode == TX_MODE_SELECT) { int i, j; for (i = 0; i < TX_SIZE_CONTEXTS; ++i) { for (j = 0; j < TX_SIZE_MAX_SB - 3; ++j) { if (vp9_read(r, VP9_MODE_UPDATE_PROB)) pc->fc.tx_probs_8x8p[i][j] = vp9_read_prob_diff_update(r, pc->fc.tx_probs_8x8p[i][j]); } } for (i = 0; i < TX_SIZE_CONTEXTS; ++i) { for (j = 0; j < TX_SIZE_MAX_SB - 2; ++j) { if (vp9_read(r, VP9_MODE_UPDATE_PROB)) pc->fc.tx_probs_16x16p[i][j] = vp9_read_prob_diff_update(r, pc->fc.tx_probs_16x16p[i][j]); } } for (i = 0; i < TX_SIZE_CONTEXTS; ++i) { for (j = 0; j < TX_SIZE_MAX_SB - 1; ++j) { if (vp9_read(r, VP9_MODE_UPDATE_PROB)) pc->fc.tx_probs_32x32p[i][j] = vp9_read_prob_diff_update(r, pc->fc.tx_probs_32x32p[i][j]); } } } } }
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); return v < m ? v : (v << 1) - m + vp9_read_bit(r); }
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_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); }
static TX_MODE read_tx_mode(vp9_reader *r) { TX_MODE tx_mode = vp9_read_literal(r, 2); if (tx_mode == ALLOW_32X32) tx_mode += vp9_read_bit(r); return tx_mode; }
static void update_mv(vp9_reader *r, vp9_prob *p) { if (vp9_read(r, NMV_UPDATE_PROB)) *p = (vp9_read_literal(r, 7) << 1) | 1; }