Skip uv processing for monochrome BUG=aomedia:1580 Change-Id: I14c74d116285f81aac43fefe33ade40268fae06e
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c index 65ceee7..6edbf4d 100644 --- a/av1/encoder/rdopt.c +++ b/av1/encoder/rdopt.c
@@ -9626,29 +9626,35 @@ rows * cols * sizeof(best_palette_color_map[0])); super_block_yrd(cpi, x, &rd_stats_y, bsize, best_rd); if (rd_stats_y.rate == INT_MAX) goto PALETTE_EXIT; - uv_tx = av1_get_tx_size(AOM_PLANE_U, xd); - if (rate_uv_intra[uv_tx] == INT_MAX) { - choose_intra_uv_mode(cpi, x, bsize, uv_tx, &rate_uv_intra[uv_tx], - &rate_uv_tokenonly[uv_tx], &dist_uvs[uv_tx], - &skip_uvs[uv_tx], &mode_uv[uv_tx]); - pmi_uv[uv_tx] = *pmi; - uv_angle_delta[uv_tx] = mbmi->angle_delta[PLANE_TYPE_UV]; - } - mbmi->uv_mode = mode_uv[uv_tx]; - pmi->palette_size[1] = pmi_uv[uv_tx].palette_size[1]; - if (pmi->palette_size[1] > 0) { - memcpy(pmi->palette_colors + PALETTE_MAX_SIZE, - pmi_uv[uv_tx].palette_colors + PALETTE_MAX_SIZE, - 2 * PALETTE_MAX_SIZE * sizeof(pmi->palette_colors[0])); - } - mbmi->angle_delta[PLANE_TYPE_UV] = uv_angle_delta[uv_tx]; - skippable = rd_stats_y.skip && skip_uvs[uv_tx]; - distortion2 = rd_stats_y.dist + dist_uvs[uv_tx]; - rate2 = rd_stats_y.rate + rate_overhead_palette + rate_uv_intra[uv_tx]; + skippable = rd_stats_y.skip; + distortion2 = rd_stats_y.dist; + rate2 = rd_stats_y.rate + rate_overhead_palette; rate2 += ref_costs_single[INTRA_FRAME]; + if (num_planes > 1) { + uv_tx = av1_get_tx_size(AOM_PLANE_U, xd); + if (rate_uv_intra[uv_tx] == INT_MAX) { + choose_intra_uv_mode(cpi, x, bsize, uv_tx, &rate_uv_intra[uv_tx], + &rate_uv_tokenonly[uv_tx], &dist_uvs[uv_tx], + &skip_uvs[uv_tx], &mode_uv[uv_tx]); + pmi_uv[uv_tx] = *pmi; + uv_angle_delta[uv_tx] = mbmi->angle_delta[PLANE_TYPE_UV]; + } + mbmi->uv_mode = mode_uv[uv_tx]; + pmi->palette_size[1] = pmi_uv[uv_tx].palette_size[1]; + if (pmi->palette_size[1] > 0) { + memcpy(pmi->palette_colors + PALETTE_MAX_SIZE, + pmi_uv[uv_tx].palette_colors + PALETTE_MAX_SIZE, + 2 * PALETTE_MAX_SIZE * sizeof(pmi->palette_colors[0])); + } + mbmi->angle_delta[PLANE_TYPE_UV] = uv_angle_delta[uv_tx]; + skippable = skippable && skip_uvs[uv_tx]; + distortion2 += dist_uvs[uv_tx]; + rate2 += rate_uv_intra[uv_tx]; + } if (skippable) { - rate2 -= (rd_stats_y.rate + rate_uv_tokenonly[uv_tx]); + rate2 -= rd_stats_y.rate; + if (num_planes > 1) rate2 -= rate_uv_tokenonly[uv_tx]; rate2 += x->skip_cost[av1_get_skip_context(xd)][1]; } else { rate2 += x->skip_cost[av1_get_skip_context(xd)][0];