Remove warped motion from realtime only build
Reduce binary size by 50K
realtime encoder & decoder are bitexact
Bug: aomedia:2865
Change-Id: I1ee0fb20c48b82f1835faed02d6ff48043df6fd9
diff --git a/av1/av1.cmake b/av1/av1.cmake
index e028afd..136e942 100644
--- a/av1/av1.cmake
+++ b/av1/av1.cmake
@@ -88,6 +88,12 @@
"${AOM_ROOT}/av1/common/warped_motion.c"
"${AOM_ROOT}/av1/common/warped_motion.h")
+if(CONFIG_REALTIME_ONLY)
+ list(REMOVE_ITEM AOM_AV1_COMMON_SOURCES
+ "${AOM_ROOT}/av1/common/warped_motion.c"
+ "${AOM_ROOT}/av1/common/warped_motion.h")
+endif()
+
if(CONFIG_LPF_MASK)
list(APPEND AOM_AV1_COMMON_SOURCES "${AOM_ROOT}/av1/common/loopfiltermask.c")
endif()
@@ -270,6 +276,11 @@
"${AOM_ROOT}/av1/common/x86/av1_txfm_sse2.h"
"${AOM_ROOT}/av1/common/x86/warp_plane_sse2.c")
+if(CONFIG_REALTIME_ONLY)
+ list(REMOVE_ITEM AOM_AV1_COMMON_INTRIN_SSE2
+ "${AOM_ROOT}/av1/common/x86/warp_plane_sse2.c")
+endif()
+
if(NOT CONFIG_AV1_HIGHBITDEPTH)
list(REMOVE_ITEM AOM_AV1_COMMON_INTRIN_SSE2
"${AOM_ROOT}/av1/common/x86/highbd_convolve_2d_sse2.c")
@@ -313,6 +324,12 @@
"${AOM_ROOT}/av1/common/x86/highbd_warp_plane_sse4.c")
endif()
+if(CONFIG_REALTIME_ONLY)
+ list(REMOVE_ITEM AOM_AV1_COMMON_INTRIN_SSE4_1
+ "${AOM_ROOT}/av1/common/x86/highbd_warp_plane_sse4.c"
+ "${AOM_ROOT}/av1/common/x86/warp_plane_sse4.c")
+endif()
+
list(APPEND AOM_AV1_COMMON_INTRIN_AVX2
"${AOM_ROOT}/av1/common/cdef_block_avx2.c"
"${AOM_ROOT}/av1/common/x86/av1_inv_txfm_avx2.c"
@@ -333,9 +350,16 @@
if(NOT CONFIG_AV1_HIGHBITDEPTH)
list(REMOVE_ITEM AOM_AV1_COMMON_INTRIN_AVX2
+ "${AOM_ROOT}/av1/common/x86/highbd_warp_affine_avx2.c"
"${AOM_ROOT}/av1/common/x86/highbd_convolve_2d_avx2.c")
endif()
+if(CONFIG_REALTIME_ONLY)
+ list(REMOVE_ITEM AOM_AV1_COMMON_INTRIN_AVX2
+ "${AOM_ROOT}/av1/common/x86/highbd_warp_affine_avx2.c"
+ "${AOM_ROOT}/av1/common/x86/warp_plane_avx2.c")
+endif()
+
list(APPEND AOM_AV1_ENCODER_ASM_SSE2 "${AOM_ROOT}/av1/encoder/x86/dct_sse2.asm"
"${AOM_ROOT}/av1/encoder/x86/error_sse2.asm")
@@ -431,6 +455,11 @@
"${AOM_ROOT}/av1/common/arm/warp_plane_neon.c"
"${AOM_ROOT}/av1/common/cdef_block_neon.c")
+if(CONFIG_REALTIME_ONLY)
+ list(REMOVE_ITEM AOM_AV1_COMMON_INTRIN_NEON
+ "${AOM_ROOT}/av1/common/arm/warp_plane_neon.c")
+endif()
+
list(APPEND AOM_AV1_ENCODER_INTRIN_SSE4_2
"${AOM_ROOT}/av1/encoder/x86/hash_sse42.c")
diff --git a/av1/common/av1_rtcd_defs.pl b/av1/common/av1_rtcd_defs.pl
index 71e3df0..e5ac4f5 100644
--- a/av1/common/av1_rtcd_defs.pl
+++ b/av1/common/av1_rtcd_defs.pl
@@ -451,17 +451,18 @@
}
# WARPED_MOTION / GLOBAL_MOTION functions
-
-add_proto qw/void av1_warp_affine/, "const int32_t *mat, const uint8_t *ref, int width, int height, int stride, uint8_t *pred, int p_col, int p_row, int p_width, int p_height, int p_stride, int subsampling_x, int subsampling_y, ConvolveParams *conv_params, int16_t alpha, int16_t beta, int16_t gamma, int16_t delta";
-specialize qw/av1_warp_affine sse4_1 avx2 neon/;
-
-if (aom_config("CONFIG_AV1_HIGHBITDEPTH") eq "yes") {
+if (aom_config("CONFIG_AV1_HIGHBITDEPTH") eq "yes" && aom_config("CONFIG_REALTIME_ONLY") ne "yes") {
add_proto qw/void av1_highbd_warp_affine/, "const int32_t *mat, const uint16_t *ref, int width, int height, int stride, uint16_t *pred, int p_col, int p_row, int p_width, int p_height, int p_stride, int subsampling_x, int subsampling_y, int bd, ConvolveParams *conv_params, int16_t alpha, int16_t beta, int16_t gamma, int16_t delta";
specialize qw/av1_highbd_warp_affine sse4_1 avx2/;
}
-add_proto qw/int64_t av1_calc_frame_error/, "const uint8_t *const ref, int stride, const uint8_t *const dst, int p_width, int p_height, int p_stride";
-specialize qw/av1_calc_frame_error sse2 avx2/;
+if (aom_config("CONFIG_REALTIME_ONLY") ne "yes") {
+ add_proto qw/void av1_warp_affine/, "const int32_t *mat, const uint8_t *ref, int width, int height, int stride, uint8_t *pred, int p_col, int p_row, int p_width, int p_height, int p_stride, int subsampling_x, int subsampling_y, ConvolveParams *conv_params, int16_t alpha, int16_t beta, int16_t gamma, int16_t delta";
+ specialize qw/av1_warp_affine sse4_1 avx2 neon/;
+
+ add_proto qw/int64_t av1_calc_frame_error/, "const uint8_t *const ref, int stride, const uint8_t *const dst, int p_width, int p_height, int p_stride";
+ specialize qw/av1_calc_frame_error sse2 avx2/;
+}
if (aom_config("CONFIG_AV1_ENCODER") eq "yes") {
add_proto qw/double av1_compute_cross_correlation/, "unsigned char *im1, int stride1, int x1, int y1, unsigned char *im2, int stride2, int x2, int y2";
diff --git a/av1/common/reconinter.c b/av1/common/reconinter.c
index 2703ae4..663a434 100644
--- a/av1/common/reconinter.c
+++ b/av1/common/reconinter.c
@@ -115,19 +115,7 @@
assert(IMPLIES(inter_pred_params->conv_params.is_compound,
inter_pred_params->conv_params.dst != NULL));
- // TODO(jingning): av1_warp_plane() can be further cleaned up.
- if (inter_pred_params->mode == WARP_PRED) {
- av1_warp_plane(
- &inter_pred_params->warp_params, inter_pred_params->use_hbd_buf,
- inter_pred_params->bit_depth, inter_pred_params->ref_frame_buf.buf0,
- inter_pred_params->ref_frame_buf.width,
- inter_pred_params->ref_frame_buf.height,
- inter_pred_params->ref_frame_buf.stride, dst,
- inter_pred_params->pix_col, inter_pred_params->pix_row,
- inter_pred_params->block_width, inter_pred_params->block_height,
- dst_stride, inter_pred_params->subsampling_x,
- inter_pred_params->subsampling_y, &inter_pred_params->conv_params);
- } else if (inter_pred_params->mode == TRANSLATION_PRED) {
+ if (inter_pred_params->mode == TRANSLATION_PRED) {
#if CONFIG_AV1_HIGHBITDEPTH
if (inter_pred_params->use_hbd_buf) {
highbd_inter_predictor(src, src_stride, dst, dst_stride, subpel_params,
@@ -151,6 +139,21 @@
inter_pred_params->interp_filter_params);
#endif
}
+#if !CONFIG_REALTIME_ONLY
+ // TODO(jingning): av1_warp_plane() can be further cleaned up.
+ else if (inter_pred_params->mode == WARP_PRED) {
+ av1_warp_plane(
+ &inter_pred_params->warp_params, inter_pred_params->use_hbd_buf,
+ inter_pred_params->bit_depth, inter_pred_params->ref_frame_buf.buf0,
+ inter_pred_params->ref_frame_buf.width,
+ inter_pred_params->ref_frame_buf.height,
+ inter_pred_params->ref_frame_buf.stride, dst,
+ inter_pred_params->pix_col, inter_pred_params->pix_row,
+ inter_pred_params->block_width, inter_pred_params->block_height,
+ dst_stride, inter_pred_params->subsampling_x,
+ inter_pred_params->subsampling_y, &inter_pred_params->conv_params);
+ }
+#endif
}
static const uint8_t wedge_master_oblique_odd[MASK_MASTER_SIZE] = {
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index 754ce3c..4a38b6e 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -4307,10 +4307,14 @@
trans_dec_factor;
}
+#if !CONFIG_REALTIME_ONLY
+ // For realtime only build, warped motion is disabled, so this section is not
+ // needed.
if (params->wmtype <= AFFINE) {
int good_shear_params = av1_get_shear_params(params);
if (!good_shear_params) return 0;
}
+#endif
return 1;
}
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index 345eeee..412be86 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -1475,10 +1475,10 @@
read_mb_interp_filter(xd, features->interp_filter,
cm->seq_params.enable_dual_filter, mbmi, r);
- const int mi_row = xd->mi_row;
- const int mi_col = xd->mi_col;
-
+#if !CONFIG_REALTIME_ONLY
if (mbmi->motion_mode == WARPED_CAUSAL) {
+ const int mi_row = xd->mi_row;
+ const int mi_col = xd->mi_col;
mbmi->wm_params.wmtype = DEFAULT_WMTYPE;
mbmi->wm_params.invalid = 0;
@@ -1496,6 +1496,7 @@
mbmi->wm_params.invalid = 1;
}
}
+#endif
xd->cfl.store_y = store_cfl_required(cm, xd);
diff --git a/av1/encoder/mcomp.c b/av1/encoder/mcomp.c
index 704f466..745f75b 100644
--- a/av1/encoder/mcomp.c
+++ b/av1/encoder/mcomp.c
@@ -3136,6 +3136,7 @@
return besterr;
}
+#if !CONFIG_REALTIME_ONLY
// Computes the cost of the current predictor by going through the whole
// av1_enc_build_inter_predictor pipeline. This is mainly used by warped mv
// during motion_mode_rd. We are going through the whole
@@ -3235,6 +3236,7 @@
mbmi->num_proj_ref = best_num_proj_ref;
return bestmse;
}
+#endif // !CONFIG_REALTIME_ONLY
// =============================================================================
// Subpixel Motion Search: OBMC
// =============================================================================
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 7012623..2ea376b 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -1484,6 +1484,7 @@
av1_build_obmc_inter_prediction(
cm, xd, args->above_pred_buf, args->above_pred_stride,
args->left_pred_buf, args->left_pred_stride);
+#if !CONFIG_REALTIME_ONLY
} else if (mbmi->motion_mode == WARPED_CAUSAL) {
int pts[SAMPLES_ARRAY_SIZE], pts_inref[SAMPLES_ARRAY_SIZE];
mbmi->motion_mode = WARPED_CAUSAL;
@@ -1540,6 +1541,7 @@
} else {
continue;
}
+#endif // !CONFIG_REALTIME_ONLY
} else if (is_interintra_mode) {
const int ret =
av1_handle_inter_intra_mode(cpi, x, bsize, mbmi, args, ref_best_rd,
diff --git a/test/test.cmake b/test/test.cmake
index b28e7ba..1d99540 100644
--- a/test/test.cmake
+++ b/test/test.cmake
@@ -236,6 +236,14 @@
"${AOM_ROOT}/test/warp_filter_test_util.h"
"${AOM_ROOT}/test/webmenc_test.cc")
+ if(CONFIG_REALTIME_ONLY)
+ list(REMOVE_ITEM AOM_UNIT_TEST_ENCODER_SOURCES
+ "${AOM_ROOT}/test/frame_error_test.cc"
+ "${AOM_ROOT}/test/warp_filter_test.cc"
+ "${AOM_ROOT}/test/warp_filter_test_util.cc"
+ "${AOM_ROOT}/test/warp_filter_test_util.h")
+ endif()
+
if((HAVE_SSE4_1 OR HAVE_NEON))
list(APPEND AOM_UNIT_TEST_ENCODER_SOURCES
"${AOM_ROOT}/test/av1_highbd_iht_test.cc")