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