diff --git a/api/audio/BUILD.gn b/api/audio/BUILD.gn index 73973bd80c..ab9bae8470 100644 --- a/api/audio/BUILD.gn +++ b/api/audio/BUILD.gn @@ -53,6 +53,7 @@ rtc_source_set("aec3_factory") { deps = [ ":aec3_config", ":echo_control", + "../../modules/audio_processing/aec3", ] } diff --git a/audio/BUILD.gn b/audio/BUILD.gn index 618ec847e6..72b27eb876 100644 --- a/audio/BUILD.gn +++ b/audio/BUILD.gn @@ -51,6 +51,7 @@ rtc_static_library("audio") { "../api:libjingle_peerconnection_api", "../api:optional", "../api:transport_api", + "../api/audio:aec3_factory", "../api/audio:audio_mixer_api", "../api/audio_codecs:audio_codecs_api", "../api/audio_codecs:builtin_audio_encoder_factory", diff --git a/modules/BUILD.gn b/modules/BUILD.gn index c4010a28b0..aa76b0f475 100644 --- a/modules/BUILD.gn +++ b/modules/BUILD.gn @@ -258,6 +258,7 @@ if (rtc_include_tests) { "audio_device:audio_device_unittests", "audio_mixer:audio_mixer_unittests", "audio_processing:audio_processing_unittests", + "audio_processing/aec3:aec3_unittests", "bitrate_controller:bitrate_controller_unittests", "congestion_controller:congestion_controller_unittests", "pacing:pacing_unittests", diff --git a/modules/audio_processing/BUILD.gn b/modules/audio_processing/BUILD.gn index 0528479fdd..6a1a3bb474 100644 --- a/modules/audio_processing/BUILD.gn +++ b/modules/audio_processing/BUILD.gn @@ -35,84 +35,6 @@ rtc_static_library("audio_processing") { "aec/aec_resampler.h", "aec/echo_cancellation.cc", "aec/echo_cancellation.h", - "aec3/adaptive_fir_filter.cc", - "aec3/adaptive_fir_filter.h", - "aec3/aec3_common.cc", - "aec3/aec3_common.h", - "aec3/aec3_fft.cc", - "aec3/aec3_fft.h", - "aec3/aec_state.cc", - "aec3/aec_state.h", - "aec3/block_framer.cc", - "aec3/block_framer.h", - "aec3/block_processor.cc", - "aec3/block_processor.h", - "aec3/block_processor_metrics.cc", - "aec3/block_processor_metrics.h", - "aec3/cascaded_biquad_filter.cc", - "aec3/cascaded_biquad_filter.h", - "aec3/comfort_noise_generator.cc", - "aec3/comfort_noise_generator.h", - "aec3/decimator.cc", - "aec3/decimator.h", - "aec3/delay_estimate.h", - "aec3/downsampled_render_buffer.cc", - "aec3/downsampled_render_buffer.h", - "aec3/echo_canceller3.cc", - "aec3/echo_canceller3.h", - "aec3/echo_path_delay_estimator.cc", - "aec3/echo_path_delay_estimator.h", - "aec3/echo_path_variability.cc", - "aec3/echo_path_variability.h", - "aec3/echo_remover.cc", - "aec3/echo_remover.h", - "aec3/echo_remover_metrics.cc", - "aec3/echo_remover_metrics.h", - "aec3/erl_estimator.cc", - "aec3/erl_estimator.h", - "aec3/erle_estimator.cc", - "aec3/erle_estimator.h", - "aec3/fft_buffer.cc", - "aec3/fft_buffer.h", - "aec3/fft_data.h", - "aec3/frame_blocker.cc", - "aec3/frame_blocker.h", - "aec3/main_filter_update_gain.cc", - "aec3/main_filter_update_gain.h", - "aec3/matched_filter.cc", - "aec3/matched_filter.h", - "aec3/matched_filter_lag_aggregator.cc", - "aec3/matched_filter_lag_aggregator.h", - "aec3/matrix_buffer.cc", - "aec3/matrix_buffer.h", - "aec3/output_selector.cc", - "aec3/output_selector.h", - "aec3/render_buffer.cc", - "aec3/render_buffer.h", - "aec3/render_delay_buffer.cc", - "aec3/render_delay_buffer.h", - "aec3/render_delay_controller.cc", - "aec3/render_delay_controller.h", - "aec3/render_delay_controller_metrics.cc", - "aec3/render_delay_controller_metrics.h", - "aec3/render_signal_analyzer.cc", - "aec3/render_signal_analyzer.h", - "aec3/residual_echo_estimator.cc", - "aec3/residual_echo_estimator.h", - "aec3/shadow_filter_update_gain.cc", - "aec3/shadow_filter_update_gain.h", - "aec3/skew_estimator.cc", - "aec3/skew_estimator.h", - "aec3/subtractor.cc", - "aec3/subtractor.h", - "aec3/subtractor_output.h", - "aec3/suppression_filter.cc", - "aec3/suppression_filter.h", - "aec3/suppression_gain.cc", - "aec3/suppression_gain.h", - "aec3/vector_buffer.cc", - "aec3/vector_buffer.h", - "aec3/vector_math.h", "agc/agc.cc", "agc/agc.h", "agc/agc_manager_direct.cc", @@ -221,8 +143,8 @@ rtc_static_library("audio_processing") { ":audio_processing_c", ":audio_processing_statistics", "..:module_api", + "../..:typedefs", "../..:webrtc_common", - "../../:typedefs", "../../api:array_view", "../../api:optional", "../../api/audio:aec3_config", @@ -348,8 +270,8 @@ rtc_source_set("audio_processing_c") { } deps = [ + "../..:typedefs", "../..:webrtc_common", - "../../:typedefs", "../../common_audio", "../../common_audio:common_audio_c", "../../rtc_base:checks", @@ -430,8 +352,8 @@ rtc_source_set("aec_core") { deps = [ ":apm_logging", ":audio_processing_statistics", + "../..:typedefs", "../..:webrtc_common", - "../../:typedefs", "../../common_audio:common_audio", "../../common_audio:common_audio_c", "../../rtc_base:checks", @@ -543,10 +465,6 @@ if (rtc_include_tests) { sources = [ "aec/echo_cancellation_unittest.cc", "aec/system_delay_unittest.cc", - "aec3/mock/mock_block_processor.h", - "aec3/mock/mock_echo_remover.h", - "aec3/mock/mock_render_delay_buffer.h", - "aec3/mock/mock_render_delay_controller.h", "agc/agc_manager_direct_unittest.cc", "agc/loudness_histogram_unittest.cc", "agc/mock_agc.h", @@ -585,8 +503,8 @@ if (rtc_include_tests) { ":audioproc_test_utils", ":mocks", "..:module_api", + "../..:typedefs", "../..:webrtc_common", - "../../:typedefs", "../../api:array_view", "../../api:optional", "../../api/audio:aec3_config", @@ -601,6 +519,7 @@ if (rtc_include_tests) { "../../system_wrappers:cpu_features_api", "../../test:test_support", "../audio_coding:neteq_input_audio_tools", + "aec3:aec3", "aec_dump:mock_aec_dump_unittests", "agc2:fixed_digital_unittests", "test/conversational_speech:unittest", @@ -638,40 +557,6 @@ if (rtc_include_tests) { "aec_dump:aec_dump_unittests", ] sources += [ - "aec3/adaptive_fir_filter_unittest.cc", - "aec3/aec3_fft_unittest.cc", - "aec3/aec_state_unittest.cc", - "aec3/block_framer_unittest.cc", - "aec3/block_processor_metrics_unittest.cc", - "aec3/block_processor_unittest.cc", - "aec3/cascaded_biquad_filter_unittest.cc", - "aec3/comfort_noise_generator_unittest.cc", - "aec3/decimator_unittest.cc", - "aec3/echo_canceller3_unittest.cc", - "aec3/echo_path_delay_estimator_unittest.cc", - "aec3/echo_path_variability_unittest.cc", - "aec3/echo_remover_metrics_unittest.cc", - "aec3/echo_remover_unittest.cc", - "aec3/erl_estimator_unittest.cc", - "aec3/erle_estimator_unittest.cc", - "aec3/fft_data_unittest.cc", - "aec3/frame_blocker_unittest.cc", - "aec3/main_filter_update_gain_unittest.cc", - "aec3/matched_filter_lag_aggregator_unittest.cc", - "aec3/matched_filter_unittest.cc", - "aec3/output_selector_unittest.cc", - "aec3/render_buffer_unittest.cc", - "aec3/render_delay_buffer_unittest.cc", - "aec3/render_delay_controller_metrics_unittest.cc", - "aec3/render_delay_controller_unittest.cc", - "aec3/render_signal_analyzer_unittest.cc", - "aec3/residual_echo_estimator_unittest.cc", - "aec3/shadow_filter_update_gain_unittest.cc", - "aec3/skew_estimator_unittest.cc", - "aec3/subtractor_unittest.cc", - "aec3/suppression_filter_unittest.cc", - "aec3/suppression_gain_unittest.cc", - "aec3/vector_math_unittest.cc", "audio_processing_impl_locking_unittest.cc", "audio_processing_impl_unittest.cc", "audio_processing_unittest.cc", @@ -775,6 +660,7 @@ if (rtc_include_tests) { "../../system_wrappers", "../../system_wrappers:system_wrappers_default", "../../test:test_support", + "aec3:aec3", "aec_dump", "aec_dump:aec_dump_impl", "//testing/gtest", @@ -823,8 +709,8 @@ if (rtc_include_tests) { deps = [ ":audio_processing", "..:module_api", + "../..:typedefs", "../..:webrtc_common", - "../../:typedefs", "../../common_audio:common_audio", "../../rtc_base:rtc_base_approved", "../../system_wrappers", @@ -843,8 +729,8 @@ if (rtc_include_tests) { ] deps = [ ":audio_processing", + "../..:typedefs", "../..:webrtc_common", - "../../:typedefs", "../../system_wrappers", "../../system_wrappers:metrics_default", ] @@ -899,8 +785,8 @@ if (rtc_include_tests) { deps = [ ":audioproc_debug_proto", + "../..:typedefs", "../..:webrtc_common", - "../../:typedefs", "../../rtc_base:protobuf_utils", "../../rtc_base:rtc_base_approved", ] diff --git a/modules/audio_processing/aec3/BUILD.gn b/modules/audio_processing/aec3/BUILD.gn new file mode 100644 index 0000000000..0ac47fb201 --- /dev/null +++ b/modules/audio_processing/aec3/BUILD.gn @@ -0,0 +1,199 @@ +# 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("//build/config/arm.gni") +import("../../../webrtc.gni") + +config("apm_debug_dump") { + if (apm_debug_dump) { + defines = [ "WEBRTC_APM_DEBUG_DUMP=1" ] + } else { + defines = [ "WEBRTC_APM_DEBUG_DUMP=0" ] + } +} + +rtc_static_library("aec3") { + visibility = [ "*" ] + configs += [ ":apm_debug_dump" ] + sources = [ + "adaptive_fir_filter.cc", + "adaptive_fir_filter.h", + "aec3_common.cc", + "aec3_common.h", + "aec3_fft.cc", + "aec3_fft.h", + "aec_state.cc", + "aec_state.h", + "block_framer.cc", + "block_framer.h", + "block_processor.cc", + "block_processor.h", + "block_processor_metrics.cc", + "block_processor_metrics.h", + "cascaded_biquad_filter.cc", + "cascaded_biquad_filter.h", + "comfort_noise_generator.cc", + "comfort_noise_generator.h", + "decimator.cc", + "decimator.h", + "delay_estimate.h", + "downsampled_render_buffer.cc", + "downsampled_render_buffer.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", + "fft_buffer.h", + "fft_data.h", + "frame_blocker.cc", + "frame_blocker.h", + "main_filter_update_gain.cc", + "main_filter_update_gain.h", + "matched_filter.cc", + "matched_filter.h", + "matched_filter_lag_aggregator.cc", + "matched_filter_lag_aggregator.h", + "matrix_buffer.cc", + "matrix_buffer.h", + "output_selector.cc", + "output_selector.h", + "render_buffer.cc", + "render_buffer.h", + "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", + "shadow_filter_update_gain.cc", + "shadow_filter_update_gain.h", + "skew_estimator.cc", + "skew_estimator.h", + "subtractor.cc", + "subtractor.h", + "subtractor_output.h", + "suppression_filter.cc", + "suppression_filter.h", + "suppression_gain.cc", + "suppression_gain.h", + "vector_buffer.cc", + "vector_buffer.h", + "vector_math.h", + ] + + defines = [] + deps = [ + "..:aec_core", + "..:apm_logging", + "..:audio_processing", + "../../..:typedefs", + "../../../api:array_view", + "../../../api:optional", + "../../../api/audio:aec3_config", + "../../../api/audio:echo_control", + "../../../common_audio:common_audio_c", + "../../../rtc_base:checks", + "../../../rtc_base:rtc_base_approved", + "../../../system_wrappers:cpu_features_api", + "../../../system_wrappers:metrics_api", + ] + + configs += [ "//build/config/compiler:no_size_t_to_int_warning" ] +} + +if (rtc_include_tests) { + rtc_source_set("aec3_unittests") { + testonly = true + + configs += [ ":apm_debug_dump" ] + sources = [ + "mock/mock_block_processor.h", + "mock/mock_echo_remover.h", + "mock/mock_render_delay_buffer.h", + "mock/mock_render_delay_controller.h", + ] + + deps = [ + ":aec3", + "..:apm_logging", + "..:audio_processing", + "..:audio_processing_unittests", + "../../..:typedefs", + "../../../api:array_view", + "../../../api:optional", + "../../../api/audio:aec3_config", + "../../../rtc_base:checks", + "../../../rtc_base:rtc_base_approved", + "../../../system_wrappers:cpu_features_api", + "../../../test:test_support", + ] + + defines = [] + + if (rtc_enable_protobuf) { + sources += [ + "adaptive_fir_filter_unittest.cc", + "aec3_fft_unittest.cc", + "aec_state_unittest.cc", + "block_framer_unittest.cc", + "block_processor_metrics_unittest.cc", + "block_processor_unittest.cc", + "cascaded_biquad_filter_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", + "frame_blocker_unittest.cc", + "main_filter_update_gain_unittest.cc", + "matched_filter_lag_aggregator_unittest.cc", + "matched_filter_unittest.cc", + "output_selector_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", + "shadow_filter_update_gain_unittest.cc", + "skew_estimator_unittest.cc", + "subtractor_unittest.cc", + "suppression_filter_unittest.cc", + "suppression_gain_unittest.cc", + "vector_math_unittest.cc", + ] + } + + if ((!build_with_chromium || is_win) && is_clang) { + # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163). + suppressed_configs += [ "//build/config/clang:find_bad_constructs" ] + } + + configs += [ "//build/config/compiler:no_size_t_to_int_warning" ] + } +} diff --git a/test/fuzzers/BUILD.gn b/test/fuzzers/BUILD.gn index fad746dd91..2d2d77cc71 100644 --- a/test/fuzzers/BUILD.gn +++ b/test/fuzzers/BUILD.gn @@ -445,6 +445,7 @@ webrtc_fuzzer_test("audio_processing_fuzzer") { ":audio_processing_fuzzer_helper", ":fuzz_data_helper", "../../modules/audio_processing", + "../../modules/audio_processing/aec3", "../../rtc_base:rtc_base_approved", ] }