From: Urvang Joshi Date: Thu, 1 Sep 2016 19:03:20 +0000 (-0700) Subject: Add ALT_INTRA experiment. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=340593e5309862a7a4bfda942f0353fec21b32e9;p=libvpx Add ALT_INTRA experiment. 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 --- diff --git a/aom_dsp/aom_dsp_rtcd_defs.pl b/aom_dsp/aom_dsp_rtcd_defs.pl index 2afb3cd7a..d8858900e 100644 --- a/aom_dsp/aom_dsp_rtcd_defs.pl +++ b/aom_dsp/aom_dsp_rtcd_defs.pl @@ -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/; diff --git a/aom_dsp/intrapred.c b/aom_dsp/intrapred.c index df4ec800d..52f0b35ad 100644 --- a/aom_dsp/intrapred.c +++ b/aom_dsp/intrapred.c @@ -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) diff --git a/av1/common/reconintra.c b/av1/common/reconintra.c index 3c08ac450..8078f853f 100644 --- a/av1/common/reconintra.c +++ b/av1/common/reconintra.c @@ -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); diff --git a/configure b/configure index 3a7cca853..c96691ba3 100755 --- a/configure +++ b/configure @@ -276,6 +276,7 @@ EXPERIMENT_LIST=" entropy bidir_pred bitstream_debug + alt_intra " CONFIG_LIST=" dependency_tracking diff --git a/test/intrapred_test.cc b/test/intrapred_test.cc index efa57f791..e63523409 100644 --- a/test/intrapred_test.cc +++ b/test/intrapred_test.cc @@ -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 diff --git a/test/test_intra_pred_speed.cc b/test/test_intra_pred_speed.cc index 5f08decc1..cd1e2a112 100644 --- a/test/test_intra_pred_speed.cc +++ b/test/test_intra_pred_speed.cc @@ -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"