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")