Simplify choose_tx_size_from_rd
No impact on performance. Change-Id: Ib0420b190c9d83ef47b14ea78d5918a6a5078e3a
This commit is contained in:
		@@ -626,36 +626,39 @@ static void choose_tx_size_from_rd(VP10_COMP *cpi, MACROBLOCK *x,
 | 
				
			|||||||
  MACROBLOCKD *const xd = &x->e_mbd;
 | 
					  MACROBLOCKD *const xd = &x->e_mbd;
 | 
				
			||||||
  MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi;
 | 
					  MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi;
 | 
				
			||||||
  vpx_prob skip_prob = vp10_get_skip_prob(cm, xd);
 | 
					  vpx_prob skip_prob = vp10_get_skip_prob(cm, xd);
 | 
				
			||||||
  int r[TX_SIZES][2], s[TX_SIZES];
 | 
					  int r, s;
 | 
				
			||||||
  int64_t d[TX_SIZES], sse[TX_SIZES];
 | 
					  int64_t d, sse;
 | 
				
			||||||
  int64_t rd[TX_SIZES][2] = {{INT64_MAX, INT64_MAX},
 | 
					  int64_t rd = INT64_MAX;
 | 
				
			||||||
                             {INT64_MAX, INT64_MAX},
 | 
					 | 
				
			||||||
                             {INT64_MAX, INT64_MAX},
 | 
					 | 
				
			||||||
                             {INT64_MAX, INT64_MAX}};
 | 
					 | 
				
			||||||
  int n, m;
 | 
					  int n, m;
 | 
				
			||||||
  int s0, s1;
 | 
					  int s0, s1;
 | 
				
			||||||
  int64_t best_rd = INT64_MAX;
 | 
					  int64_t best_rd = INT64_MAX, last_rd = INT64_MAX;
 | 
				
			||||||
  TX_SIZE best_tx = max_tx_size;
 | 
					  TX_SIZE best_tx = max_tx_size;
 | 
				
			||||||
  int start_tx, end_tx;
 | 
					  int start_tx, end_tx;
 | 
				
			||||||
 | 
					  const int tx_select = cm->tx_mode == TX_MODE_SELECT;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const vpx_prob *tx_probs = get_tx_probs2(max_tx_size, xd, &cm->fc->tx_probs);
 | 
					  const vpx_prob *tx_probs = get_tx_probs2(max_tx_size, xd, &cm->fc->tx_probs);
 | 
				
			||||||
  assert(skip_prob > 0);
 | 
					  assert(skip_prob > 0);
 | 
				
			||||||
  s0 = vp10_cost_bit(skip_prob, 0);
 | 
					  s0 = vp10_cost_bit(skip_prob, 0);
 | 
				
			||||||
  s1 = vp10_cost_bit(skip_prob, 1);
 | 
					  s1 = vp10_cost_bit(skip_prob, 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (cm->tx_mode == TX_MODE_SELECT) {
 | 
					  if (tx_select) {
 | 
				
			||||||
    start_tx = max_tx_size;
 | 
					    start_tx = max_tx_size;
 | 
				
			||||||
    end_tx = 0;
 | 
					    end_tx = 0;
 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    TX_SIZE chosen_tx_size = VPXMIN(max_tx_size,
 | 
					    const TX_SIZE chosen_tx_size = VPXMIN(max_tx_size,
 | 
				
			||||||
                                    tx_mode_to_biggest_tx_size[cm->tx_mode]);
 | 
					                                    tx_mode_to_biggest_tx_size[cm->tx_mode]);
 | 
				
			||||||
    start_tx = chosen_tx_size;
 | 
					    start_tx = chosen_tx_size;
 | 
				
			||||||
    end_tx = chosen_tx_size;
 | 
					    end_tx = chosen_tx_size;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  for (n = start_tx; n >= end_tx; n--) {
 | 
					  *distortion = INT64_MAX;
 | 
				
			||||||
 | 
					  *rate       = INT_MAX;
 | 
				
			||||||
 | 
					  *skip       = 0;
 | 
				
			||||||
 | 
					  *psse       = INT64_MAX;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for (n = start_tx; n >= end_tx; --n) {
 | 
				
			||||||
    int r_tx_size = 0;
 | 
					    int r_tx_size = 0;
 | 
				
			||||||
    for (m = 0; m <= n - (n == (int) max_tx_size); m++) {
 | 
					    for (m = 0; m <= n - (n == (int) max_tx_size); ++m) {
 | 
				
			||||||
      if (m == n)
 | 
					      if (m == n)
 | 
				
			||||||
        r_tx_size += vp10_cost_zero(tx_probs[m]);
 | 
					        r_tx_size += vp10_cost_zero(tx_probs[m]);
 | 
				
			||||||
      else
 | 
					      else
 | 
				
			||||||
@@ -663,59 +666,57 @@ static void choose_tx_size_from_rd(VP10_COMP *cpi, MACROBLOCK *x,
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
#if CONFIG_EXT_TX
 | 
					#if CONFIG_EXT_TX
 | 
				
			||||||
    if (mbmi->ext_txfrm >= GET_EXT_TX_TYPES(n)) {
 | 
					    if (mbmi->ext_txfrm >= GET_EXT_TX_TYPES(n)) {
 | 
				
			||||||
      r[n][0] = r[n][1] = INT_MAX;
 | 
					      r = INT_MAX;
 | 
				
			||||||
      d[n] = INT64_MAX;
 | 
					      d = INT64_MAX;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
#endif  // CONFIG_EXT_TX
 | 
					#endif  // CONFIG_EXT_TX
 | 
				
			||||||
    txfm_rd_in_plane(x, &r[n][0], &d[n], &s[n],
 | 
					    txfm_rd_in_plane(x, &r, &d, &s,
 | 
				
			||||||
                     &sse[n], ref_best_rd, 0, bs, n,
 | 
					                     &sse, ref_best_rd, 0, bs, n,
 | 
				
			||||||
                     cpi->sf.use_fast_coef_costing);
 | 
					                     cpi->sf.use_fast_coef_costing);
 | 
				
			||||||
 | 
					 | 
				
			||||||
#if CONFIG_EXT_TX
 | 
					#if CONFIG_EXT_TX
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (is_inter_block(mbmi) && bs >= BLOCK_8X8 &&
 | 
					    if (is_inter_block(mbmi) && bs >= BLOCK_8X8 &&
 | 
				
			||||||
        !xd->lossless && r[n][0] != INT_MAX)
 | 
					        !xd->lossless && r != INT_MAX)
 | 
				
			||||||
      r[n][0] += cpi->ext_tx_costs[n][mbmi->ext_txfrm];
 | 
					      r += cpi->ext_tx_costs[n][mbmi->ext_txfrm];
 | 
				
			||||||
#endif  // CONFIG_EXT_TX
 | 
					#endif  // CONFIG_EXT_TX
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    r[n][1] = r[n][0];
 | 
					    if (r == INT_MAX)
 | 
				
			||||||
    if (r[n][0] < INT_MAX) {
 | 
					      continue;
 | 
				
			||||||
      r[n][1] += r_tx_size;
 | 
					
 | 
				
			||||||
    }
 | 
					    if (tx_select)
 | 
				
			||||||
    if (d[n] == INT64_MAX || r[n][0] == INT_MAX) {
 | 
					      r += r_tx_size;
 | 
				
			||||||
      rd[n][0] = rd[n][1] = INT64_MAX;
 | 
					
 | 
				
			||||||
    } else if (s[n]) {
 | 
					    if (s) {
 | 
				
			||||||
      if (is_inter_block(mbmi)) {
 | 
					      if (is_inter_block(mbmi)) {
 | 
				
			||||||
        rd[n][0] = rd[n][1] = RDCOST(x->rdmult, x->rddiv, s1, sse[n]);
 | 
					        rd = RDCOST(x->rdmult, x->rddiv, s1, sse);
 | 
				
			||||||
        r[n][1] -= r_tx_size;
 | 
					        if (tx_select)
 | 
				
			||||||
 | 
					          r -= r_tx_size;
 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
        rd[n][0] = RDCOST(x->rdmult, x->rddiv, s1, sse[n]);
 | 
					        rd =  RDCOST(x->rdmult, x->rddiv, s1 + r_tx_size * tx_select, sse);
 | 
				
			||||||
        rd[n][1] = RDCOST(x->rdmult, x->rddiv, s1 + r_tx_size, sse[n]);
 | 
					 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      rd[n][0] = RDCOST(x->rdmult, x->rddiv, r[n][0] + s0, d[n]);
 | 
					      rd = RDCOST(x->rdmult, x->rddiv, r + s0, d);
 | 
				
			||||||
      rd[n][1] = RDCOST(x->rdmult, x->rddiv, r[n][1] + s0, d[n]);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Early termination in transform size search.
 | 
					    // Early termination in transform size search.
 | 
				
			||||||
    if (cpi->sf.tx_size_search_breakout &&
 | 
					    if (cpi->sf.tx_size_search_breakout &&
 | 
				
			||||||
        (rd[n][1] == INT64_MAX ||
 | 
					        (rd== INT64_MAX ||
 | 
				
			||||||
        (n < (int) max_tx_size && rd[n][1] > rd[n + 1][1]) ||
 | 
					        (n < (int) max_tx_size && rd > last_rd) ||
 | 
				
			||||||
        s[n] == 1))
 | 
					        s == 1))
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (rd[n][1] < best_rd) {
 | 
					    last_rd = rd;
 | 
				
			||||||
 | 
					    if (rd < best_rd) {
 | 
				
			||||||
      best_tx = n;
 | 
					      best_tx = n;
 | 
				
			||||||
      best_rd = rd[n][1];
 | 
					      best_rd = rd;
 | 
				
			||||||
 | 
					      *distortion = d;
 | 
				
			||||||
 | 
					      *rate       = r;
 | 
				
			||||||
 | 
					      *skip       = s;
 | 
				
			||||||
 | 
					      *psse       = sse;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  mbmi->tx_size = best_tx;
 | 
					  mbmi->tx_size = best_tx;
 | 
				
			||||||
 | 
					 | 
				
			||||||
  *distortion = d[mbmi->tx_size];
 | 
					 | 
				
			||||||
  *rate       = r[mbmi->tx_size][cm->tx_mode == TX_MODE_SELECT];
 | 
					 | 
				
			||||||
  *skip       = s[mbmi->tx_size];
 | 
					 | 
				
			||||||
  *psse       = sse[mbmi->tx_size];
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void super_block_yrd(VP10_COMP *cpi, MACROBLOCK *x, int *rate,
 | 
					static void super_block_yrd(VP10_COMP *cpi, MACROBLOCK *x, int *rate,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user