Respect --enable-angle-delta=0
It was observed that delta angles of directional intra modes
were getting evaluated in av1_rd_pick_intra_sby_mode() and
av1_handle_intra_y_mode() even when enable_angle_delta was
set to 0. This patch disallows the evaluation of delta angles
in these functions when enable_angle_delta is configured to 0.
Change-Id: I0ae4be95454ac655f4e0e05de258f2a3c752948d
diff --git a/av1/encoder/intra_mode_search.c b/av1/encoder/intra_mode_search.c
index 47f04f9..9b664ca 100644
--- a/av1/encoder/intra_mode_search.c
+++ b/av1/encoder/intra_mode_search.c
@@ -1185,6 +1185,7 @@
// function
int beat_best_rd = 0;
const int *bmode_costs;
+ const IntraModeCfg *const intra_mode_cfg = &cpi->oxcf.intra_mode_cfg;
PALETTE_MODE_INFO *const pmi = &mbmi->palette_mode_info;
const int try_palette =
cpi->oxcf.tool_cfg.enable_palette &&
@@ -1237,21 +1238,19 @@
int64_t this_distortion, this_rd;
is_diagonal_mode = av1_is_diagonal_mode(mbmi->mode);
- if (is_diagonal_mode && !cpi->oxcf.intra_mode_cfg.enable_diagonal_intra)
- continue;
+ if (is_diagonal_mode && !intra_mode_cfg->enable_diagonal_intra) continue;
if (av1_is_directional_mode(mbmi->mode) &&
- !cpi->oxcf.intra_mode_cfg.enable_directional_intra)
+ !intra_mode_cfg->enable_directional_intra)
continue;
// The smooth prediction mode appears to be more frequently picked
// than horizontal / vertical smooth prediction modes. Hence treat
// them differently in speed features.
- if ((!cpi->oxcf.intra_mode_cfg.enable_smooth_intra ||
+ if ((!intra_mode_cfg->enable_smooth_intra ||
cpi->sf.intra_sf.disable_smooth_intra) &&
(mbmi->mode == SMOOTH_H_PRED || mbmi->mode == SMOOTH_V_PRED))
continue;
- if (!cpi->oxcf.intra_mode_cfg.enable_smooth_intra &&
- mbmi->mode == SMOOTH_PRED)
+ if (!intra_mode_cfg->enable_smooth_intra && mbmi->mode == SMOOTH_PRED)
continue;
// The functionality of filter intra modes and smooth prediction
@@ -1261,8 +1260,7 @@
cpi->sf.intra_sf.prune_filter_intra_level == 0 &&
mbmi->mode == SMOOTH_PRED)
continue;
- if (!cpi->oxcf.intra_mode_cfg.enable_paeth_intra &&
- mbmi->mode == PAETH_PRED)
+ if (!intra_mode_cfg->enable_paeth_intra && mbmi->mode == PAETH_PRED)
continue;
// Skip the evaluation of modes that do not match with the winner mode in
@@ -1271,7 +1269,8 @@
is_directional_mode = av1_is_directional_mode(mbmi->mode);
if (is_directional_mode && directional_mode_skip_mask[mbmi->mode]) continue;
- if (is_directional_mode && av1_use_angle_delta(bsize) == 0 &&
+ if (is_directional_mode &&
+ !(av1_use_angle_delta(bsize) && intra_mode_cfg->enable_angle_delta) &&
mbmi->angle_delta[PLANE_TYPE_Y] != 0)
continue;
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index f1f5e78..5f9f274 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -5120,6 +5120,7 @@
int64_t yrd_threshold) {
const AV1_COMMON *const cm = &cpi->common;
const SPEED_FEATURES *const sf = &cpi->sf;
+ const IntraModeCfg *const intra_mode_cfg = &cpi->oxcf.intra_mode_cfg;
MACROBLOCKD *const xd = &x->e_mbd;
MB_MODE_INFO *const mbmi = xd->mi[0];
IntraModeSearchState *intra_search_state = &search_state->intra_search_state;
@@ -5153,16 +5154,16 @@
const THR_MODES mode_enum =
get_prediction_mode_idx(mbmi->mode, INTRA_FRAME, NONE_FRAME);
- if ((!cpi->oxcf.intra_mode_cfg.enable_smooth_intra ||
+ if ((!intra_mode_cfg->enable_smooth_intra ||
cpi->sf.intra_sf.disable_smooth_intra) &&
(mbmi->mode == SMOOTH_PRED || mbmi->mode == SMOOTH_H_PRED ||
mbmi->mode == SMOOTH_V_PRED))
continue;
- if (!cpi->oxcf.intra_mode_cfg.enable_paeth_intra &&
- mbmi->mode == PAETH_PRED)
+ if (!intra_mode_cfg->enable_paeth_intra && mbmi->mode == PAETH_PRED)
continue;
if (av1_is_directional_mode(mbmi->mode) &&
- av1_use_angle_delta(bsize) == 0 && mbmi->angle_delta[PLANE_TYPE_Y] != 0)
+ !(av1_use_angle_delta(bsize) && intra_mode_cfg->enable_angle_delta) &&
+ mbmi->angle_delta[PLANE_TYPE_Y] != 0)
continue;
const PREDICTION_MODE this_mode = mbmi->mode;