예제 #1
0
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;
}
예제 #5
0
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);
}
예제 #6
0
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;
}
예제 #7
0
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;
}