Change intra_model_yrd() to intra_model_rd()
Make it support UV planes as well.
BUG=aomedia:2986
Change-Id: I4a680edea02a12391067af615368acff75fe1a31
diff --git a/av1/encoder/intra_mode_search.c b/av1/encoder/intra_mode_search.c
index 90d5de9..2ae9e84 100644
--- a/av1/encoder/intra_mode_search.c
+++ b/av1/encoder/intra_mode_search.c
@@ -57,7 +57,7 @@
assert(!is_inter_block(mbmi));
mbmi->angle_delta[PLANE_TYPE_Y] = angle_delta;
if (!skip_model_rd) {
- if (model_intra_yrd_and_prune(cpi, x, bsize, mode_cost, best_model_rd)) {
+ if (model_intra_yrd_and_prune(cpi, x, bsize, best_model_rd)) {
return INT64_MAX;
}
}
@@ -118,7 +118,7 @@
RD_STATS tokenonly_rd_stats;
mbmi->filter_intra_mode_info.filter_intra_mode = mode;
- if (model_intra_yrd_and_prune(cpi, x, bsize, mode_cost, best_model_rd)) {
+ if (model_intra_yrd_and_prune(cpi, x, bsize, best_model_rd)) {
continue;
}
av1_pick_uniform_tx_size_type_yrd(cpi, x, &tokenonly_rd_stats, bsize,
@@ -1108,8 +1108,7 @@
bmode_costs[mbmi->mode], best_rd, &best_model_rd,
1);
} else {
- if (model_intra_yrd_and_prune(cpi, x, bsize, bmode_costs[mbmi->mode],
- &best_model_rd)) {
+ if (model_intra_yrd_and_prune(cpi, x, bsize, &best_model_rd)) {
continue;
}
diff --git a/av1/encoder/intra_mode_search_utils.h b/av1/encoder/intra_mode_search_utils.h
index 94b0dad..61b3186 100644
--- a/av1/encoder/intra_mode_search_utils.h
+++ b/av1/encoder/intra_mode_search_utils.h
@@ -385,45 +385,46 @@
/*!\cond */
// Makes a quick luma prediction and estimate the rdcost with a model without
// going through the whole txfm/quantize/itxfm process.
-static int64_t intra_model_yrd(const AV1_COMP *const cpi, MACROBLOCK *const x,
- BLOCK_SIZE bsize, int mode_cost) {
+static int64_t intra_model_rd(const AV1_COMP *const cpi, MACROBLOCK *const x,
+ int plane, BLOCK_SIZE plane_bsize,
+ TX_SIZE tx_size) {
const AV1_COMMON *cm = &cpi->common;
MACROBLOCKD *const xd = &x->e_mbd;
MB_MODE_INFO *const mbmi = xd->mi[0];
int row, col;
assert(!is_inter_block(mbmi));
- (void)mode_cost;
- TX_SIZE tx_size = AOMMIN(TX_32X32, max_txsize_lookup[bsize]);
const int stepr = tx_size_high_unit[tx_size];
const int stepc = tx_size_wide_unit[tx_size];
const int txbw = tx_size_wide[tx_size];
const int txbh = tx_size_high[tx_size];
- const int max_blocks_wide = max_block_wide(xd, bsize, 0);
- const int max_blocks_high = max_block_high(xd, bsize, 0);
+ const int max_blocks_wide = max_block_wide(xd, plane_bsize, plane);
+ const int max_blocks_high = max_block_high(xd, plane_bsize, plane);
mbmi->tx_size = tx_size;
int64_t satd_cost = 0;
- struct macroblock_plane *p = &x->plane[0];
- struct macroblockd_plane *pd = &xd->plane[0];
+ struct macroblock_plane *p = &x->plane[plane];
+ struct macroblockd_plane *pd = &xd->plane[plane];
// Prediction.
for (row = 0; row < max_blocks_high; row += stepr) {
for (col = 0; col < max_blocks_wide; col += stepc) {
- av1_predict_intra_block_facade(cm, xd, 0, col, row, tx_size);
+ av1_predict_intra_block_facade(cm, xd, plane, col, row, tx_size);
av1_subtract_block(
- xd, txbh, txbw, p->src_diff, block_size_wide[bsize],
+ xd, txbh, txbw, p->src_diff, block_size_wide[plane_bsize],
p->src.buf + (((row * p->src.stride) + col) << 2), p->src.stride,
pd->dst.buf + (((row * pd->dst.stride) + col) << 2), pd->dst.stride);
switch (tx_size) {
case TX_4X4:
- aom_hadamard_4x4(p->src_diff, block_size_wide[bsize], p->coeff);
+ aom_hadamard_4x4(p->src_diff, block_size_wide[plane_bsize], p->coeff);
break;
case TX_8X8:
- aom_hadamard_8x8(p->src_diff, block_size_wide[bsize], p->coeff);
+ aom_hadamard_8x8(p->src_diff, block_size_wide[plane_bsize], p->coeff);
break;
case TX_16X16:
- aom_hadamard_16x16(p->src_diff, block_size_wide[bsize], p->coeff);
+ aom_hadamard_16x16(p->src_diff, block_size_wide[plane_bsize],
+ p->coeff);
break;
case TX_32X32:
- aom_hadamard_32x32(p->src_diff, block_size_wide[bsize], p->coeff);
+ aom_hadamard_32x32(p->src_diff, block_size_wide[plane_bsize],
+ p->coeff);
break;
default: assert(0);
}
@@ -446,9 +447,10 @@
*/
static AOM_INLINE int model_intra_yrd_and_prune(const AV1_COMP *const cpi,
MACROBLOCK *x, BLOCK_SIZE bsize,
- int mode_info_cost,
int64_t *best_model_rd) {
- const int64_t this_model_rd = intra_model_yrd(cpi, x, bsize, mode_info_cost);
+ const TX_SIZE tx_size = AOMMIN(TX_32X32, max_txsize_lookup[bsize]);
+ const int plane = 0;
+ const int64_t this_model_rd = intra_model_rd(cpi, x, plane, bsize, tx_size);
if (*best_model_rd != INT64_MAX &&
this_model_rd > *best_model_rd + (*best_model_rd >> 2)) {
return 1;
diff --git a/av1/encoder/palette.c b/av1/encoder/palette.c
index f821bdc..57a5d2d 100644
--- a/av1/encoder/palette.c
+++ b/av1/encoder/palette.c
@@ -253,8 +253,7 @@
const int palette_mode_cost =
intra_mode_info_cost_y(cpi, x, mbmi, bsize, dc_mode_cost);
- if (model_intra_yrd_and_prune(cpi, x, bsize, palette_mode_cost,
- best_model_rd)) {
+ if (model_intra_yrd_and_prune(cpi, x, bsize, best_model_rd)) {
return;
}