Make alt-intra work with ext-intra
Change-Id: I2a814ba878a57c6b73f8f9e29bea6c7edfe7c789
diff --git a/av1/common/pred_common.c b/av1/common/pred_common.c
index c945ac3..e522725 100644
--- a/av1/common/pred_common.c
+++ b/av1/common/pred_common.c
@@ -12,6 +12,9 @@
#include "av1/common/common.h"
#include "av1/common/pred_common.h"
#include "av1/common/reconinter.h"
+#if CONFIG_EXT_INTRA
+#include "av1/common/reconintra.h"
+#endif // CONFIG_EXT_INTRA
#include "av1/common/seg_common.h"
// Returns a context number for the given MB prediction signal
@@ -112,7 +115,7 @@
default: break;
}
} else {
- if (mode != DC_PRED && mode != TM_PRED) {
+ if (av1_is_directional_mode(mode, ref_mbmi->sb_type)) {
int p_angle =
mode_to_angle_map[mode] + ref_mbmi->angle_delta[0] * ANGLE_STEP;
if (av1_is_intra_filter_switchable(p_angle)) {
diff --git a/av1/common/reconintra.c b/av1/common/reconintra.c
index b16fc5f..429d810 100644
--- a/av1/common/reconintra.c
+++ b/av1/common/reconintra.c
@@ -1251,8 +1251,7 @@
const uint16_t *above_ref = ref - ref_stride;
#if CONFIG_EXT_INTRA
int p_angle = 0;
- const int is_dr_mode = mode != DC_PRED && mode != TM_PRED &&
- xd->mi[0]->mbmi.sb_type >= BLOCK_8X8;
+ const int is_dr_mode = av1_is_directional_mode(mode, xd->mi[0]->mbmi.sb_type);
#endif // CONFIG_EXT_INTRA
#if CONFIG_FILTER_INTRA
const FILTER_INTRA_MODE_INFO *filter_intra_mode_info =
@@ -1411,8 +1410,7 @@
int need_above_left = extend_modes[mode] & NEED_ABOVELEFT;
#if CONFIG_EXT_INTRA
int p_angle = 0;
- const int is_dr_mode = mode != DC_PRED && mode != TM_PRED &&
- xd->mi[0]->mbmi.sb_type >= BLOCK_8X8;
+ const int is_dr_mode = av1_is_directional_mode(mode, xd->mi[0]->mbmi.sb_type);
#endif // CONFIG_EXT_INTRA
#if CONFIG_FILTER_INTRA
const FILTER_INTRA_MODE_INFO *filter_intra_mode_info =
@@ -1531,8 +1529,7 @@
}
#endif // CONFIG_FILTER_INTRA
#if CONFIG_EXT_INTRA
- if (mode != DC_PRED && mode != TM_PRED &&
- xd->mi[0]->mbmi.sb_type >= BLOCK_8X8) {
+ if (is_dr_mode) {
INTRA_FILTER filter = INTRA_FILTER_LINEAR;
if (plane == 0 && av1_is_intra_filter_switchable(p_angle))
filter = xd->mi[0]->mbmi.intra_filter;
diff --git a/av1/common/reconintra.h b/av1/common/reconintra.h
index 23bad1c..f585621 100644
--- a/av1/common/reconintra.h
+++ b/av1/common/reconintra.h
@@ -48,4 +48,15 @@
extern int av1_filter_intra_taps_4[TX_SIZES][INTRA_MODES][4];
#endif // CONFIG_FILTER_INTRA
+#if CONFIG_EXT_INTRA
+static INLINE int av1_is_directional_mode(PREDICTION_MODE mode,
+ BLOCK_SIZE bsize) {
+ return mode != DC_PRED && mode != TM_PRED &&
+#if CONFIG_ALT_INTRA
+ mode != SMOOTH_PRED &&
+#endif // CONFIG_ALT_INTRA
+ bsize >= BLOCK_8X8;
+}
+#endif // CONFIG_EXT_INTRA
+
#endif // AV1_COMMON_RECONINTRA_H_
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 0f5db59..3f45757 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -4079,11 +4079,11 @@
mbmi->uv_mode = mode;
#if CONFIG_EXT_INTRA
- is_directional_mode = (mode != DC_PRED && mode != TM_PRED);
+ is_directional_mode = av1_is_directional_mode(mode, mbmi->sb_type);
rate_overhead = cpi->intra_uv_mode_cost[mbmi->mode][mode] +
write_uniform_cost(2 * MAX_ANGLE_DELTAS + 1, 0);
mbmi->angle_delta[1] = 0;
- if (mbmi->sb_type >= BLOCK_8X8 && is_directional_mode) {
+ if (is_directional_mode) {
if (!rd_pick_intra_angle_sbuv(
cpi, x, &this_rate, &tokenonly_rd_stats.rate,
&tokenonly_rd_stats.dist, &tokenonly_rd_stats.skip, bsize,
@@ -4099,7 +4099,7 @@
}
this_rate =
tokenonly_rd_stats.rate + cpi->intra_uv_mode_cost[mbmi->mode][mode];
- if (mbmi->sb_type >= BLOCK_8X8 && is_directional_mode)
+ if (is_directional_mode)
this_rate += write_uniform_cost(2 * MAX_ANGLE_DELTAS + 1,
MAX_ANGLE_DELTAS + mbmi->angle_delta[1]);
#else