Refactor ext-intra Remove the code about block size dependent angle steps and deltas, as they are modefied to be the same for all blocks in c81ea6e. BUG=aomedia:442 Change-Id: I54607dd752ef895c1418f979410b14c02fc9ce22
diff --git a/av1/common/blockd.h b/av1/common/blockd.h index 4005d88..8f7761e 100644 --- a/av1/common/blockd.h +++ b/av1/common/blockd.h
@@ -890,31 +890,12 @@ } #if CONFIG_EXT_INTRA -#define MAX_ANGLE_DELTA_UV 3 -#define ANGLE_STEP_UV 3 - -static const uint8_t av1_angle_step_y[TX_SIZES] = { - 0, 3, 3, 3, -}; -static const uint8_t av1_max_angle_delta_y[TX_SIZES] = { - 0, 3, 3, 3, -}; - +#define MAX_ANGLE_DELTA 3 +#define ANGLE_STEP 3 extern const int16_t dr_intra_derivative[90]; static const uint8_t mode_to_angle_map[INTRA_MODES] = { 0, 90, 180, 45, 135, 111, 157, 203, 67, 0, }; - -static INLINE int av1_get_angle_step(BLOCK_SIZE sb_type, int plane) { - const TX_SIZE max_tx_size = max_txsize_lookup[sb_type]; - return plane ? ANGLE_STEP_UV : av1_angle_step_y[max_tx_size]; -} - -static INLINE int av1_get_max_angle_delta(BLOCK_SIZE sb_type, int plane) { - const TX_SIZE max_tx_size = max_txsize_lookup[sb_type]; - return plane ? MAX_ANGLE_DELTA_UV : av1_max_angle_delta_y[max_tx_size]; -} - #if CONFIG_INTRA_INTERP // Returns whether filter selection is needed for a given // intra prediction angle.
diff --git a/av1/common/pred_common.c b/av1/common/pred_common.c index afb27bf..f8041f8 100644 --- a/av1/common/pred_common.c +++ b/av1/common/pred_common.c
@@ -108,7 +108,7 @@ INTRA_FILTER ref_type = INTRA_FILTERS; if (ref_mbmi->sb_type >= BLOCK_8X8) { - PREDICTION_MODE mode = ref_mbmi->mode; + const PREDICTION_MODE mode = ref_mbmi->mode; if (is_inter_block(ref_mbmi)) { #if CONFIG_DUAL_FILTER switch (ref_mbmi->interp_filter[0]) { @@ -123,9 +123,8 @@ } } else { if (av1_is_directional_mode(mode, ref_mbmi->sb_type)) { - const int angle_step = av1_get_angle_step(ref_mbmi->sb_type, 0); - int p_angle = - mode_to_angle_map[mode] + ref_mbmi->angle_delta[0] * angle_step; + const int p_angle = + mode_to_angle_map[mode] + ref_mbmi->angle_delta[0] * ANGLE_STEP; if (av1_is_intra_filter_switchable(p_angle)) { ref_type = ref_mbmi->intra_filter; }
diff --git a/av1/common/reconintra.c b/av1/common/reconintra.c index a002c91..2692c48 100644 --- a/av1/common/reconintra.c +++ b/av1/common/reconintra.c
@@ -1852,8 +1852,6 @@ const uint16_t *above_ref = ref - ref_stride; #if CONFIG_EXT_INTRA int p_angle = 0; - const MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi; - const int angle_step = av1_get_angle_step(mbmi->sb_type, plane); const int is_dr_mode = av1_is_directional_mode(mode, xd->mi[0]->mbmi.sb_type); #endif // CONFIG_EXT_INTRA #if CONFIG_FILTER_INTRA @@ -1874,7 +1872,7 @@ #if CONFIG_EXT_INTRA 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 != 0] * ANGLE_STEP; if (p_angle <= 90) need_above = 1, need_left = 0, need_above_left = 1; else if (p_angle < 180) @@ -2023,7 +2021,6 @@ #if CONFIG_EXT_INTRA int p_angle = 0; const MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi; - const int angle_step = av1_get_angle_step(mbmi->sb_type, plane); const int is_dr_mode = av1_is_directional_mode(mode, mbmi->sb_type); #endif // CONFIG_EXT_INTRA #if CONFIG_FILTER_INTRA @@ -2044,7 +2041,7 @@ #if CONFIG_EXT_INTRA 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 != 0] * ANGLE_STEP; if (p_angle <= 90) need_above = 1, need_left = 0, need_above_left = 1; else if (p_angle < 180)
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c index d7ca4fc..96afc7a 100644 --- a/av1/decoder/decodemv.c +++ b/av1/decoder/decodemv.c
@@ -806,12 +806,10 @@ if (bsize < BLOCK_8X8) return; if (av1_is_directional_mode(mbmi->mode, bsize)) { - const int max_angle_delta = av1_get_max_angle_delta(mbmi->sb_type, 0); mbmi->angle_delta[0] = - read_uniform(r, 2 * max_angle_delta + 1) - max_angle_delta; + read_uniform(r, 2 * MAX_ANGLE_DELTA + 1) - MAX_ANGLE_DELTA; #if CONFIG_INTRA_INTERP - p_angle = mode_to_angle_map[mbmi->mode] + - mbmi->angle_delta[0] * av1_get_angle_step(mbmi->sb_type, 0); + p_angle = mode_to_angle_map[mbmi->mode] + mbmi->angle_delta[0] * ANGLE_STEP; if (av1_is_intra_filter_switchable(p_angle)) { FRAME_COUNTS *counts = xd->counts; #if CONFIG_EC_MULTISYMBOL @@ -830,7 +828,7 @@ if (av1_is_directional_mode(mbmi->uv_mode, bsize)) { mbmi->angle_delta[1] = - read_uniform(r, 2 * MAX_ANGLE_DELTA_UV + 1) - MAX_ANGLE_DELTA_UV; + read_uniform(r, 2 * MAX_ANGLE_DELTA + 1) - MAX_ANGLE_DELTA; } } #endif // CONFIG_EXT_INTRA
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c index bd654fb..6c01520 100644 --- a/av1/encoder/bitstream.c +++ b/av1/encoder/bitstream.c
@@ -1349,12 +1349,10 @@ if (bsize < BLOCK_8X8) return; if (av1_is_directional_mode(mbmi->mode, bsize)) { - const int max_angle_delta = av1_get_max_angle_delta(mbmi->sb_type, 0); - write_uniform(w, 2 * max_angle_delta + 1, - max_angle_delta + mbmi->angle_delta[0]); + write_uniform(w, 2 * MAX_ANGLE_DELTA + 1, + MAX_ANGLE_DELTA + mbmi->angle_delta[0]); #if CONFIG_INTRA_INTERP - p_angle = mode_to_angle_map[mbmi->mode] + - mbmi->angle_delta[0] * av1_get_angle_step(mbmi->sb_type, 0); + p_angle = mode_to_angle_map[mbmi->mode] + mbmi->angle_delta[0] * ANGLE_STEP; if (av1_is_intra_filter_switchable(p_angle)) { #if CONFIG_EC_MULTISYMBOL aom_write_symbol(w, mbmi->intra_filter, @@ -1370,8 +1368,8 @@ } if (av1_is_directional_mode(mbmi->uv_mode, bsize)) { - write_uniform(w, 2 * MAX_ANGLE_DELTA_UV + 1, - MAX_ANGLE_DELTA_UV + mbmi->angle_delta[1]); + write_uniform(w, 2 * MAX_ANGLE_DELTA + 1, + MAX_ANGLE_DELTA + mbmi->angle_delta[1]); } } #endif // CONFIG_EXT_INTRA
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c index 6fb7c85..bfb262c 100644 --- a/av1/encoder/encodeframe.c +++ b/av1/encoder/encodeframe.c
@@ -5974,10 +5974,9 @@ #if CONFIG_EXT_INTRA #if CONFIG_INTRA_INTERP if (av1_is_directional_mode(mbmi->mode, bsize)) { - int p_angle; const int intra_filter_ctx = av1_get_pred_context_intra_interp(xd); - p_angle = mode_to_angle_map[mbmi->mode] + - mbmi->angle_delta[0] * av1_get_angle_step(mbmi->sb_type, 0); + const int p_angle = + mode_to_angle_map[mbmi->mode] + mbmi->angle_delta[0] * ANGLE_STEP; if (av1_is_intra_filter_switchable(p_angle)) ++counts->intra_filter[intra_filter_ctx][mbmi->intra_filter]; }
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c index f13c585..733230a 100644 --- a/av1/encoder/rdopt.c +++ b/av1/encoder/rdopt.c
@@ -2347,9 +2347,8 @@ &this_rd_stats.dist, &this_rd_stats.skip, &temp_sse); #if CONFIG_EXT_INTRA if (av1_is_directional_mode(mbmi->mode, bsize)) { - const int max_angle_delta = av1_get_max_angle_delta(bsize, 0); - 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[0]); } #endif // CONFIG_EXT_INTRA #if CONFIG_FILTER_INTRA @@ -3291,7 +3290,6 @@ MODE_INFO *const mic = xd->mi[0]; MB_MODE_INFO *mbmi = &mic->mbmi; int i, angle_delta, best_angle_delta = 0; - const int max_angle_delta = av1_get_max_angle_delta(bsize, 0); int first_try = 1; #if CONFIG_INTRA_INTERP int p_angle; @@ -3302,9 +3300,9 @@ TX_SIZE best_tx_size = mic->mbmi.tx_size; TX_TYPE best_tx_type = mbmi->tx_type; - for (i = 0; i < 2 * (max_angle_delta + 2); ++i) rd_cost[i] = INT64_MAX; + for (i = 0; i < 2 * (MAX_ANGLE_DELTA + 2); ++i) rd_cost[i] = INT64_MAX; - for (angle_delta = 0; angle_delta <= max_angle_delta; angle_delta += 2) { + for (angle_delta = 0; angle_delta <= MAX_ANGLE_DELTA; angle_delta += 2) { #if CONFIG_INTRA_INTERP for (filter = INTRA_FILTER_LINEAR; filter < INTRA_FILTERS; ++filter) { if (FILTER_FAST_SEARCH && filter != INTRA_FILTER_LINEAR) continue; @@ -3321,7 +3319,7 @@ #else mode_cost, #endif // CONFIG_INTRA_INTERP - best_rd_in, (1 - 2 * i) * angle_delta, max_angle_delta, rate, + best_rd_in, (1 - 2 * i) * angle_delta, MAX_ANGLE_DELTA, rate, rd_stats, &best_angle_delta, &best_tx_size, &best_tx_type, #if CONFIG_INTRA_INTERP &best_filter, @@ -3341,7 +3339,7 @@ } assert(best_rd != INT64_MAX); - for (angle_delta = 1; angle_delta <= max_angle_delta; angle_delta += 2) { + for (angle_delta = 1; angle_delta <= MAX_ANGLE_DELTA; angle_delta += 2) { int64_t rd_thresh; #if CONFIG_INTRA_INTERP for (filter = INTRA_FILTER_LINEAR; filter < INTRA_FILTERS; ++filter) { @@ -3362,7 +3360,7 @@ #else mode_cost, #endif // CONFIG_INTRA_INTERP - best_rd, (1 - 2 * i) * angle_delta, max_angle_delta, rate, + best_rd, (1 - 2 * i) * angle_delta, MAX_ANGLE_DELTA, rate, rd_stats, &best_angle_delta, &best_tx_size, &best_tx_type, #if CONFIG_INTRA_INTERP &best_filter, @@ -3377,15 +3375,14 @@ #if CONFIG_INTRA_INTERP if (FILTER_FAST_SEARCH && rd_stats->rate < INT_MAX) { - p_angle = mode_to_angle_map[mbmi->mode] + - best_angle_delta * av1_get_angle_step(bsize, 0); + p_angle = mode_to_angle_map[mbmi->mode] + best_angle_delta * ANGLE_STEP; if (av1_is_intra_filter_switchable(p_angle)) { for (filter = INTRA_FILTER_LINEAR + 1; filter < INTRA_FILTERS; ++filter) { mic->mbmi.intra_filter = filter; this_rd = calc_rd_given_intra_angle( cpi, x, bsize, mode_cost + cpi->intra_filter_cost[intra_filter_ctx][filter], - best_rd, best_angle_delta, max_angle_delta, rate, rd_stats, + best_rd, best_angle_delta, MAX_ANGLE_DELTA, rate, rd_stats, &best_angle_delta, &best_tx_size, &best_tx_type, &best_filter, &best_rd, best_model_rd); } @@ -3675,16 +3672,15 @@ #endif // CONFIG_FILTER_INTRA #if CONFIG_EXT_INTRA if (is_directional_mode) { - const int max_angle_delta = av1_get_max_angle_delta(bsize, 0); #if CONFIG_INTRA_INTERP - const int p_angle = mode_to_angle_map[mbmi->mode] + - mbmi->angle_delta[0] * av1_get_angle_step(bsize, 0); + const int p_angle = + mode_to_angle_map[mbmi->mode] + mbmi->angle_delta[0] * ANGLE_STEP; if (av1_is_intra_filter_switchable(p_angle)) this_rate += cpi->intra_filter_cost[intra_filter_ctx][mbmi->intra_filter]; #endif // CONFIG_INTRA_INTERP - this_rate += write_uniform_cost(2 * max_angle_delta + 1, - max_angle_delta + mbmi->angle_delta[0]); + this_rate += write_uniform_cost(2 * MAX_ANGLE_DELTA + 1, + MAX_ANGLE_DELTA + mbmi->angle_delta[0]); } #endif // CONFIG_EXT_INTRA this_rd = RDCOST(x->rdmult, x->rddiv, this_rate, this_distortion); @@ -4720,14 +4716,14 @@ MACROBLOCKD *const xd = &x->e_mbd; MB_MODE_INFO *mbmi = &xd->mi[0]->mbmi; int i, angle_delta, best_angle_delta = 0; - int64_t this_rd, best_rd_in, rd_cost[2 * (MAX_ANGLE_DELTA_UV + 2)]; + int64_t this_rd, best_rd_in, rd_cost[2 * (MAX_ANGLE_DELTA + 2)]; rd_stats->rate = INT_MAX; rd_stats->skip = 0; rd_stats->dist = INT64_MAX; - for (i = 0; i < 2 * (MAX_ANGLE_DELTA_UV + 2); ++i) rd_cost[i] = INT64_MAX; + for (i = 0; i < 2 * (MAX_ANGLE_DELTA + 2); ++i) rd_cost[i] = INT64_MAX; - for (angle_delta = 0; angle_delta <= MAX_ANGLE_DELTA_UV; angle_delta += 2) { + for (angle_delta = 0; angle_delta <= MAX_ANGLE_DELTA; angle_delta += 2) { for (i = 0; i < 2; ++i) { best_rd_in = (best_rd == INT64_MAX) ? INT64_MAX @@ -4746,7 +4742,7 @@ } assert(best_rd != INT64_MAX); - for (angle_delta = 1; angle_delta <= MAX_ANGLE_DELTA_UV; angle_delta += 2) { + for (angle_delta = 1; angle_delta <= MAX_ANGLE_DELTA; angle_delta += 2) { int64_t rd_thresh; for (i = 0; i < 2; ++i) { int skip_search = 0; @@ -4807,9 +4803,8 @@ #if CONFIG_EXT_INTRA mbmi->angle_delta[1] = 0; if (is_directional_mode) { - const int rate_overhead = - cpi->intra_uv_mode_cost[mbmi->mode][mode] + - write_uniform_cost(2 * MAX_ANGLE_DELTA_UV + 1, 0); + const int rate_overhead = cpi->intra_uv_mode_cost[mbmi->mode][mode] + + write_uniform_cost(2 * MAX_ANGLE_DELTA + 1, 0); if (!rd_pick_intra_angle_sbuv(cpi, x, bsize, rate_overhead, best_rd, &this_rate, &tokenonly_rd_stats)) continue; @@ -4829,9 +4824,8 @@ #if CONFIG_EXT_INTRA if (is_directional_mode) { - this_rate += - write_uniform_cost(2 * MAX_ANGLE_DELTA_UV + 1, - MAX_ANGLE_DELTA_UV + mbmi->angle_delta[1]); + this_rate += write_uniform_cost(2 * MAX_ANGLE_DELTA + 1, + MAX_ANGLE_DELTA + mbmi->angle_delta[1]); } #endif // CONFIG_EXT_INTRA #if CONFIG_FILTER_INTRA @@ -9412,8 +9406,8 @@ FILTER_INTRA_MODES, mbmi->filter_intra_mode_info.filter_intra_mode[0]); #if CONFIG_EXT_INTRA if (av1_is_directional_mode(mbmi->uv_mode, bsize)) { - rate2 += write_uniform_cost(2 * MAX_ANGLE_DELTA_UV + 1, - MAX_ANGLE_DELTA_UV + mbmi->angle_delta[1]); + rate2 += write_uniform_cost(2 * MAX_ANGLE_DELTA + 1, + MAX_ANGLE_DELTA + mbmi->angle_delta[1]); } #endif // CONFIG_EXT_INTRA if (mbmi->mode == DC_PRED) { @@ -10218,21 +10212,19 @@ } #if CONFIG_EXT_INTRA if (is_directional_mode) { - const int max_angle_delta = av1_get_max_angle_delta(bsize, 0); #if CONFIG_INTRA_INTERP - int p_angle; const int intra_filter_ctx = av1_get_pred_context_intra_interp(xd); - p_angle = mode_to_angle_map[mbmi->mode] + - mbmi->angle_delta[0] * av1_get_angle_step(bsize, 0); + const int p_angle = + mode_to_angle_map[mbmi->mode] + mbmi->angle_delta[0] * ANGLE_STEP; if (av1_is_intra_filter_switchable(p_angle)) rate2 += cpi->intra_filter_cost[intra_filter_ctx][mbmi->intra_filter]; #endif // CONFIG_INTRA_INTERP - rate2 += write_uniform_cost(2 * max_angle_delta + 1, - max_angle_delta + mbmi->angle_delta[0]); + rate2 += write_uniform_cost(2 * MAX_ANGLE_DELTA + 1, + MAX_ANGLE_DELTA + mbmi->angle_delta[0]); } if (mbmi->uv_mode != DC_PRED && mbmi->uv_mode != TM_PRED) { - rate2 += write_uniform_cost(2 * MAX_ANGLE_DELTA_UV + 1, - MAX_ANGLE_DELTA_UV + mbmi->angle_delta[1]); + rate2 += write_uniform_cost(2 * MAX_ANGLE_DELTA + 1, + MAX_ANGLE_DELTA + mbmi->angle_delta[1]); } #endif // CONFIG_EXT_INTRA #if CONFIG_FILTER_INTRA