|  | # Copyright (c) 2018 The WebRTC project authors. All Rights Reserved. | 
|  | # | 
|  | # Use of this source code is governed by a BSD-style license | 
|  | # that can be found in the LICENSE file in the root of the source | 
|  | # tree. An additional intellectual property rights grant can be found | 
|  | # in the file PATENTS.  All contributing project authors may | 
|  | # be found in the AUTHORS file in the root of the source tree. | 
|  |  | 
|  | import("../../../webrtc.gni") | 
|  |  | 
|  | rtc_library("aec3") { | 
|  | visibility = [ "*" ] | 
|  | configs += [ "..:apm_debug_dump" ] | 
|  | sources = [ | 
|  | "adaptive_fir_filter.cc", | 
|  | "adaptive_fir_filter_erl.cc", | 
|  | "aec3_common.cc", | 
|  | "aec3_fft.cc", | 
|  | "aec_state.cc", | 
|  | "aec_state.h", | 
|  | "alignment_mixer.cc", | 
|  | "alignment_mixer.h", | 
|  | "api_call_jitter_metrics.cc", | 
|  | "api_call_jitter_metrics.h", | 
|  | "block_buffer.cc", | 
|  | "block_delay_buffer.cc", | 
|  | "block_delay_buffer.h", | 
|  | "block_framer.cc", | 
|  | "block_framer.h", | 
|  | "block_processor.cc", | 
|  | "block_processor.h", | 
|  | "block_processor_metrics.cc", | 
|  | "block_processor_metrics.h", | 
|  | "clockdrift_detector.cc", | 
|  | "clockdrift_detector.h", | 
|  | "coarse_filter_update_gain.cc", | 
|  | "coarse_filter_update_gain.h", | 
|  | "comfort_noise_generator.cc", | 
|  | "comfort_noise_generator.h", | 
|  | "decimator.cc", | 
|  | "decimator.h", | 
|  | "delay_estimate.h", | 
|  | "dominant_nearend_detector.cc", | 
|  | "dominant_nearend_detector.h", | 
|  | "downsampled_render_buffer.cc", | 
|  | "downsampled_render_buffer.h", | 
|  | "echo_audibility.cc", | 
|  | "echo_audibility.h", | 
|  | "echo_canceller3.cc", | 
|  | "echo_canceller3.h", | 
|  | "echo_path_delay_estimator.cc", | 
|  | "echo_path_delay_estimator.h", | 
|  | "echo_path_variability.cc", | 
|  | "echo_path_variability.h", | 
|  | "echo_remover.cc", | 
|  | "echo_remover.h", | 
|  | "echo_remover_metrics.cc", | 
|  | "echo_remover_metrics.h", | 
|  | "erl_estimator.cc", | 
|  | "erl_estimator.h", | 
|  | "erle_estimator.cc", | 
|  | "erle_estimator.h", | 
|  | "fft_buffer.cc", | 
|  | "filter_analyzer.cc", | 
|  | "filter_analyzer.h", | 
|  | "frame_blocker.cc", | 
|  | "frame_blocker.h", | 
|  | "fullband_erle_estimator.cc", | 
|  | "fullband_erle_estimator.h", | 
|  | "matched_filter.cc", | 
|  | "matched_filter_lag_aggregator.cc", | 
|  | "matched_filter_lag_aggregator.h", | 
|  | "moving_average.cc", | 
|  | "moving_average.h", | 
|  | "nearend_detector.h", | 
|  | "refined_filter_update_gain.cc", | 
|  | "refined_filter_update_gain.h", | 
|  | "render_buffer.cc", | 
|  | "render_delay_buffer.cc", | 
|  | "render_delay_buffer.h", | 
|  | "render_delay_controller.cc", | 
|  | "render_delay_controller.h", | 
|  | "render_delay_controller_metrics.cc", | 
|  | "render_delay_controller_metrics.h", | 
|  | "render_signal_analyzer.cc", | 
|  | "render_signal_analyzer.h", | 
|  | "residual_echo_estimator.cc", | 
|  | "residual_echo_estimator.h", | 
|  | "reverb_decay_estimator.cc", | 
|  | "reverb_decay_estimator.h", | 
|  | "reverb_frequency_response.cc", | 
|  | "reverb_frequency_response.h", | 
|  | "reverb_model.cc", | 
|  | "reverb_model.h", | 
|  | "reverb_model_estimator.cc", | 
|  | "reverb_model_estimator.h", | 
|  | "signal_dependent_erle_estimator.cc", | 
|  | "signal_dependent_erle_estimator.h", | 
|  | "spectrum_buffer.cc", | 
|  | "stationarity_estimator.cc", | 
|  | "stationarity_estimator.h", | 
|  | "subband_erle_estimator.cc", | 
|  | "subband_erle_estimator.h", | 
|  | "subband_nearend_detector.cc", | 
|  | "subband_nearend_detector.h", | 
|  | "subtractor.cc", | 
|  | "subtractor.h", | 
|  | "subtractor_output.cc", | 
|  | "subtractor_output.h", | 
|  | "subtractor_output_analyzer.cc", | 
|  | "subtractor_output_analyzer.h", | 
|  | "suppression_filter.cc", | 
|  | "suppression_filter.h", | 
|  | "suppression_gain.cc", | 
|  | "suppression_gain.h", | 
|  | "transparent_mode.cc", | 
|  | "transparent_mode.h", | 
|  | ] | 
|  |  | 
|  | defines = [] | 
|  | if (rtc_build_with_neon && current_cpu != "arm64") { | 
|  | suppressed_configs += [ "//build/config/compiler:compiler_arm_fpu" ] | 
|  | cflags = [ "-mfpu=neon" ] | 
|  | } | 
|  |  | 
|  | deps = [ | 
|  | ":adaptive_fir_filter", | 
|  | ":adaptive_fir_filter_erl", | 
|  | ":aec3_common", | 
|  | ":aec3_fft", | 
|  | ":fft_data", | 
|  | ":matched_filter", | 
|  | ":render_buffer", | 
|  | ":vector_math", | 
|  | "..:apm_logging", | 
|  | "..:audio_buffer", | 
|  | "..:high_pass_filter", | 
|  | "../../../api:array_view", | 
|  | "../../../api/audio:aec3_config", | 
|  | "../../../api/audio:echo_control", | 
|  | "../../../common_audio:common_audio_c", | 
|  | "../../../rtc_base:checks", | 
|  | "../../../rtc_base:rtc_base_approved", | 
|  | "../../../rtc_base:safe_minmax", | 
|  | "../../../rtc_base/experiments:field_trial_parser", | 
|  | "../../../rtc_base/system:arch", | 
|  | "../../../system_wrappers", | 
|  | "../../../system_wrappers:field_trial", | 
|  | "../../../system_wrappers:metrics", | 
|  | "../utility:cascaded_biquad_filter", | 
|  | ] | 
|  | absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] | 
|  |  | 
|  | if (current_cpu == "x86" || current_cpu == "x64") { | 
|  | deps += [ ":aec3_avx2" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | rtc_source_set("aec3_common") { | 
|  | sources = [ "aec3_common.h" ] | 
|  | } | 
|  |  | 
|  | rtc_source_set("aec3_fft") { | 
|  | sources = [ "aec3_fft.h" ] | 
|  | deps = [ | 
|  | ":aec3_common", | 
|  | ":fft_data", | 
|  | "../../../api:array_view", | 
|  | "../../../common_audio/third_party/ooura:fft_size_128", | 
|  | "../../../rtc_base:checks", | 
|  | "../../../rtc_base:rtc_base_approved", | 
|  | "../../../rtc_base/system:arch", | 
|  | ] | 
|  | } | 
|  |  | 
|  | rtc_source_set("render_buffer") { | 
|  | sources = [ | 
|  | "block_buffer.h", | 
|  | "fft_buffer.h", | 
|  | "render_buffer.h", | 
|  | "spectrum_buffer.h", | 
|  | ] | 
|  | deps = [ | 
|  | ":aec3_common", | 
|  | ":fft_data", | 
|  | "../../../api:array_view", | 
|  | "../../../rtc_base:checks", | 
|  | "../../../rtc_base:rtc_base_approved", | 
|  | "../../../rtc_base/system:arch", | 
|  | ] | 
|  | } | 
|  |  | 
|  | rtc_source_set("adaptive_fir_filter") { | 
|  | sources = [ "adaptive_fir_filter.h" ] | 
|  | deps = [ | 
|  | ":aec3_common", | 
|  | ":aec3_fft", | 
|  | ":fft_data", | 
|  | ":render_buffer", | 
|  | "..:apm_logging", | 
|  | "../../../api:array_view", | 
|  | "../../../rtc_base/system:arch", | 
|  | ] | 
|  | } | 
|  |  | 
|  | rtc_source_set("adaptive_fir_filter_erl") { | 
|  | sources = [ "adaptive_fir_filter_erl.h" ] | 
|  | deps = [ | 
|  | ":aec3_common", | 
|  | "../../../api:array_view", | 
|  | "../../../rtc_base/system:arch", | 
|  | ] | 
|  | } | 
|  |  | 
|  | rtc_source_set("matched_filter") { | 
|  | sources = [ "matched_filter.h" ] | 
|  | deps = [ | 
|  | ":aec3_common", | 
|  | "../../../api:array_view", | 
|  | "../../../rtc_base:rtc_base_approved", | 
|  | "../../../rtc_base/system:arch", | 
|  | ] | 
|  | } | 
|  |  | 
|  | rtc_source_set("vector_math") { | 
|  | sources = [ "vector_math.h" ] | 
|  | deps = [ | 
|  | ":aec3_common", | 
|  | "../../../api:array_view", | 
|  | "../../../rtc_base:checks", | 
|  | "../../../rtc_base/system:arch", | 
|  | ] | 
|  | } | 
|  |  | 
|  | rtc_source_set("fft_data") { | 
|  | sources = [ "fft_data.h" ] | 
|  | deps = [ | 
|  | ":aec3_common", | 
|  | "../../../api:array_view", | 
|  | "../../../rtc_base/system:arch", | 
|  | ] | 
|  | } | 
|  |  | 
|  | if (current_cpu == "x86" || current_cpu == "x64") { | 
|  | rtc_library("aec3_avx2") { | 
|  | configs += [ "..:apm_debug_dump" ] | 
|  | sources = [ | 
|  | "adaptive_fir_filter_avx2.cc", | 
|  | "adaptive_fir_filter_erl_avx2.cc", | 
|  | "fft_data_avx2.cc", | 
|  | "matched_filter_avx2.cc", | 
|  | "vector_math_avx2.cc", | 
|  | ] | 
|  |  | 
|  | if (is_win) { | 
|  | cflags = [ "/arch:AVX2" ] | 
|  | } else { | 
|  | cflags = [ | 
|  | "-mavx2", | 
|  | "-mfma", | 
|  | ] | 
|  | } | 
|  |  | 
|  | deps = [ | 
|  | ":adaptive_fir_filter", | 
|  | ":adaptive_fir_filter_erl", | 
|  | ":fft_data", | 
|  | ":matched_filter", | 
|  | ":vector_math", | 
|  | "../../../api:array_view", | 
|  | "../../../rtc_base:checks", | 
|  | ] | 
|  | } | 
|  | } | 
|  |  | 
|  | if (rtc_include_tests) { | 
|  | rtc_library("aec3_unittests") { | 
|  | testonly = true | 
|  |  | 
|  | configs += [ "..:apm_debug_dump" ] | 
|  | sources = [ | 
|  | "mock/mock_block_processor.cc", | 
|  | "mock/mock_block_processor.h", | 
|  | "mock/mock_echo_remover.cc", | 
|  | "mock/mock_echo_remover.h", | 
|  | "mock/mock_render_delay_buffer.cc", | 
|  | "mock/mock_render_delay_buffer.h", | 
|  | "mock/mock_render_delay_controller.cc", | 
|  | "mock/mock_render_delay_controller.h", | 
|  | ] | 
|  |  | 
|  | deps = [ | 
|  | ":adaptive_fir_filter", | 
|  | ":adaptive_fir_filter_erl", | 
|  | ":aec3", | 
|  | ":aec3_common", | 
|  | ":aec3_fft", | 
|  | ":fft_data", | 
|  | ":matched_filter", | 
|  | ":render_buffer", | 
|  | ":vector_math", | 
|  | "..:apm_logging", | 
|  | "..:audio_buffer", | 
|  | "..:audio_processing", | 
|  | "..:high_pass_filter", | 
|  | "../../../api:array_view", | 
|  | "../../../api/audio:aec3_config", | 
|  | "../../../rtc_base:checks", | 
|  | "../../../rtc_base:rtc_base_approved", | 
|  | "../../../rtc_base:safe_minmax", | 
|  | "../../../rtc_base/system:arch", | 
|  | "../../../system_wrappers", | 
|  | "../../../test:field_trial", | 
|  | "../../../test:test_support", | 
|  | "../utility:cascaded_biquad_filter", | 
|  | ] | 
|  | absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] | 
|  |  | 
|  | defines = [] | 
|  |  | 
|  | if (rtc_enable_protobuf) { | 
|  | sources += [ | 
|  | "adaptive_fir_filter_erl_unittest.cc", | 
|  | "adaptive_fir_filter_unittest.cc", | 
|  | "aec3_fft_unittest.cc", | 
|  | "aec_state_unittest.cc", | 
|  | "alignment_mixer_unittest.cc", | 
|  | "api_call_jitter_metrics_unittest.cc", | 
|  | "block_delay_buffer_unittest.cc", | 
|  | "block_framer_unittest.cc", | 
|  | "block_processor_metrics_unittest.cc", | 
|  | "block_processor_unittest.cc", | 
|  | "clockdrift_detector_unittest.cc", | 
|  | "coarse_filter_update_gain_unittest.cc", | 
|  | "comfort_noise_generator_unittest.cc", | 
|  | "decimator_unittest.cc", | 
|  | "echo_canceller3_unittest.cc", | 
|  | "echo_path_delay_estimator_unittest.cc", | 
|  | "echo_path_variability_unittest.cc", | 
|  | "echo_remover_metrics_unittest.cc", | 
|  | "echo_remover_unittest.cc", | 
|  | "erl_estimator_unittest.cc", | 
|  | "erle_estimator_unittest.cc", | 
|  | "fft_data_unittest.cc", | 
|  | "filter_analyzer_unittest.cc", | 
|  | "frame_blocker_unittest.cc", | 
|  | "matched_filter_lag_aggregator_unittest.cc", | 
|  | "matched_filter_unittest.cc", | 
|  | "moving_average_unittest.cc", | 
|  | "refined_filter_update_gain_unittest.cc", | 
|  | "render_buffer_unittest.cc", | 
|  | "render_delay_buffer_unittest.cc", | 
|  | "render_delay_controller_metrics_unittest.cc", | 
|  | "render_delay_controller_unittest.cc", | 
|  | "render_signal_analyzer_unittest.cc", | 
|  | "residual_echo_estimator_unittest.cc", | 
|  | "reverb_model_estimator_unittest.cc", | 
|  | "signal_dependent_erle_estimator_unittest.cc", | 
|  | "subtractor_unittest.cc", | 
|  | "suppression_filter_unittest.cc", | 
|  | "suppression_gain_unittest.cc", | 
|  | "vector_math_unittest.cc", | 
|  | ] | 
|  | } | 
|  |  | 
|  | if (!build_with_chromium) { | 
|  | deps += [ "..:audio_processing_unittests" ] | 
|  | } | 
|  | } | 
|  | } |