Use PLANE_TYPE to index angle_delta This is important because only one angle delta is used for both chroma planes. Using PLANE_TYPE increases readability and reduces the chance of people trying to access the angle_delta for AOM_PLANE_V (i.e. 2). Change-Id: I26f452e6fcee8bd7fd1e670e73f457d6937e0da9
diff --git a/av1/common/blockd.h b/av1/common/blockd.h index 2fe86cc..7bd9410 100644 --- a/av1/common/blockd.h +++ b/av1/common/blockd.h
@@ -271,7 +271,7 @@ FILTER_INTRA_MODE_INFO filter_intra_mode_info; #endif // CONFIG_FILTER_INTRA // The actual prediction angle is the base angle + (angle_delta * step). - int8_t angle_delta[2]; + int8_t angle_delta[PLANE_TYPES]; // interintra members INTERINTRA_MODE interintra_mode;
diff --git a/av1/common/reconinter.c b/av1/common/reconinter.c index e8412a6..d752f6c 100644 --- a/av1/common/reconinter.c +++ b/av1/common/reconinter.c
@@ -1905,8 +1905,8 @@ BLOCK_SIZE plane_bsize = get_plane_block_size(bsize, &xd->plane[plane]); PREDICTION_MODE mode = interintra_to_intra_mode[xd->mi[0]->mbmi.interintra_mode]; - xd->mi[0]->mbmi.angle_delta[0] = 0; - xd->mi[0]->mbmi.angle_delta[1] = 0; + xd->mi[0]->mbmi.angle_delta[PLANE_TYPE_Y] = 0; + xd->mi[0]->mbmi.angle_delta[PLANE_TYPE_UV] = 0; #if CONFIG_FILTER_INTRA xd->mi[0]->mbmi.filter_intra_mode_info.use_filter_intra = 0; #endif // CONFIG_FILTER_INTRA
diff --git a/av1/common/reconintra.c b/av1/common/reconintra.c index 8dc3be1..793e405 100644 --- a/av1/common/reconintra.c +++ b/av1/common/reconintra.c
@@ -1643,7 +1643,7 @@ if (is_dr_mode) { p_angle = mode_to_angle_map[mode] + - xd->mi[0]->mbmi.angle_delta[plane != 0] * ANGLE_STEP; + xd->mi[0]->mbmi.angle_delta[plane != AOM_PLANE_Y] * ANGLE_STEP; if (p_angle <= 90) need_above = 1, need_left = 0, need_above_left = 1; else if (p_angle < 180) @@ -1655,7 +1655,6 @@ if (use_filter_intra) need_left = need_above = need_above_left = 1; #endif // CONFIG_FILTER_INTRA - (void)plane; assert(n_top_px >= 0); assert(n_topright_px >= 0); assert(n_left_px >= 0); @@ -1862,7 +1861,7 @@ if (is_dr_mode) { p_angle = mode_to_angle_map[mode] + - xd->mi[0]->mbmi.angle_delta[plane != 0] * ANGLE_STEP; + xd->mi[0]->mbmi.angle_delta[plane != AOM_PLANE_Y] * ANGLE_STEP; if (p_angle <= 90) need_above = 1, need_left = 0, need_above_left = 1; else if (p_angle < 180) @@ -1874,8 +1873,6 @@ if (use_filter_intra) need_left = need_above = need_above_left = 1; #endif // CONFIG_FILTER_INTRA - (void)xd; - (void)plane; assert(n_top_px >= 0); assert(n_topright_px >= 0); assert(n_left_px >= 0);
diff --git a/av1/common/reconintra.h b/av1/common/reconintra.h index d792fd1..b6b84bb 100644 --- a/av1/common/reconintra.h +++ b/av1/common/reconintra.h
@@ -58,8 +58,8 @@ } static INLINE int av1_use_angle_delta(BLOCK_SIZE bsize) { - (void)bsize; #if CONFIG_USE_ANGLE_DELTA_SUB8X8 + (void)bsize; return 1; #else return bsize >= BLOCK_8X8;
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c index 146de11..c524bcd 100644 --- a/av1/decoder/decodemv.c +++ b/av1/decoder/decodemv.c
@@ -798,26 +798,26 @@ FRAME_CONTEXT *const ec_ctx = xd->tile_ctx; #endif // CONFIG_EXT_INTRA_MOD - mbmi->angle_delta[0] = 0; - mbmi->angle_delta[1] = 0; + mbmi->angle_delta[PLANE_TYPE_Y] = 0; + mbmi->angle_delta[PLANE_TYPE_UV] = 0; if (!av1_use_angle_delta(bsize)) return; if (av1_is_directional_mode(mbmi->mode, bsize)) { #if CONFIG_EXT_INTRA_MOD - mbmi->angle_delta[0] = + mbmi->angle_delta[PLANE_TYPE_Y] = read_angle_delta(r, ec_ctx->angle_delta_cdf[mbmi->mode - V_PRED]); #else - mbmi->angle_delta[0] = + mbmi->angle_delta[PLANE_TYPE_Y] = av1_read_uniform(r, 2 * MAX_ANGLE_DELTA + 1) - MAX_ANGLE_DELTA; #endif // CONFIG_EXT_INTRA_MOD } if (av1_is_directional_mode(get_uv_mode(mbmi->uv_mode), bsize)) { #if CONFIG_EXT_INTRA_MOD - mbmi->angle_delta[1] = + mbmi->angle_delta[PLANE_TYPE_UV] = read_angle_delta(r, ec_ctx->angle_delta_cdf[mbmi->uv_mode - V_PRED]); #else - mbmi->angle_delta[1] = + mbmi->angle_delta[PLANE_TYPE_UV] = av1_read_uniform(r, 2 * MAX_ANGLE_DELTA + 1) - MAX_ANGLE_DELTA; #endif // CONFIG_EXT_INTRA_MOD } @@ -1935,8 +1935,8 @@ read_interintra_mode(xd, r, bsize_group); mbmi->ref_frame[1] = INTRA_FRAME; mbmi->interintra_mode = interintra_mode; - mbmi->angle_delta[0] = 0; - mbmi->angle_delta[1] = 0; + mbmi->angle_delta[PLANE_TYPE_Y] = 0; + mbmi->angle_delta[PLANE_TYPE_UV] = 0; #if CONFIG_FILTER_INTRA mbmi->filter_intra_mode_info.use_filter_intra = 0; #endif // CONFIG_FILTER_INTRA
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c index cbee3ca..5d10716 100644 --- a/av1/encoder/bitstream.c +++ b/av1/encoder/bitstream.c
@@ -784,24 +784,24 @@ if (av1_is_directional_mode(mbmi->mode, bsize)) { #if CONFIG_EXT_INTRA_MOD - aom_write_symbol(w, mbmi->angle_delta[0] + MAX_ANGLE_DELTA, + aom_write_symbol(w, mbmi->angle_delta[PLANE_TYPE_Y] + MAX_ANGLE_DELTA, ec_ctx->angle_delta_cdf[mbmi->mode - V_PRED], 2 * MAX_ANGLE_DELTA + 1); #else (void)ec_ctx; write_uniform(w, 2 * MAX_ANGLE_DELTA + 1, - MAX_ANGLE_DELTA + mbmi->angle_delta[0]); + MAX_ANGLE_DELTA + mbmi->angle_delta[PLANE_TYPE_Y]); #endif // CONFIG_EXT_INTRA_MOD } if (av1_is_directional_mode(get_uv_mode(mbmi->uv_mode), bsize)) { #if CONFIG_EXT_INTRA_MOD - aom_write_symbol(w, mbmi->angle_delta[1] + MAX_ANGLE_DELTA, + aom_write_symbol(w, mbmi->angle_delta[PLANE_TYPE_UV] + MAX_ANGLE_DELTA, ec_ctx->angle_delta_cdf[mbmi->uv_mode - V_PRED], 2 * MAX_ANGLE_DELTA + 1); #else write_uniform(w, 2 * MAX_ANGLE_DELTA + 1, - MAX_ANGLE_DELTA + mbmi->angle_delta[1]); + MAX_ANGLE_DELTA + mbmi->angle_delta[PLANE_TYPE_UV]); #endif } }
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c index 715ed3f..083f35a 100644 --- a/av1/encoder/encodeframe.c +++ b/av1/encoder/encodeframe.c
@@ -843,28 +843,29 @@ av1_use_angle_delta(bsize)) { #if CONFIG_ENTROPY_STATS ++counts->angle_delta[mbmi->mode - V_PRED] - [mbmi->angle_delta[0] + MAX_ANGLE_DELTA]; + [mbmi->angle_delta[PLANE_TYPE_Y] + MAX_ANGLE_DELTA]; #endif if (allow_update_cdf) update_cdf(fc->angle_delta_cdf[mbmi->mode - V_PRED], - mbmi->angle_delta[0] + MAX_ANGLE_DELTA, + mbmi->angle_delta[PLANE_TYPE_Y] + MAX_ANGLE_DELTA, 2 * MAX_ANGLE_DELTA + 1); } #endif // CONFIG_EXT_INTRA_MOD - if (!is_chroma_reference(mi_row, mi_col, bsize, xd->plane[1].subsampling_x, - xd->plane[1].subsampling_y)) + if (!is_chroma_reference(mi_row, mi_col, bsize, + xd->plane[AOM_PLANE_U].subsampling_x, + xd->plane[AOM_PLANE_U].subsampling_y)) return; #if CONFIG_EXT_INTRA_MOD if (av1_is_directional_mode(get_uv_mode(mbmi->uv_mode), bsize) && av1_use_angle_delta(bsize)) { #if CONFIG_ENTROPY_STATS ++counts->angle_delta[mbmi->uv_mode - V_PRED] - [mbmi->angle_delta[1] + MAX_ANGLE_DELTA]; + [mbmi->angle_delta[PLANE_TYPE_UV] + MAX_ANGLE_DELTA]; #endif if (allow_update_cdf) update_cdf(fc->angle_delta_cdf[mbmi->uv_mode - V_PRED], - mbmi->angle_delta[1] + MAX_ANGLE_DELTA, + mbmi->angle_delta[PLANE_TYPE_UV] + MAX_ANGLE_DELTA, 2 * MAX_ANGLE_DELTA + 1); } #endif // CONFIG_EXT_INTRA_MOD
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c index 6e49caf..220296f 100644 --- a/av1/encoder/rdopt.c +++ b/av1/encoder/rdopt.c
@@ -2757,10 +2757,12 @@ if (av1_use_angle_delta(bsize)) { #if CONFIG_EXT_INTRA_MOD total_rate += x->angle_delta_cost[mbmi->mode - V_PRED] - [MAX_ANGLE_DELTA + mbmi->angle_delta[0]]; + [MAX_ANGLE_DELTA + + mbmi->angle_delta[PLANE_TYPE_Y]]; #else - total_rate += write_uniform_cost(2 * MAX_ANGLE_DELTA + 1, - MAX_ANGLE_DELTA + mbmi->angle_delta[0]); + total_rate += + write_uniform_cost(2 * MAX_ANGLE_DELTA + 1, + MAX_ANGLE_DELTA + mbmi->angle_delta[PLANE_TYPE_Y]); #endif // CONFIG_EXT_INTRA_MOD } } @@ -2810,11 +2812,13 @@ if (av1_is_directional_mode(get_uv_mode(mode), mbmi->sb_type)) { if (av1_use_angle_delta(bsize)) { #if CONFIG_EXT_INTRA_MOD - total_rate += x->angle_delta_cost[mode - V_PRED] - [mbmi->angle_delta[1] + MAX_ANGLE_DELTA]; + total_rate += + x->angle_delta_cost[mode - V_PRED][mbmi->angle_delta[PLANE_TYPE_UV] + + MAX_ANGLE_DELTA]; #else - total_rate += write_uniform_cost(2 * MAX_ANGLE_DELTA + 1, - MAX_ANGLE_DELTA + mbmi->angle_delta[1]); + total_rate += write_uniform_cost( + 2 * MAX_ANGLE_DELTA + 1, + MAX_ANGLE_DELTA + mbmi->angle_delta[PLANE_TYPE_UV]); #endif // CONFIG_EXT_INTRA_MOD } } @@ -2872,11 +2876,13 @@ if (av1_is_directional_mode(mbmi->mode, bsize) && av1_use_angle_delta(bsize)) { #if CONFIG_EXT_INTRA_MOD - mode_cost += x->angle_delta_cost[mbmi->mode - V_PRED] - [MAX_ANGLE_DELTA + mbmi->angle_delta[0]]; + mode_cost += + x->angle_delta_cost[mbmi->mode - V_PRED] + [MAX_ANGLE_DELTA + mbmi->angle_delta[PLANE_TYPE_Y]]; #else - mode_cost += write_uniform_cost(2 * MAX_ANGLE_DELTA + 1, - MAX_ANGLE_DELTA + mbmi->angle_delta[0]); + mode_cost += + write_uniform_cost(2 * MAX_ANGLE_DELTA + 1, + MAX_ANGLE_DELTA + mbmi->angle_delta[PLANE_TYPE_Y]); #endif // CONFIG_EXT_INTRA_MOD } #if CONFIG_FILTER_INTRA @@ -3225,7 +3231,7 @@ (void)best_txk_type; #endif - mbmi->angle_delta[0] = angle_delta; + mbmi->angle_delta[PLANE_TYPE_Y] = angle_delta; this_model_rd = intra_model_yrd(cpi, x, bsize, mode_cost); if (*best_model_rd != INT64_MAX && this_model_rd > *best_model_rd + (*best_model_rd >> 1)) @@ -3234,13 +3240,14 @@ super_block_yrd(cpi, x, &tokenonly_rd_stats, bsize, best_rd_in); if (tokenonly_rd_stats.rate == INT_MAX) return INT64_MAX; - this_rate = tokenonly_rd_stats.rate + mode_cost + + this_rate = + tokenonly_rd_stats.rate + mode_cost + #if CONFIG_EXT_INTRA_MOD - x->angle_delta_cost[mbmi->mode - V_PRED] - [max_angle_delta + mbmi->angle_delta[0]]; + x->angle_delta_cost[mbmi->mode - V_PRED] + [max_angle_delta + mbmi->angle_delta[PLANE_TYPE_Y]]; #else - write_uniform_cost(2 * max_angle_delta + 1, - mbmi->angle_delta[0] + max_angle_delta); + write_uniform_cost(2 * max_angle_delta + 1, + mbmi->angle_delta[PLANE_TYPE_Y] + max_angle_delta); #endif // CONFIG_EXT_INTRA_MOD this_rd = RDCOST(x->rdmult, this_rate, tokenonly_rd_stats.dist); @@ -3252,7 +3259,7 @@ #endif memcpy(best_blk_skip, x->blk_skip[0], sizeof(best_blk_skip[0]) * n4); *best_rd = this_rd; - *best_angle_delta = mbmi->angle_delta[0]; + *best_angle_delta = mbmi->angle_delta[PLANE_TYPE_Y]; *best_tx_size = mbmi->tx_size; *best_tx_type = mbmi->tx_type; *rate = this_rate; @@ -3328,7 +3335,7 @@ } mbmi->tx_size = best_tx_size; - mbmi->angle_delta[0] = best_angle_delta; + mbmi->angle_delta[PLANE_TYPE_Y] = best_angle_delta; mbmi->tx_type = best_tx_type; #if CONFIG_TXK_SEL memcpy(mbmi->txk_type, best_txk_type, @@ -3546,7 +3553,7 @@ const int left_ctx = intra_mode_context[L]; bmode_costs = x->y_mode_costs[above_ctx][left_ctx]; - mbmi->angle_delta[0] = 0; + mbmi->angle_delta[PLANE_TYPE_Y] = 0; if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) highbd_angle_estimation(src, src_stride, rows, cols, bsize, directional_mode_skip_mask); @@ -3570,7 +3577,7 @@ int this_rate, this_rate_tokenonly, s; int64_t this_distortion, this_rd, this_model_rd; mbmi->mode = intra_rd_search_mode_order[mode_idx]; - mbmi->angle_delta[0] = 0; + mbmi->angle_delta[PLANE_TYPE_Y] = 0; this_model_rd = intra_model_yrd(cpi, x, bsize, bmode_costs[mbmi->mode]); if (best_model_rd != INT64_MAX && this_model_rd > best_model_rd + (best_model_rd >> 1)) @@ -5391,7 +5398,7 @@ this_rd = RDCOST(x->rdmult, this_rate, tokenonly_rd_stats.dist); if (this_rd < *best_rd) { *best_rd = this_rd; - *best_angle_delta = mbmi->angle_delta[1]; + *best_angle_delta = mbmi->angle_delta[PLANE_TYPE_UV]; *rate = this_rate; rd_stats->rate = tokenonly_rd_stats.rate; rd_stats->dist = tokenonly_rd_stats.dist; @@ -5422,7 +5429,7 @@ best_rd_in = (best_rd == INT64_MAX) ? INT64_MAX : (best_rd + (best_rd >> ((angle_delta == 0) ? 3 : 5))); - mbmi->angle_delta[1] = (1 - 2 * i) * angle_delta; + mbmi->angle_delta[PLANE_TYPE_UV] = (1 - 2 * i) * angle_delta; this_rd = pick_intra_angle_routine_sbuv(cpi, x, bsize, rate_overhead, best_rd_in, rate, rd_stats, &best_angle_delta, &best_rd); @@ -5445,7 +5452,7 @@ rd_cost[2 * (angle_delta - 1) + i] > rd_thresh) skip_search = 1; if (!skip_search) { - mbmi->angle_delta[1] = (1 - 2 * i) * angle_delta; + mbmi->angle_delta[PLANE_TYPE_UV] = (1 - 2 * i) * angle_delta; pick_intra_angle_routine_sbuv(cpi, x, bsize, rate_overhead, best_rd, rate, rd_stats, &best_angle_delta, &best_rd); @@ -5453,7 +5460,7 @@ } } - mbmi->angle_delta[1] = best_angle_delta; + mbmi->angle_delta[PLANE_TYPE_UV] = best_angle_delta; return rd_stats->rate != INT_MAX; } @@ -5618,7 +5625,7 @@ if (cfl_alpha_rate == INT_MAX) continue; } #endif - mbmi->angle_delta[1] = 0; + mbmi->angle_delta[PLANE_TYPE_UV] = 0; if (is_directional_mode && av1_use_angle_delta(mbmi->sb_type)) { #if CONFIG_CFL const int rate_overhead = @@ -9872,7 +9879,7 @@ intra_mode_cost[mbmi->mode], best_rd, &model_rd); } else { - mbmi->angle_delta[0] = 0; + mbmi->angle_delta[PLANE_TYPE_Y] = 0; super_block_yrd(cpi, x, &rd_stats_y, bsize, best_rd); } rate_y = rd_stats_y.rate; @@ -9967,7 +9974,7 @@ &rate_uv_tokenonly[uv_tx], &dist_uvs[uv_tx], &skip_uvs[uv_tx], &mode_uv[uv_tx]); if (try_palette) pmi_uv[uv_tx] = *pmi; - uv_angle_delta[uv_tx] = mbmi->angle_delta[1]; + uv_angle_delta[uv_tx] = mbmi->angle_delta[PLANE_TYPE_UV]; } rate_uv = rate_uv_tokenonly[uv_tx]; @@ -9980,7 +9987,7 @@ pmi_uv[uv_tx].palette_colors + PALETTE_MAX_SIZE, 2 * PALETTE_MAX_SIZE * sizeof(pmi->palette_colors[0])); } - mbmi->angle_delta[1] = uv_angle_delta[uv_tx]; + mbmi->angle_delta[PLANE_TYPE_UV] = uv_angle_delta[uv_tx]; } rate2 = rate_y + intra_mode_info_cost_y(cpi, x, mbmi, bsize, @@ -10014,8 +10021,8 @@ backup_ref_mv[0] = mbmi_ext->ref_mvs[ref_frame][0]; if (comp_pred) backup_ref_mv[1] = mbmi_ext->ref_mvs[second_ref_frame][0]; - mbmi->angle_delta[0] = 0; - mbmi->angle_delta[1] = 0; + mbmi->angle_delta[PLANE_TYPE_Y] = 0; + mbmi->angle_delta[PLANE_TYPE_UV] = 0; #if CONFIG_FILTER_INTRA mbmi->filter_intra_mode_info.use_filter_intra = 0; #endif // CONFIG_FILTER_INTRA @@ -10566,7 +10573,7 @@ &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[1]; + 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]; @@ -10575,7 +10582,7 @@ pmi_uv[uv_tx].palette_colors + PALETTE_MAX_SIZE, 2 * PALETTE_MAX_SIZE * sizeof(pmi->palette_colors[0])); } - mbmi->angle_delta[1] = uv_angle_delta[uv_tx]; + 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];