Binary size reduction from cfl removal For CONFIG_REALTIME_ONLY && !CONFIG_AV1_DECODER: remove cfl tool. ~3.2% reduction in binary size, for arm64 build, with build flags: -DCONFIG_REALTIME_ONLY=1 -DCONFIG_AV1_HIGHBITDEPTH=0 -DCONFIG_QUANT_MATRIX=0 -DCONFIG_AV1_DECODER=0 Bug: aomedia:3248 Change-Id: I0a055ebddbde55fb1bd3ea83924a1dd17b3f834f
diff --git a/av1/av1.cmake b/av1/av1.cmake index 9a0dff8..a9abf93 100644 --- a/av1/av1.cmake +++ b/av1/av1.cmake
@@ -549,7 +549,8 @@ if(CONFIG_REALTIME_ONLY) if(NOT CONFIG_AV1_DECODER) - list(REMOVE_ITEM AOM_AV1_COMMON_SOURCES + list(REMOVE_ITEM AOM_AV1_COMMON_SOURCES "${AOM_ROOT}/av1/common/cfl.c" + "${AOM_ROOT}/av1/common/cfl.h" "${AOM_ROOT}/av1/common/restoration.c" "${AOM_ROOT}/av1/common/restoration.h" "${AOM_ROOT}/av1/common/warped_motion.c" @@ -557,6 +558,7 @@ "${AOM_ROOT}/av1/common/warp_plane_sve.c") list(REMOVE_ITEM AOM_AV1_COMMON_INTRIN_SSE2 + "${AOM_ROOT}/av1/common/x86/cfl_sse2.c" "${AOM_ROOT}/av1/common/x86/warp_plane_sse2.c" "${AOM_ROOT}/av1/common/x86/wiener_convolve_sse2.c") @@ -567,9 +569,11 @@ list( REMOVE_ITEM AOM_AV1_COMMON_INTRIN_SSSE3 + "${AOM_ROOT}/av1/common/x86/cfl_ssse3.c" "${AOM_ROOT}/av1/common/x86/highbd_wiener_convolve_ssse3.c") list(REMOVE_ITEM AOM_AV1_COMMON_INTRIN_AVX2 + "${AOM_ROOT}/av1/common/x86/cfl_avx2.c" "${AOM_ROOT}/av1/common/x86/highbd_warp_affine_avx2.c" "${AOM_ROOT}/av1/common/x86/highbd_wiener_convolve_avx2.c" "${AOM_ROOT}/av1/common/x86/selfguided_avx2.c" @@ -577,6 +581,7 @@ "${AOM_ROOT}/av1/common/x86/wiener_convolve_avx2.c") list(REMOVE_ITEM AOM_AV1_COMMON_INTRIN_NEON + "${AOM_ROOT}/av1/common/arm/cfl_neon.c" "${AOM_ROOT}/av1/common/arm/highbd_warp_plane_neon.c" "${AOM_ROOT}/av1/common/arm/highbd_wiener_convolve_neon.c" "${AOM_ROOT}/av1/common/arm/selfguided_neon.c"
diff --git a/av1/av1_cx_iface.c b/av1/av1_cx_iface.c index a550dc2..1e5a090 100644 --- a/av1/av1_cx_iface.c +++ b/av1/av1_cx_iface.c
@@ -2183,6 +2183,11 @@ va_list args) { struct av1_extracfg extra_cfg = ctx->extra_cfg; extra_cfg.enable_cfl_intra = CAST(AV1E_SET_ENABLE_CFL_INTRA, args); +#if CONFIG_REALTIME_ONLY + if (extra_cfg.enable_cfl_intra) { + ERROR("cfl can't be turned on in realtime only build."); + } +#endif return update_extra_cfg(ctx, &extra_cfg); }
diff --git a/av1/common/av1_common_int.h b/av1/common/av1_common_int.h index 113b3f1..99ca541 100644 --- a/av1/common/av1_common_int.h +++ b/av1/common/av1_common_int.h
@@ -1257,7 +1257,9 @@ } } +#if !CONFIG_REALTIME_ONLY || CONFIG_AV1_DECODER void cfl_init(CFL_CTX *cfl, const SequenceHeader *seq_params); +#endif static inline int av1_num_planes(const AV1_COMMON *cm) { return cm->seq_params->monochrome ? 1 : MAX_MB_PLANE; @@ -1300,7 +1302,9 @@ } xd->mi_stride = cm->mi_params.mi_stride; xd->error_info = cm->error; +#if !CONFIG_REALTIME_ONLY || CONFIG_AV1_DECODER cfl_init(&xd->cfl, cm->seq_params); +#endif } static inline void set_entropy_context(MACROBLOCKD *xd, int mi_row, int mi_col,
diff --git a/av1/common/av1_rtcd_defs.pl b/av1/common/av1_rtcd_defs.pl index ec85e2a..889f952 100644 --- a/av1/common/av1_rtcd_defs.pl +++ b/av1/common/av1_rtcd_defs.pl
@@ -617,33 +617,35 @@ } # CFL -add_proto qw/cfl_subtract_average_fn cfl_get_subtract_average_fn/, "TX_SIZE tx_size"; -specialize qw/cfl_get_subtract_average_fn sse2 avx2 neon vsx/; +if ((aom_config("CONFIG_REALTIME_ONLY") ne "yes") || + (aom_config("CONFIG_AV1_DECODER") eq "yes")) { + add_proto qw/cfl_subtract_average_fn cfl_get_subtract_average_fn/, "TX_SIZE tx_size"; + specialize qw/cfl_get_subtract_average_fn sse2 avx2 neon vsx/; -add_proto qw/cfl_subsample_lbd_fn cfl_get_luma_subsampling_420_lbd/, "TX_SIZE tx_size"; -specialize qw/cfl_get_luma_subsampling_420_lbd ssse3 avx2 neon/; + add_proto qw/cfl_subsample_lbd_fn cfl_get_luma_subsampling_420_lbd/, "TX_SIZE tx_size"; + specialize qw/cfl_get_luma_subsampling_420_lbd ssse3 avx2 neon/; -add_proto qw/cfl_subsample_lbd_fn cfl_get_luma_subsampling_422_lbd/, "TX_SIZE tx_size"; -specialize qw/cfl_get_luma_subsampling_422_lbd ssse3 avx2 neon/; + add_proto qw/cfl_subsample_lbd_fn cfl_get_luma_subsampling_422_lbd/, "TX_SIZE tx_size"; + specialize qw/cfl_get_luma_subsampling_422_lbd ssse3 avx2 neon/; -add_proto qw/cfl_subsample_lbd_fn cfl_get_luma_subsampling_444_lbd/, "TX_SIZE tx_size"; -specialize qw/cfl_get_luma_subsampling_444_lbd ssse3 avx2 neon/; + add_proto qw/cfl_subsample_lbd_fn cfl_get_luma_subsampling_444_lbd/, "TX_SIZE tx_size"; + specialize qw/cfl_get_luma_subsampling_444_lbd ssse3 avx2 neon/; -if (aom_config("CONFIG_AV1_HIGHBITDEPTH") eq "yes") { - add_proto qw/cfl_subsample_hbd_fn cfl_get_luma_subsampling_420_hbd/, "TX_SIZE tx_size"; - specialize qw/cfl_get_luma_subsampling_420_hbd ssse3 avx2 neon/; + if (aom_config("CONFIG_AV1_HIGHBITDEPTH") eq "yes") { + add_proto qw/cfl_subsample_hbd_fn cfl_get_luma_subsampling_420_hbd/, "TX_SIZE tx_size"; + specialize qw/cfl_get_luma_subsampling_420_hbd ssse3 avx2 neon/; - add_proto qw/cfl_subsample_hbd_fn cfl_get_luma_subsampling_422_hbd/, "TX_SIZE tx_size"; - specialize qw/cfl_get_luma_subsampling_422_hbd ssse3 avx2 neon/; + add_proto qw/cfl_subsample_hbd_fn cfl_get_luma_subsampling_422_hbd/, "TX_SIZE tx_size"; + specialize qw/cfl_get_luma_subsampling_422_hbd ssse3 avx2 neon/; - add_proto qw/cfl_subsample_hbd_fn cfl_get_luma_subsampling_444_hbd/, "TX_SIZE tx_size"; - specialize qw/cfl_get_luma_subsampling_444_hbd ssse3 avx2 neon/; + add_proto qw/cfl_subsample_hbd_fn cfl_get_luma_subsampling_444_hbd/, "TX_SIZE tx_size"; + specialize qw/cfl_get_luma_subsampling_444_hbd ssse3 avx2 neon/; - add_proto qw/cfl_predict_hbd_fn cfl_get_predict_hbd_fn/, "TX_SIZE tx_size"; - specialize qw/cfl_get_predict_hbd_fn ssse3 avx2 neon/; + add_proto qw/cfl_predict_hbd_fn cfl_get_predict_hbd_fn/, "TX_SIZE tx_size"; + specialize qw/cfl_get_predict_hbd_fn ssse3 avx2 neon/; + } + add_proto qw/cfl_predict_lbd_fn cfl_get_predict_lbd_fn/, "TX_SIZE tx_size"; + specialize qw/cfl_get_predict_lbd_fn ssse3 avx2 neon/; } -add_proto qw/cfl_predict_lbd_fn cfl_get_predict_lbd_fn/, "TX_SIZE tx_size"; -specialize qw/cfl_get_predict_lbd_fn ssse3 avx2 neon/; - 1;
diff --git a/av1/common/reconintra.c b/av1/common/reconintra.c index e2a7510..33016a2 100644 --- a/av1/common/reconintra.c +++ b/av1/common/reconintra.c
@@ -1850,6 +1850,7 @@ const int angle_delta = mbmi->angle_delta[plane != AOM_PLANE_Y] * ANGLE_STEP; const SequenceHeader *seq_params = cm->seq_params; +#if !CONFIG_REALTIME_ONLY || CONFIG_AV1_DECODER if (plane != AOM_PLANE_Y && mbmi->uv_mode == UV_CFL_PRED) { #if CONFIG_DEBUG assert(is_cfl_allowed(xd)); @@ -1882,6 +1883,7 @@ av1_cfl_predict_block(xd, dst, dst_stride, tx_size, plane); return; } +#endif // !CONFIG_REALTIME_ONLY || CONFIG_AV1_DECODER av1_predict_intra_block( xd, seq_params->sb_size, seq_params->enable_intra_edge_filter, pd->width, pd->height, tx_size, mode, angle_delta, use_palette, filter_intra_mode,
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c index 1c0a8fb..5456d5a 100644 --- a/av1/encoder/encodeframe.c +++ b/av1/encoder/encodeframe.c
@@ -1461,8 +1461,10 @@ av1_init_above_context(&cm->above_contexts, av1_num_planes(cm), tile_row, &td->mb.e_mbd); +#if !CONFIG_REALTIME_ONLY if (cpi->oxcf.intra_mode_cfg.enable_cfl_intra) cfl_init(&td->mb.e_mbd.cfl, cm->seq_params); +#endif if (td->mb.txfm_search_info.mb_rd_record != NULL) { av1_crc32c_calculator_init(
diff --git a/av1/encoder/encodemb.c b/av1/encoder/encodemb.c index a300f88..447cae4 100644 --- a/av1/encoder/encodemb.c +++ b/av1/encoder/encodemb.c
@@ -831,9 +831,11 @@ // skip_txfm = 1 is very expensive. mbmi->skip_txfm = 0; +#if !CONFIG_REALTIME_ONLY if (plane == AOM_PLANE_Y && xd->cfl.store_y) { cfl_store_tx(xd, blk_row, blk_col, tx_size, plane_bsize); } +#endif } static void encode_block_intra_and_set_context(int plane, int block,
diff --git a/av1/encoder/ethread.c b/av1/encoder/ethread.c index 82b1753..fcffd7a 100644 --- a/av1/encoder/ethread.c +++ b/av1/encoder/ethread.c
@@ -711,8 +711,9 @@ av1_init_above_context(&cm->above_contexts, av1_num_planes(cm), tile_row, &td->mb.e_mbd); - +#if !CONFIG_REALTIME_ONLY cfl_init(&td->mb.e_mbd.cfl, cm->seq_params); +#endif if (td->mb.txfm_search_info.mb_rd_record != NULL) { av1_crc32c_calculator_init( &td->mb.txfm_search_info.mb_rd_record->crc_calculator);
diff --git a/av1/encoder/partition_search.c b/av1/encoder/partition_search.c index 49294cb..d81efec 100644 --- a/av1/encoder/partition_search.c +++ b/av1/encoder/partition_search.c
@@ -564,9 +564,11 @@ (mbmi->skip_txfm || seg_skip) && is_inter_block(mbmi), xd); } +#if !CONFIG_REALTIME_ONLY if (is_inter_block(mbmi) && !xd->is_chroma_ref && is_cfl_allowed(xd)) { cfl_store_block(xd, mbmi->bsize, mbmi->tx_size); } +#endif if (!dry_run) { if (cpi->oxcf.pass == AOM_RC_ONE_PASS && cpi->svc.temporal_layer_id == 0 && cpi->sf.rt_sf.use_temporal_noise_estimate &&
diff --git a/av1/encoder/tx_search.c b/av1/encoder/tx_search.c index 48d5f12..7e51f21 100644 --- a/av1/encoder/tx_search.c +++ b/av1/encoder/tx_search.c
@@ -3045,10 +3045,12 @@ &txb_ctx, args->ftxs_mode, args->skip_trellis, args->best_rd - args->current_rd, &this_rd_stats); +#if !CONFIG_REALTIME_ONLY if (plane == AOM_PLANE_Y && xd->cfl.store_y) { assert(!is_inter || plane_bsize < BLOCK_8X8); cfl_store_tx(xd, blk_row, blk_col, tx_size, plane_bsize); } +#endif #if CONFIG_RD_DEBUG update_txb_coeff_cost(&this_rd_stats, plane, this_rd_stats.rate);
diff --git a/test/test.cmake b/test/test.cmake index fac95e8..b3e3308 100644 --- a/test/test.cmake +++ b/test/test.cmake
@@ -157,7 +157,7 @@ "${AOM_ROOT}/test/simd_impl.h") if(CONFIG_REALTIME_ONLY AND NOT CONFIG_AV1_DECODER) - list(REMOVE_ITEM AOM_UNIT_TEST_COMMON_SOURCES + list(REMOVE_ITEM AOM_UNIT_TEST_COMMON_SOURCES "${AOM_ROOT}/test/cfl_test.cc" "${AOM_ROOT}/test/hiprec_convolve_test.cc" "${AOM_ROOT}/test/hiprec_convolve_test_util.cc" "${AOM_ROOT}/test/hiprec_convolve_test_util.h")