]> granicus.if.org Git - libvpx/commitdiff
Add ALT_INTRA experiment.
authorUrvang Joshi <urvang@google.com>
Thu, 1 Sep 2016 19:03:20 +0000 (12:03 -0700)
committerUrvang Joshi <urvang@google.com>
Thu, 1 Sep 2016 19:03:20 +0000 (12:03 -0700)
When the experiment is ON, we use Paeth predictor instead of TM
predictor.

For derf set, this gives about 0.09% improvement overall, and 0.55%
improvement if all frames are forced to be intra-only.

Also, if the EXT_INTRA experiment is also on, the improvement overall
is 0.056%, and improvement if all frames are forced to be intra-only is
0.465%.

Change-Id: Id74e107ede70a8d2107fa14fcb3f44b23a437274

aom_dsp/aom_dsp_rtcd_defs.pl
aom_dsp/intrapred.c
av1/common/reconintra.c
configure
test/intrapred_test.cc
test/test_intra_pred_speed.cc

index 2afb3cd7a94f7e3ed6eb8eec05b8e7974b6df893..d8858900ec4d02f605ce670c76266b33d4beabd0 100644 (file)
@@ -86,8 +86,12 @@ specialize qw/aom_v_predictor_4x4 neon msa sse2/;
 add_proto qw/void aom_ve_predictor_4x4/, "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left";
 specialize qw/aom_ve_predictor_4x4/;
 
-add_proto qw/void aom_tm_predictor_4x4/, "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left";
-specialize qw/aom_tm_predictor_4x4 neon dspr2 msa sse2/;
+if ((aom_config("CONFIG_ALT_INTRA") eq "yes")) {
+  add_proto qw/void aom_paeth_predictor_4x4/, "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left";
+} else {
+  add_proto qw/void aom_tm_predictor_4x4/, "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left";
+  specialize qw/aom_tm_predictor_4x4 neon dspr2 msa sse2/;
+}  # CONFIG_ALT_INTRA
 
 add_proto qw/void aom_dc_predictor_4x4/, "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left";
 specialize qw/aom_dc_predictor_4x4 dspr2 msa neon sse2/;
@@ -134,8 +138,12 @@ specialize qw/aom_d153_predictor_8x8 ssse3/;
 add_proto qw/void aom_v_predictor_8x8/, "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left";
 specialize qw/aom_v_predictor_8x8 neon msa sse2/;
 
-add_proto qw/void aom_tm_predictor_8x8/, "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left";
-specialize qw/aom_tm_predictor_8x8 neon dspr2 msa sse2/;
+if ((aom_config("CONFIG_ALT_INTRA") eq "yes")) {
+  add_proto qw/void aom_paeth_predictor_8x8/, "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left";
+} else {
+  add_proto qw/void aom_tm_predictor_8x8/, "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left";
+  specialize qw/aom_tm_predictor_8x8 neon dspr2 msa sse2/;
+}  # CONFIG_ALT_INTRA
 
 add_proto qw/void aom_dc_predictor_8x8/, "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left";
 specialize qw/aom_dc_predictor_8x8 dspr2 neon msa sse2/;
@@ -182,8 +190,13 @@ specialize qw/aom_d153_predictor_16x16 ssse3/;
 add_proto qw/void aom_v_predictor_16x16/, "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left";
 specialize qw/aom_v_predictor_16x16 neon msa sse2/;
 
-add_proto qw/void aom_tm_predictor_16x16/, "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left";
-specialize qw/aom_tm_predictor_16x16 neon msa sse2/;
+if ((aom_config("CONFIG_ALT_INTRA") eq "yes")) {
+  add_proto qw/void aom_paeth_predictor_16x16/, "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left";
+} else {
+  add_proto qw/void aom_tm_predictor_16x16/, "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left";
+  specialize qw/aom_tm_predictor_16x16 neon msa sse2/;
+}  # CONFIG_ALT_INTRA
+
 
 add_proto qw/void aom_dc_predictor_16x16/, "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left";
 specialize qw/aom_dc_predictor_16x16 dspr2 neon msa sse2/;
@@ -230,8 +243,13 @@ specialize qw/aom_d153_predictor_32x32 ssse3/;
 add_proto qw/void aom_v_predictor_32x32/, "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left";
 specialize qw/aom_v_predictor_32x32 neon msa sse2/;
 
-add_proto qw/void aom_tm_predictor_32x32/, "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left";
-specialize qw/aom_tm_predictor_32x32 neon msa sse2/;
+if ((aom_config("CONFIG_ALT_INTRA") eq "yes")) {
+  add_proto qw/void aom_paeth_predictor_32x32/, "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left";
+} else {
+  add_proto qw/void aom_tm_predictor_32x32/, "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left";
+  specialize qw/aom_tm_predictor_32x32 neon msa sse2/;
+}  # CONFIG_ALT_INTRA
+
 
 add_proto qw/void aom_dc_predictor_32x32/, "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left";
 specialize qw/aom_dc_predictor_32x32 msa neon sse2/;
@@ -280,8 +298,13 @@ if (aom_config("CONFIG_AOM_HIGHBITDEPTH") eq "yes") {
   add_proto qw/void aom_highbd_v_predictor_4x4/, "uint16_t *dst, ptrdiff_t y_stride, const uint16_t *above, const uint16_t *left, int bd";
   specialize qw/aom_highbd_v_predictor_4x4 sse2/;
 
-  add_proto qw/void aom_highbd_tm_predictor_4x4/, "uint16_t *dst, ptrdiff_t y_stride, const uint16_t *above, const uint16_t *left, int bd";
-  specialize qw/aom_highbd_tm_predictor_4x4 sse2/;
+  if ((aom_config("CONFIG_ALT_INTRA") eq "yes")) {
+    add_proto qw/void aom_highbd_paeth_predictor_4x4/, "uint16_t *dst, ptrdiff_t y_stride, const uint16_t *above, const uint16_t *left, int bd";
+  } else {
+    add_proto qw/void aom_highbd_tm_predictor_4x4/, "uint16_t *dst, ptrdiff_t y_stride, const uint16_t *above, const uint16_t *left, int bd";
+    specialize qw/aom_highbd_tm_predictor_4x4 sse2/;
+  }  # CONFIG_ALT_INTRA
+
 
   add_proto qw/void aom_highbd_dc_predictor_4x4/, "uint16_t *dst, ptrdiff_t y_stride, const uint16_t *above, const uint16_t *left, int bd";
   specialize qw/aom_highbd_dc_predictor_4x4 sse2/;
@@ -328,8 +351,12 @@ if (aom_config("CONFIG_AOM_HIGHBITDEPTH") eq "yes") {
   add_proto qw/void aom_highbd_v_predictor_8x8/, "uint16_t *dst, ptrdiff_t y_stride, const uint16_t *above, const uint16_t *left, int bd";
   specialize qw/aom_highbd_v_predictor_8x8 sse2/;
 
-  add_proto qw/void aom_highbd_tm_predictor_8x8/, "uint16_t *dst, ptrdiff_t y_stride, const uint16_t *above, const uint16_t *left, int bd";
-  specialize qw/aom_highbd_tm_predictor_8x8 sse2/;
+  if ((aom_config("CONFIG_ALT_INTRA") eq "yes")) {
+    add_proto qw/void aom_highbd_paeth_predictor_8x8/, "uint16_t *dst, ptrdiff_t y_stride, const uint16_t *above, const uint16_t *left, int bd";
+  } else {
+    add_proto qw/void aom_highbd_tm_predictor_8x8/, "uint16_t *dst, ptrdiff_t y_stride, const uint16_t *above, const uint16_t *left, int bd";
+    specialize qw/aom_highbd_tm_predictor_8x8 sse2/;
+  }  # CONFIG_ALT_INTRA
 
   add_proto qw/void aom_highbd_dc_predictor_8x8/, "uint16_t *dst, ptrdiff_t y_stride, const uint16_t *above, const uint16_t *left, int bd";
   specialize qw/aom_highbd_dc_predictor_8x8 sse2/;;
@@ -376,8 +403,12 @@ if (aom_config("CONFIG_AOM_HIGHBITDEPTH") eq "yes") {
   add_proto qw/void aom_highbd_v_predictor_16x16/, "uint16_t *dst, ptrdiff_t y_stride, const uint16_t *above, const uint16_t *left, int bd";
   specialize qw/aom_highbd_v_predictor_16x16 sse2/;
 
-  add_proto qw/void aom_highbd_tm_predictor_16x16/, "uint16_t *dst, ptrdiff_t y_stride, const uint16_t *above, const uint16_t *left, int bd";
-  specialize qw/aom_highbd_tm_predictor_16x16 sse2/;
+  if ((aom_config("CONFIG_ALT_INTRA") eq "yes")) {
+    add_proto qw/void aom_highbd_paeth_predictor_16x16/, "uint16_t *dst, ptrdiff_t y_stride, const uint16_t *above, const uint16_t *left, int bd";
+  } else {
+    add_proto qw/void aom_highbd_tm_predictor_16x16/, "uint16_t *dst, ptrdiff_t y_stride, const uint16_t *above, const uint16_t *left, int bd";
+    specialize qw/aom_highbd_tm_predictor_16x16 sse2/;
+  }  # CONFIG_ALT_INTRA
 
   add_proto qw/void aom_highbd_dc_predictor_16x16/, "uint16_t *dst, ptrdiff_t y_stride, const uint16_t *above, const uint16_t *left, int bd";
   specialize qw/aom_highbd_dc_predictor_16x16 sse2/;
@@ -424,8 +455,12 @@ if (aom_config("CONFIG_AOM_HIGHBITDEPTH") eq "yes") {
   add_proto qw/void aom_highbd_v_predictor_32x32/, "uint16_t *dst, ptrdiff_t y_stride, const uint16_t *above, const uint16_t *left, int bd";
   specialize qw/aom_highbd_v_predictor_32x32 sse2/;
 
-  add_proto qw/void aom_highbd_tm_predictor_32x32/, "uint16_t *dst, ptrdiff_t y_stride, const uint16_t *above, const uint16_t *left, int bd";
-  specialize qw/aom_highbd_tm_predictor_32x32 sse2/;
+  if ((aom_config("CONFIG_ALT_INTRA") eq "yes")) {
+    add_proto qw/void aom_highbd_paeth_predictor_32x32/, "uint16_t *dst, ptrdiff_t y_stride, const uint16_t *above, const uint16_t *left, int bd";
+  } else {
+    add_proto qw/void aom_highbd_tm_predictor_32x32/, "uint16_t *dst, ptrdiff_t y_stride, const uint16_t *above, const uint16_t *left, int bd";
+    specialize qw/aom_highbd_tm_predictor_32x32 sse2/;
+  }  # CONFIG_ALT_INTRA
 
   add_proto qw/void aom_highbd_dc_predictor_32x32/, "uint16_t *dst, ptrdiff_t y_stride, const uint16_t *above, const uint16_t *left, int bd";
   specialize qw/aom_highbd_dc_predictor_32x32 sse2/;
index df4ec800d32245b6497fe247dc6df01ee2d55ee0..52f0b35adbd9fcc9521b7f8279dfe19842e16f6c 100644 (file)
@@ -218,6 +218,36 @@ static INLINE void h_predictor(uint8_t *dst, ptrdiff_t stride, int bs,
   }
 }
 
+#if CONFIG_ALT_INTRA
+static INLINE int abs_diff(int a, int b) { return (a > b) ? a - b : b - a; }
+
+static INLINE uint16_t paeth_predictor_single(uint16_t left, uint16_t top,
+                                              uint16_t top_left) {
+  const int base = top + left - top_left;
+  const int p_left = abs_diff(base, left);
+  const int p_top = abs_diff(base, top);
+  const int p_top_left = abs_diff(base, top_left);
+
+  // Return nearest to base of left, top and top_left.
+  return (p_left <= p_top && p_left <= p_top_left)
+             ? left
+             : (p_top <= p_top_left) ? top : top_left;
+}
+
+static INLINE void paeth_predictor(uint8_t *dst, ptrdiff_t stride, int bs,
+                                   const uint8_t *above, const uint8_t *left) {
+  int r, c;
+  const uint8_t ytop_left = above[-1];
+
+  for (r = 0; r < bs; r++) {
+    for (c = 0; c < bs; c++)
+      dst[c] = (uint8_t)paeth_predictor_single(left[r], above[c], ytop_left);
+    dst += stride;
+  }
+}
+
+#else
+
 static INLINE void tm_predictor(uint8_t *dst, ptrdiff_t stride, int bs,
                                 const uint8_t *above, const uint8_t *left) {
   int r, c;
@@ -229,6 +259,7 @@ static INLINE void tm_predictor(uint8_t *dst, ptrdiff_t stride, int bs,
     dst += stride;
   }
 }
+#endif  // CONFIG_ALT_INTRA
 
 static INLINE void dc_128_predictor(uint8_t *dst, ptrdiff_t stride, int bs,
                                     const uint8_t *above, const uint8_t *left) {
@@ -688,6 +719,22 @@ static INLINE void highbd_h_predictor(uint16_t *dst, ptrdiff_t stride, int bs,
   }
 }
 
+#if CONFIG_ALT_INTRA
+static INLINE void highbd_paeth_predictor(uint16_t *dst, ptrdiff_t stride,
+                                          int bs, const uint16_t *above,
+                                          const uint16_t *left, int bd) {
+  int r, c;
+  const uint16_t ytop_left = above[-1];
+  (void)bd;
+
+  for (r = 0; r < bs; r++) {
+    for (c = 0; c < bs; c++)
+      dst[c] = paeth_predictor_single(left[r], above[c], ytop_left);
+    dst += stride;
+  }
+}
+
+#else
 static INLINE void highbd_tm_predictor(uint16_t *dst, ptrdiff_t stride, int bs,
                                        const uint16_t *above,
                                        const uint16_t *left, int bd) {
@@ -701,6 +748,7 @@ static INLINE void highbd_tm_predictor(uint16_t *dst, ptrdiff_t stride, int bs,
     dst += stride;
   }
 }
+#endif  // CONFIG_ALT_INTRA
 
 static INLINE void highbd_dc_128_predictor(uint16_t *dst, ptrdiff_t stride,
                                            int bs, const uint16_t *above,
@@ -830,7 +878,11 @@ intra_pred_no_4x4(d135)
 intra_pred_no_4x4(d153)
 intra_pred_allsizes(v)
 intra_pred_allsizes(h)
+#if CONFIG_ALT_INTRA
+intra_pred_allsizes(paeth)
+#else
 intra_pred_allsizes(tm)
+#endif  // CONFIG_ALT_INTRA
 intra_pred_allsizes(dc_128)
 intra_pred_allsizes(dc_left)
 intra_pred_allsizes(dc_top)
index 3c08ac450777ae165ee9d6fd1deca9575d7b9747..8078f853fc3a76720862ea64e5b43d5dee9e7632 100644 (file)
@@ -335,7 +335,12 @@ static void av1_init_intra_predictors_internal(void) {
   INIT_ALL_SIZES(pred[D117_PRED], d117);
   INIT_ALL_SIZES(pred[D135_PRED], d135);
   INIT_ALL_SIZES(pred[D153_PRED], d153);
+
+#if CONFIG_ALT_INTRA
+  INIT_ALL_SIZES(pred[TM_PRED], paeth);
+#else
   INIT_ALL_SIZES(pred[TM_PRED], tm);
+#endif  // CONFIG_ALT_INTRA
 
   INIT_ALL_SIZES(dc_pred[0][0], dc_128);
   INIT_ALL_SIZES(dc_pred[0][1], dc_top);
@@ -351,7 +356,12 @@ static void av1_init_intra_predictors_internal(void) {
   INIT_ALL_SIZES(pred_high[D117_PRED], highbd_d117);
   INIT_ALL_SIZES(pred_high[D135_PRED], highbd_d135);
   INIT_ALL_SIZES(pred_high[D153_PRED], highbd_d153);
+
+#if CONFIG_ALT_INTRA
+  INIT_ALL_SIZES(pred_high[TM_PRED], highbd_paeth);
+#else
   INIT_ALL_SIZES(pred_high[TM_PRED], highbd_tm);
+#endif  // CONFIG_ALT_INTRA
 
   INIT_ALL_SIZES(dc_pred_high[0][0], highbd_dc_128);
   INIT_ALL_SIZES(dc_pred_high[0][1], highbd_dc_top);
index 3a7cca853026134a5af573bbba275353e7e3332d..c96691ba34accb6d179ac3b66d5720099f15db80 100755 (executable)
--- a/configure
+++ b/configure
@@ -276,6 +276,7 @@ EXPERIMENT_LIST="
     entropy
     bidir_pred
     bitstream_debug
+    alt_intra
 "
 CONFIG_LIST="
     dependency_tracking
index efa57f79191ebc1d2a097300a12436ed40d83d39..e635234096f041c80cd0b5125817cb84e1179715 100644 (file)
@@ -129,10 +129,13 @@ INSTANTIATE_TEST_CASE_P(
     SSE2_TO_C_8, AV1IntraPredTest,
     ::testing::Values(IntraPredFunc(&aom_highbd_dc_predictor_32x32_sse2,
                                     &aom_highbd_dc_predictor_32x32_c, 32, 8),
+#if !CONFIG_ALT_INTRA
                       IntraPredFunc(&aom_highbd_tm_predictor_16x16_sse2,
                                     &aom_highbd_tm_predictor_16x16_c, 16, 8),
                       IntraPredFunc(&aom_highbd_tm_predictor_32x32_sse2,
                                     &aom_highbd_tm_predictor_32x32_c, 32, 8),
+#endif  // !CONFIG_ALT_INTRA
+
                       IntraPredFunc(&aom_highbd_dc_predictor_4x4_sse2,
                                     &aom_highbd_dc_predictor_4x4_c, 4, 8),
                       IntraPredFunc(&aom_highbd_dc_predictor_8x8_sse2,
@@ -146,20 +149,26 @@ INSTANTIATE_TEST_CASE_P(
                       IntraPredFunc(&aom_highbd_v_predictor_16x16_sse2,
                                     &aom_highbd_v_predictor_16x16_c, 16, 8),
                       IntraPredFunc(&aom_highbd_v_predictor_32x32_sse2,
-                                    &aom_highbd_v_predictor_32x32_c, 32, 8),
+                                    &aom_highbd_v_predictor_32x32_c, 32, 8)
+#if !CONFIG_ALT_INTRA
+                          ,
                       IntraPredFunc(&aom_highbd_tm_predictor_4x4_sse2,
                                     &aom_highbd_tm_predictor_4x4_c, 4, 8),
                       IntraPredFunc(&aom_highbd_tm_predictor_8x8_sse2,
-                                    &aom_highbd_tm_predictor_8x8_c, 8, 8)));
+                                    &aom_highbd_tm_predictor_8x8_c, 8, 8)
+#endif  // !CONFIG_ALT_INTRA
+                          ));
 
 INSTANTIATE_TEST_CASE_P(
     SSE2_TO_C_10, AV1IntraPredTest,
     ::testing::Values(IntraPredFunc(&aom_highbd_dc_predictor_32x32_sse2,
                                     &aom_highbd_dc_predictor_32x32_c, 32, 10),
+#if !CONFIG_ALT_INTRA
                       IntraPredFunc(&aom_highbd_tm_predictor_16x16_sse2,
                                     &aom_highbd_tm_predictor_16x16_c, 16, 10),
                       IntraPredFunc(&aom_highbd_tm_predictor_32x32_sse2,
                                     &aom_highbd_tm_predictor_32x32_c, 32, 10),
+#endif  // !CONFIG_ALT_INTRA
                       IntraPredFunc(&aom_highbd_dc_predictor_4x4_sse2,
                                     &aom_highbd_dc_predictor_4x4_c, 4, 10),
                       IntraPredFunc(&aom_highbd_dc_predictor_8x8_sse2,
@@ -173,20 +182,26 @@ INSTANTIATE_TEST_CASE_P(
                       IntraPredFunc(&aom_highbd_v_predictor_16x16_sse2,
                                     &aom_highbd_v_predictor_16x16_c, 16, 10),
                       IntraPredFunc(&aom_highbd_v_predictor_32x32_sse2,
-                                    &aom_highbd_v_predictor_32x32_c, 32, 10),
+                                    &aom_highbd_v_predictor_32x32_c, 32, 10)
+#if !CONFIG_ALT_INTRA
+                          ,
                       IntraPredFunc(&aom_highbd_tm_predictor_4x4_sse2,
                                     &aom_highbd_tm_predictor_4x4_c, 4, 10),
                       IntraPredFunc(&aom_highbd_tm_predictor_8x8_sse2,
-                                    &aom_highbd_tm_predictor_8x8_c, 8, 10)));
+                                    &aom_highbd_tm_predictor_8x8_c, 8, 10)
+#endif  // !CONFIG_ALT_INTRA
+                          ));
 
 INSTANTIATE_TEST_CASE_P(
     SSE2_TO_C_12, AV1IntraPredTest,
     ::testing::Values(IntraPredFunc(&aom_highbd_dc_predictor_32x32_sse2,
                                     &aom_highbd_dc_predictor_32x32_c, 32, 12),
+#if !CONFIG_ALT_INTRA
                       IntraPredFunc(&aom_highbd_tm_predictor_16x16_sse2,
                                     &aom_highbd_tm_predictor_16x16_c, 16, 12),
                       IntraPredFunc(&aom_highbd_tm_predictor_32x32_sse2,
                                     &aom_highbd_tm_predictor_32x32_c, 32, 12),
+#endif  // !CONFIG_ALT_INTRA
                       IntraPredFunc(&aom_highbd_dc_predictor_4x4_sse2,
                                     &aom_highbd_dc_predictor_4x4_c, 4, 12),
                       IntraPredFunc(&aom_highbd_dc_predictor_8x8_sse2,
@@ -200,11 +215,15 @@ INSTANTIATE_TEST_CASE_P(
                       IntraPredFunc(&aom_highbd_v_predictor_16x16_sse2,
                                     &aom_highbd_v_predictor_16x16_c, 16, 12),
                       IntraPredFunc(&aom_highbd_v_predictor_32x32_sse2,
-                                    &aom_highbd_v_predictor_32x32_c, 32, 12),
+                                    &aom_highbd_v_predictor_32x32_c, 32, 12)
+#if !CONFIG_ALT_INTRA
+                          ,
                       IntraPredFunc(&aom_highbd_tm_predictor_4x4_sse2,
                                     &aom_highbd_tm_predictor_4x4_c, 4, 12),
                       IntraPredFunc(&aom_highbd_tm_predictor_8x8_sse2,
-                                    &aom_highbd_tm_predictor_8x8_c, 8, 12)));
+                                    &aom_highbd_tm_predictor_8x8_c, 8, 12)
+#endif  // !CONFIG_ALT_INTRA
+                          ));
 
 #endif  // CONFIG_AOM_HIGHBITDEPTH
 #endif  // HAVE_SSE2
index 5f08decc10dced5ccf277d9ad06355293a695e33..cd1e2a1123607f8e444b969bc6f3f731050b3b7b 100644 (file)
@@ -161,7 +161,13 @@ INTRA_PRED_TEST(C, TestIntraPred4, aom_dc_predictor_4x4_c,
                 aom_h_predictor_4x4_c, aom_d45_predictor_4x4_c,
                 aom_d135_predictor_4x4_c, aom_d117_predictor_4x4_c,
                 aom_d153_predictor_4x4_c, aom_d207_predictor_4x4_c,
-                aom_d63_predictor_4x4_c, aom_tm_predictor_4x4_c)
+                aom_d63_predictor_4x4_c,
+#if CONFIG_ALT_INTRA
+                aom_paeth_predictor_4x4_c
+#else
+                aom_tm_predictor_4x4_c
+#endif  // CONFIG_ALT_INTRA
+                )
 
 #if HAVE_SSE2
 INTRA_PRED_TEST(SSE2, TestIntraPred4, aom_dc_predictor_4x4_sse2,
@@ -169,7 +175,12 @@ INTRA_PRED_TEST(SSE2, TestIntraPred4, aom_dc_predictor_4x4_sse2,
                 aom_dc_128_predictor_4x4_sse2, aom_v_predictor_4x4_sse2,
                 aom_h_predictor_4x4_sse2, aom_d45_predictor_4x4_sse2, NULL,
                 NULL, NULL, aom_d207_predictor_4x4_sse2, NULL,
-                aom_tm_predictor_4x4_sse2)
+#if CONFIG_ALT_INTRA
+                NULL
+#else
+                aom_tm_predictor_4x4_sse2
+#endif  // CONFIG_ALT_INTRA
+                )
 #endif  // HAVE_SSE2
 
 #if HAVE_SSSE3
@@ -181,7 +192,13 @@ INTRA_PRED_TEST(SSSE3, TestIntraPred4, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 #if HAVE_DSPR2
 INTRA_PRED_TEST(DSPR2, TestIntraPred4, aom_dc_predictor_4x4_dspr2, NULL, NULL,
                 NULL, NULL, aom_h_predictor_4x4_dspr2, NULL, NULL, NULL, NULL,
-                NULL, NULL, aom_tm_predictor_4x4_dspr2)
+                NULL, NULL,
+#if CONFIG_ALT_INTRA
+                NULL
+#else
+                aom_tm_predictor_4x4_dspr2
+#endif  // CONFIG_ALT_INTRA
+                )
 #endif  // HAVE_DSPR2
 
 #if HAVE_NEON
@@ -190,7 +207,12 @@ INTRA_PRED_TEST(NEON, TestIntraPred4, aom_dc_predictor_4x4_neon,
                 aom_dc_128_predictor_4x4_neon, aom_v_predictor_4x4_neon,
                 aom_h_predictor_4x4_neon, aom_d45_predictor_4x4_neon,
                 aom_d135_predictor_4x4_neon, NULL, NULL, NULL, NULL,
-                aom_tm_predictor_4x4_neon)
+#if CONFIG_ALT_INTRA
+                NULL
+#else
+                aom_tm_predictor_4x4_neon
+#endif  // CONFIG_ALT_INTRA
+                )
 #endif  // HAVE_NEON
 
 #if HAVE_MSA
@@ -198,7 +220,12 @@ INTRA_PRED_TEST(MSA, TestIntraPred4, aom_dc_predictor_4x4_msa,
                 aom_dc_left_predictor_4x4_msa, aom_dc_top_predictor_4x4_msa,
                 aom_dc_128_predictor_4x4_msa, aom_v_predictor_4x4_msa,
                 aom_h_predictor_4x4_msa, NULL, NULL, NULL, NULL, NULL, NULL,
-                aom_tm_predictor_4x4_msa)
+#if CONFIG_ALT_INTRA
+                NULL
+#else
+                aom_tm_predictor_4x4_msa
+#endif  // CONFIG_ALT_INTRA
+                )
 #endif  // HAVE_MSA
 
 // -----------------------------------------------------------------------------
@@ -210,14 +237,26 @@ INTRA_PRED_TEST(C, TestIntraPred8, aom_dc_predictor_8x8_c,
                 aom_h_predictor_8x8_c, aom_d45_predictor_8x8_c,
                 aom_d135_predictor_8x8_c, aom_d117_predictor_8x8_c,
                 aom_d153_predictor_8x8_c, aom_d207_predictor_8x8_c,
-                aom_d63_predictor_8x8_c, aom_tm_predictor_8x8_c)
+                aom_d63_predictor_8x8_c,
+#if CONFIG_ALT_INTRA
+                aom_paeth_predictor_8x8_c
+#else
+                aom_tm_predictor_8x8_c
+#endif  // CONFIG_ALT_INTRA
+                )
 
 #if HAVE_SSE2
 INTRA_PRED_TEST(SSE2, TestIntraPred8, aom_dc_predictor_8x8_sse2,
                 aom_dc_left_predictor_8x8_sse2, aom_dc_top_predictor_8x8_sse2,
                 aom_dc_128_predictor_8x8_sse2, aom_v_predictor_8x8_sse2,
                 aom_h_predictor_8x8_sse2, aom_d45_predictor_8x8_sse2, NULL,
-                NULL, NULL, NULL, NULL, aom_tm_predictor_8x8_sse2)
+                NULL, NULL, NULL, NULL,
+#if CONFIG_ALT_INTRA
+                NULL
+#else
+                aom_tm_predictor_8x8_sse2
+#endif  // CONFIG_ALT_INTRA
+                )
 #endif  // HAVE_SSE2
 
 #if HAVE_SSSE3
@@ -229,7 +268,13 @@ INTRA_PRED_TEST(SSSE3, TestIntraPred8, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 #if HAVE_DSPR2
 INTRA_PRED_TEST(DSPR2, TestIntraPred8, aom_dc_predictor_8x8_dspr2, NULL, NULL,
                 NULL, NULL, aom_h_predictor_8x8_dspr2, NULL, NULL, NULL, NULL,
-                NULL, NULL, aom_tm_predictor_8x8_dspr2)
+                NULL, NULL,
+#if CONFIG_ALT_INTRA
+                NULL
+#else
+                aom_tm_predictor_8x8_dspr2
+#endif  // CONFIG_ALT_INTRA
+                )
 #endif  // HAVE_DSPR2
 
 #if HAVE_NEON
@@ -237,7 +282,13 @@ INTRA_PRED_TEST(NEON, TestIntraPred8, aom_dc_predictor_8x8_neon,
                 aom_dc_left_predictor_8x8_neon, aom_dc_top_predictor_8x8_neon,
                 aom_dc_128_predictor_8x8_neon, aom_v_predictor_8x8_neon,
                 aom_h_predictor_8x8_neon, aom_d45_predictor_8x8_neon, NULL,
-                NULL, NULL, NULL, NULL, aom_tm_predictor_8x8_neon)
+                NULL, NULL, NULL, NULL,
+#if CONFIG_ALT_INTRA
+                NULL
+#else
+                aom_tm_predictor_8x8_neon
+#endif  // CONFIG_ALT_INTRA
+                )
 
 #endif  // HAVE_NEON
 
@@ -246,7 +297,12 @@ INTRA_PRED_TEST(MSA, TestIntraPred8, aom_dc_predictor_8x8_msa,
                 aom_dc_left_predictor_8x8_msa, aom_dc_top_predictor_8x8_msa,
                 aom_dc_128_predictor_8x8_msa, aom_v_predictor_8x8_msa,
                 aom_h_predictor_8x8_msa, NULL, NULL, NULL, NULL, NULL, NULL,
-                aom_tm_predictor_8x8_msa)
+#if CONFIG_ALT_INTRA
+                NULL
+#else
+                aom_tm_predictor_8x8_msa
+#endif  // CONFIG_ALT_INTRA
+                )
 #endif  // HAVE_MSA
 
 // -----------------------------------------------------------------------------
@@ -258,7 +314,13 @@ INTRA_PRED_TEST(C, TestIntraPred16, aom_dc_predictor_16x16_c,
                 aom_h_predictor_16x16_c, aom_d45_predictor_16x16_c,
                 aom_d135_predictor_16x16_c, aom_d117_predictor_16x16_c,
                 aom_d153_predictor_16x16_c, aom_d207_predictor_16x16_c,
-                aom_d63_predictor_16x16_c, aom_tm_predictor_16x16_c)
+                aom_d63_predictor_16x16_c,
+#if CONFIG_ALT_INTRA
+                aom_paeth_predictor_16x16_c
+#else
+                aom_tm_predictor_16x16_c
+#endif  // CONFIG_ALT_INTRA
+                )
 
 #if HAVE_SSE2
 INTRA_PRED_TEST(SSE2, TestIntraPred16, aom_dc_predictor_16x16_sse2,
@@ -266,7 +328,12 @@ INTRA_PRED_TEST(SSE2, TestIntraPred16, aom_dc_predictor_16x16_sse2,
                 aom_dc_top_predictor_16x16_sse2,
                 aom_dc_128_predictor_16x16_sse2, aom_v_predictor_16x16_sse2,
                 aom_h_predictor_16x16_sse2, NULL, NULL, NULL, NULL, NULL, NULL,
-                aom_tm_predictor_16x16_sse2)
+#if CONFIG_ALT_INTRA
+                NULL
+#else
+                aom_tm_predictor_16x16_sse2
+#endif  // CONFIG_ALT_INTRA
+                )
 #endif  // HAVE_SSE2
 
 #if HAVE_SSSE3
@@ -288,7 +355,13 @@ INTRA_PRED_TEST(NEON, TestIntraPred16, aom_dc_predictor_16x16_neon,
                 aom_dc_top_predictor_16x16_neon,
                 aom_dc_128_predictor_16x16_neon, aom_v_predictor_16x16_neon,
                 aom_h_predictor_16x16_neon, aom_d45_predictor_16x16_neon, NULL,
-                NULL, NULL, NULL, NULL, aom_tm_predictor_16x16_neon)
+                NULL, NULL, NULL, NULL,
+#if CONFIG_ALT_INTRA
+                NULL
+#else
+                aom_tm_predictor_16x16_neon
+#endif  // CONFIG_ALT_INTRA
+                )
 #endif  // HAVE_NEON
 
 #if HAVE_MSA
@@ -296,7 +369,12 @@ INTRA_PRED_TEST(MSA, TestIntraPred16, aom_dc_predictor_16x16_msa,
                 aom_dc_left_predictor_16x16_msa, aom_dc_top_predictor_16x16_msa,
                 aom_dc_128_predictor_16x16_msa, aom_v_predictor_16x16_msa,
                 aom_h_predictor_16x16_msa, NULL, NULL, NULL, NULL, NULL, NULL,
-                aom_tm_predictor_16x16_msa)
+#if CONFIG_ALT_INTRA
+                NULL
+#else
+                aom_tm_predictor_16x16_msa
+#endif  // CONFIG_ALT_INTRA
+                )
 #endif  // HAVE_MSA
 
 // -----------------------------------------------------------------------------
@@ -308,7 +386,13 @@ INTRA_PRED_TEST(C, TestIntraPred32, aom_dc_predictor_32x32_c,
                 aom_h_predictor_32x32_c, aom_d45_predictor_32x32_c,
                 aom_d135_predictor_32x32_c, aom_d117_predictor_32x32_c,
                 aom_d153_predictor_32x32_c, aom_d207_predictor_32x32_c,
-                aom_d63_predictor_32x32_c, aom_tm_predictor_32x32_c)
+                aom_d63_predictor_32x32_c,
+#if CONFIG_ALT_INTRA
+                aom_paeth_predictor_32x32_c
+#else
+                aom_tm_predictor_32x32_c
+#endif  // CONFIG_ALT_INTRA
+                )
 
 #if HAVE_SSE2
 INTRA_PRED_TEST(SSE2, TestIntraPred32, aom_dc_predictor_32x32_sse2,
@@ -316,7 +400,12 @@ INTRA_PRED_TEST(SSE2, TestIntraPred32, aom_dc_predictor_32x32_sse2,
                 aom_dc_top_predictor_32x32_sse2,
                 aom_dc_128_predictor_32x32_sse2, aom_v_predictor_32x32_sse2,
                 aom_h_predictor_32x32_sse2, NULL, NULL, NULL, NULL, NULL, NULL,
-                aom_tm_predictor_32x32_sse2)
+#if CONFIG_ALT_INTRA
+                NULL
+#else
+                aom_tm_predictor_32x32_sse2
+#endif  // CONFIG_ALT_INTRA
+                )
 #endif  // HAVE_SSE2
 
 #if HAVE_SSSE3
@@ -332,7 +421,12 @@ INTRA_PRED_TEST(NEON, TestIntraPred32, aom_dc_predictor_32x32_neon,
                 aom_dc_top_predictor_32x32_neon,
                 aom_dc_128_predictor_32x32_neon, aom_v_predictor_32x32_neon,
                 aom_h_predictor_32x32_neon, NULL, NULL, NULL, NULL, NULL, NULL,
-                aom_tm_predictor_32x32_neon)
+#if CONFIG_ALT_INTRA
+                NULL
+#else
+                aom_tm_predictor_32x32_neon
+#endif  // CONFIG_ALT_INTRA
+                )
 #endif  // HAVE_NEON
 
 #if HAVE_MSA
@@ -340,7 +434,12 @@ INTRA_PRED_TEST(MSA, TestIntraPred32, aom_dc_predictor_32x32_msa,
                 aom_dc_left_predictor_32x32_msa, aom_dc_top_predictor_32x32_msa,
                 aom_dc_128_predictor_32x32_msa, aom_v_predictor_32x32_msa,
                 aom_h_predictor_32x32_msa, NULL, NULL, NULL, NULL, NULL, NULL,
-                aom_tm_predictor_32x32_msa)
+#if CONFIG_ALT_INTRA
+                NULL
+#else
+                aom_tm_predictor_32x32_msa
+#endif  // CONFIG_ALT_INTRA
+                )
 #endif  // HAVE_MSA
 
 #include "test/test_libaom.cc"