Refactor ext-intra
Miscellaneous changes. Mostly code simplification and cleanup.
Make luma max angle delta depend on block size, which is the
way it was before the nextgenv2 branch merge.
Also some fixes for compatibility of ext-intra and alt-intra.
Change-Id: I2ce869e6ba7dee765a8dc4802f5e88040db3df22
diff --git a/av1/common/blockd.h b/av1/common/blockd.h
index eb7f915..3c167d2 100644
--- a/av1/common/blockd.h
+++ b/av1/common/blockd.h
@@ -693,13 +693,31 @@
#endif // CONFIG_FILTER_INTRA
#if CONFIG_EXT_INTRA
-#define ANGLE_STEP 3
-#define MAX_ANGLE_DELTAS 3
+#define MAX_ANGLE_DELTA_UV 2
+#define ANGLE_STEP_UV 4
+
+static const uint8_t av1_angle_step_y[TX_SIZES] = {
+ 0, 4, 3, 3,
+};
+static const uint8_t av1_max_angle_delta_y[TX_SIZES] = {
+ 0, 2, 3, 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.
@@ -763,14 +781,19 @@
return filter_intra_mode_to_tx_type_lookup[filter_intra_mode];
#endif // CONFIG_FILTER_INTRA
#if CONFIG_EXT_INTRA
- if (mode == DC_PRED) {
- return DCT_DCT;
- } else if (mode == TM_PRED) {
- return ADST_ADST;
- } else {
+#if CONFIG_ALT_INTRA
+ if (mode == SMOOTH_PRED) return ADST_ADST;
+#endif // CONFIG_ALT_INTRA
+ if (mode == DC_PRED) return DCT_DCT;
+ if (mode == TM_PRED) return ADST_ADST;
+ {
int angle = mode_to_angle_map[mode];
+ const int angle_step = av1_get_angle_step(mbmi->sb_type, (int)plane_type);
+ assert(mode == D45_PRED || mode == D63_PRED || mode == D117_PRED ||
+ mode == D135_PRED || mode == D153_PRED || mode == D207_PRED ||
+ mode == V_PRED || mode == H_PRED);
if (mbmi->sb_type >= BLOCK_8X8)
- angle += mbmi->angle_delta[plane_type] * ANGLE_STEP;
+ angle += mbmi->angle_delta[plane_type] * angle_step;
assert(angle > 0 && angle < 270);
if (angle == 135)
return ADST_ADST;