1# Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 2# 3# Use of this source code is governed by a BSD-style license 4# that can be found in the LICENSE file in the root of the source 5# tree. An additional intellectual property rights grant can be found 6# in the file PATENTS. All contributing project authors may 7# be found in the AUTHORS file in the root of the source tree. 8 9import("../../webrtc.gni") 10if (rtc_enable_protobuf) { 11 import("//third_party/protobuf/proto_library.gni") 12} 13 14config("apm_debug_dump") { 15 if (apm_debug_dump) { 16 defines = [ "WEBRTC_APM_DEBUG_DUMP=1" ] 17 } else { 18 defines = [ "WEBRTC_APM_DEBUG_DUMP=0" ] 19 } 20} 21 22rtc_library("api") { 23 visibility = [ "*" ] 24 sources = [ 25 "include/audio_processing.cc", 26 "include/audio_processing.h", 27 ] 28 deps = [ 29 ":audio_frame_view", 30 ":audio_processing_statistics", 31 "../../api:array_view", 32 "../../api:scoped_refptr", 33 "../../api/audio:aec3_config", 34 "../../api/audio:audio_frame_api", 35 "../../api/audio:echo_control", 36 "../../rtc_base:macromagic", 37 "../../rtc_base:refcount", 38 "../../rtc_base:stringutils", 39 "../../rtc_base/system:arch", 40 "../../rtc_base/system:file_wrapper", 41 "../../rtc_base/system:rtc_export", 42 "agc:gain_control_interface", 43 ] 44 absl_deps = [ 45 "//third_party/abseil-cpp/absl/strings", 46 "//third_party/abseil-cpp/absl/types:optional", 47 ] 48} 49 50rtc_library("audio_frame_proxies") { 51 visibility = [ "*" ] 52 sources = [ 53 "include/audio_frame_proxies.cc", 54 "include/audio_frame_proxies.h", 55 ] 56 deps = [ 57 ":api", 58 ":audio_frame_view", 59 "../../api/audio:audio_frame_api", 60 ] 61} 62 63rtc_library("audio_buffer") { 64 visibility = [ "*" ] 65 66 configs += [ ":apm_debug_dump" ] 67 68 sources = [ 69 "audio_buffer.cc", 70 "audio_buffer.h", 71 "splitting_filter.cc", 72 "splitting_filter.h", 73 "three_band_filter_bank.cc", 74 "three_band_filter_bank.h", 75 ] 76 77 defines = [] 78 79 deps = [ 80 ":api", 81 "../../api:array_view", 82 "../../common_audio", 83 "../../common_audio:common_audio_c", 84 "../../rtc_base:checks", 85 ] 86} 87 88rtc_library("high_pass_filter") { 89 visibility = [ "*" ] 90 91 sources = [ 92 "high_pass_filter.cc", 93 "high_pass_filter.h", 94 ] 95 96 defines = [] 97 98 deps = [ 99 ":audio_buffer", 100 "../../api:array_view", 101 "../../rtc_base:checks", 102 "utility:cascaded_biquad_filter", 103 ] 104} 105 106rtc_source_set("aec_dump_interface") { 107 visibility = [ "*" ] 108 sources = [ 109 "include/aec_dump.cc", 110 "include/aec_dump.h", 111 ] 112 113 deps = [ 114 ":api", 115 ":audio_frame_view", 116 ] 117 absl_deps = [ 118 "//third_party/abseil-cpp/absl/base:core_headers", 119 "//third_party/abseil-cpp/absl/types:optional", 120 ] 121} 122 123rtc_library("gain_controller2") { 124 configs += [ ":apm_debug_dump" ] 125 sources = [ 126 "gain_controller2.cc", 127 "gain_controller2.h", 128 ] 129 defines = [] 130 deps = [ 131 ":aec_dump_interface", 132 ":api", 133 ":apm_logging", 134 ":audio_buffer", 135 ":audio_frame_view", 136 "../../common_audio", 137 "../../rtc_base:checks", 138 "../../rtc_base:logging", 139 "../../rtc_base:stringutils", 140 "../../system_wrappers:field_trial", 141 "agc2:adaptive_digital", 142 "agc2:cpu_features", 143 "agc2:fixed_digital", 144 "agc2:gain_applier", 145 "agc2:input_volume_controller", 146 "agc2:vad_wrapper", 147 ] 148} 149 150rtc_library("audio_processing") { 151 visibility = [ "*" ] 152 configs += [ ":apm_debug_dump" ] 153 sources = [ 154 "audio_processing_builder_impl.cc", 155 "audio_processing_impl.cc", 156 "audio_processing_impl.h", 157 "echo_control_mobile_impl.cc", 158 "echo_control_mobile_impl.h", 159 "gain_control_impl.cc", 160 "gain_control_impl.h", 161 "render_queue_item_verifier.h", 162 ] 163 164 defines = [] 165 deps = [ 166 ":aec_dump_interface", 167 ":api", 168 ":apm_logging", 169 ":audio_buffer", 170 ":audio_frame_proxies", 171 ":audio_frame_view", 172 ":audio_processing_statistics", 173 ":gain_controller2", 174 ":high_pass_filter", 175 ":optionally_built_submodule_creators", 176 ":rms_level", 177 "../../api:array_view", 178 "../../api:function_view", 179 "../../api:make_ref_counted", 180 "../../api/audio:aec3_config", 181 "../../api/audio:audio_frame_api", 182 "../../api/audio:echo_control", 183 "../../audio/utility:audio_frame_operations", 184 "../../common_audio:common_audio_c", 185 "../../common_audio/third_party/ooura:fft_size_256", 186 "../../rtc_base:checks", 187 "../../rtc_base:event_tracer", 188 "../../rtc_base:gtest_prod", 189 "../../rtc_base:ignore_wundef", 190 "../../rtc_base:logging", 191 "../../rtc_base:macromagic", 192 "../../rtc_base:safe_minmax", 193 "../../rtc_base:sanitizer", 194 "../../rtc_base:swap_queue", 195 "../../rtc_base:timeutils", 196 "../../rtc_base/experiments:field_trial_parser", 197 "../../rtc_base/synchronization:mutex", 198 "../../rtc_base/system:rtc_export", 199 "../../system_wrappers", 200 "../../system_wrappers:denormal_disabler", 201 "../../system_wrappers:field_trial", 202 "../../system_wrappers:metrics", 203 "aec3", 204 "aec_dump:aec_dump", 205 "aecm:aecm_core", 206 "agc", 207 "agc:gain_control_interface", 208 "agc:legacy_agc", 209 "agc2:input_volume_stats_reporter", 210 "capture_levels_adjuster", 211 "ns", 212 "transient:transient_suppressor_api", 213 "vad", 214 ] 215 absl_deps = [ 216 "//third_party/abseil-cpp/absl/strings", 217 "//third_party/abseil-cpp/absl/types:optional", 218 ] 219 220 deps += [ 221 "../../common_audio", 222 "../../common_audio:fir_filter", 223 "../../common_audio:fir_filter_factory", 224 "../../system_wrappers", 225 ] 226 227 if (rtc_enable_protobuf) { 228 deps += [ "aec_dump:aec_dump_impl" ] 229 } else { 230 deps += [ "aec_dump:null_aec_dump_factory" ] 231 } 232} 233 234rtc_library("residual_echo_detector") { 235 poisonous = [ "default_echo_detector" ] 236 configs += [ ":apm_debug_dump" ] 237 sources = [ 238 "echo_detector/circular_buffer.cc", 239 "echo_detector/circular_buffer.h", 240 "echo_detector/mean_variance_estimator.cc", 241 "echo_detector/mean_variance_estimator.h", 242 "echo_detector/moving_max.cc", 243 "echo_detector/moving_max.h", 244 "echo_detector/normalized_covariance_estimator.cc", 245 "echo_detector/normalized_covariance_estimator.h", 246 "residual_echo_detector.cc", 247 "residual_echo_detector.h", 248 ] 249 deps = [ 250 ":api", 251 ":apm_logging", 252 "../../api:array_view", 253 "../../rtc_base:checks", 254 "../../rtc_base:logging", 255 "../../system_wrappers:metrics", 256 ] 257 absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] 258} 259 260rtc_library("optionally_built_submodule_creators") { 261 sources = [ 262 "optionally_built_submodule_creators.cc", 263 "optionally_built_submodule_creators.h", 264 ] 265 deps = [ 266 "transient:transient_suppressor_api", 267 "transient:transient_suppressor_impl", 268 ] 269} 270 271rtc_source_set("rms_level") { 272 visibility = [ "*" ] 273 sources = [ 274 "rms_level.cc", 275 "rms_level.h", 276 ] 277 deps = [ 278 "../../api:array_view", 279 "../../rtc_base:checks", 280 ] 281 absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] 282} 283 284rtc_library("audio_processing_statistics") { 285 visibility = [ "*" ] 286 sources = [ 287 "include/audio_processing_statistics.cc", 288 "include/audio_processing_statistics.h", 289 ] 290 deps = [ "../../rtc_base/system:rtc_export" ] 291 absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] 292} 293 294rtc_source_set("audio_frame_view") { 295 sources = [ "include/audio_frame_view.h" ] 296 deps = [ "../../api:array_view" ] 297} 298 299if (rtc_enable_protobuf) { 300 proto_library("audioproc_debug_proto") { 301 sources = [ "debug.proto" ] 302 303 proto_out_dir = "modules/audio_processing" 304 } 305} 306 307rtc_library("apm_logging") { 308 configs += [ ":apm_debug_dump" ] 309 sources = [ 310 "logging/apm_data_dumper.cc", 311 "logging/apm_data_dumper.h", 312 ] 313 deps = [ 314 "../../api:array_view", 315 "../../common_audio", 316 "../../rtc_base:checks", 317 "../../rtc_base:stringutils", 318 ] 319 absl_deps = [ 320 "//third_party/abseil-cpp/absl/strings", 321 "//third_party/abseil-cpp/absl/types:optional", 322 ] 323 defines = [] 324} 325 326if (rtc_include_tests) { 327 rtc_source_set("mocks") { 328 testonly = true 329 sources = [ "include/mock_audio_processing.h" ] 330 deps = [ 331 ":aec_dump_interface", 332 ":api", 333 ":audio_buffer", 334 ":audio_processing", 335 ":audio_processing_statistics", 336 "../../test:test_support", 337 ] 338 absl_deps = [ "//third_party/abseil-cpp/absl/strings" ] 339 } 340 341 if (!build_with_chromium) { 342 group("audio_processing_tests") { 343 testonly = true 344 deps = [ 345 ":audioproc_test_utils", 346 "transient:click_annotate", 347 "transient:transient_suppression_test", 348 ] 349 350 if (rtc_enable_protobuf) { 351 deps += [ 352 ":audioproc_unittest_proto", 353 "aec_dump:aec_dump_unittests", 354 "test/conversational_speech", 355 "test/py_quality_assessment", 356 ] 357 } 358 } 359 360 rtc_library("audio_processing_unittests") { 361 testonly = true 362 363 configs += [ ":apm_debug_dump" ] 364 sources = [ 365 "audio_buffer_unittest.cc", 366 "audio_frame_view_unittest.cc", 367 "echo_control_mobile_unittest.cc", 368 "gain_controller2_unittest.cc", 369 "splitting_filter_unittest.cc", 370 "test/fake_recording_device_unittest.cc", 371 ] 372 373 deps = [ 374 ":analog_mic_simulation", 375 ":api", 376 ":apm_logging", 377 ":audio_buffer", 378 ":audio_frame_view", 379 ":audio_processing", 380 ":audioproc_test_utils", 381 ":gain_controller2", 382 ":high_pass_filter", 383 ":mocks", 384 "../../api:array_view", 385 "../../api:make_ref_counted", 386 "../../api:scoped_refptr", 387 "../../api/audio:aec3_config", 388 "../../api/audio:aec3_factory", 389 "../../api/audio:echo_detector_creator", 390 "../../common_audio", 391 "../../common_audio:common_audio_c", 392 "../../rtc_base", 393 "../../rtc_base:checks", 394 "../../rtc_base:gtest_prod", 395 "../../rtc_base:ignore_wundef", 396 "../../rtc_base:macromagic", 397 "../../rtc_base:platform_thread", 398 "../../rtc_base:protobuf_utils", 399 "../../rtc_base:random", 400 "../../rtc_base:rtc_base_tests_utils", 401 "../../rtc_base:rtc_event", 402 "../../rtc_base:safe_conversions", 403 "../../rtc_base:safe_minmax", 404 "../../rtc_base:stringutils", 405 "../../rtc_base:swap_queue", 406 "../../rtc_base:task_queue_for_test", 407 "../../rtc_base:threading", 408 "../../rtc_base/synchronization:mutex", 409 "../../rtc_base/system:arch", 410 "../../rtc_base/system:file_wrapper", 411 "../../system_wrappers", 412 "../../system_wrappers:denormal_disabler", 413 "../../test:field_trial", 414 "../../test:fileutils", 415 "../../test:rtc_expect_death", 416 "../../test:test_support", 417 "../audio_coding:neteq_input_audio_tools", 418 "aec_dump:mock_aec_dump_unittests", 419 "agc:agc_unittests", 420 "agc2:adaptive_digital_gain_applier_unittest", 421 "agc2:biquad_filter_unittests", 422 "agc2:fixed_digital_unittests", 423 "agc2:gain_applier_unittest", 424 "agc2:input_volume_controller_unittests", 425 "agc2:input_volume_stats_reporter_unittests", 426 "agc2:noise_estimator_unittests", 427 "agc2:saturation_protector_unittest", 428 "agc2:speech_level_estimator_unittest", 429 "agc2:test_utils", 430 "agc2:vad_wrapper_unittests", 431 "agc2/rnn_vad:unittests", 432 "capture_levels_adjuster", 433 "capture_levels_adjuster:capture_levels_adjuster_unittests", 434 "test/conversational_speech:unittest", 435 "transient:transient_suppression_unittests", 436 "utility:legacy_delay_estimator_unittest", 437 "utility:pffft_wrapper_unittest", 438 "vad:vad_unittests", 439 "//testing/gtest", 440 ] 441 absl_deps = [ 442 "//third_party/abseil-cpp/absl/strings", 443 "//third_party/abseil-cpp/absl/types:optional", 444 ] 445 446 defines = [] 447 448 if (rtc_prefer_fixed_point) { 449 defines += [ "WEBRTC_AUDIOPROC_FIXED_PROFILE" ] 450 } else { 451 defines += [ "WEBRTC_AUDIOPROC_FLOAT_PROFILE" ] 452 } 453 454 if (rtc_enable_protobuf) { 455 defines += [ "WEBRTC_AUDIOPROC_DEBUG_DUMP" ] 456 deps += [ 457 ":audioproc_debug_proto", 458 ":audioproc_protobuf_utils", 459 ":audioproc_test_utils", 460 ":audioproc_unittest_proto", 461 ":optionally_built_submodule_creators", 462 ":residual_echo_detector", 463 ":rms_level", 464 ":runtime_settings_protobuf_utils", 465 "../../api/audio:audio_frame_api", 466 "../../api/audio:echo_control", 467 "../../rtc_base:rtc_base_tests_utils", 468 "../../rtc_base:rtc_task_queue", 469 "aec_dump", 470 "aec_dump:aec_dump_unittests", 471 ] 472 absl_deps += [ "//third_party/abseil-cpp/absl/flags:flag" ] 473 sources += [ 474 "audio_processing_impl_locking_unittest.cc", 475 "audio_processing_impl_unittest.cc", 476 "audio_processing_unittest.cc", 477 "echo_control_mobile_bit_exact_unittest.cc", 478 "echo_detector/circular_buffer_unittest.cc", 479 "echo_detector/mean_variance_estimator_unittest.cc", 480 "echo_detector/moving_max_unittest.cc", 481 "echo_detector/normalized_covariance_estimator_unittest.cc", 482 "gain_control_unittest.cc", 483 "high_pass_filter_unittest.cc", 484 "residual_echo_detector_unittest.cc", 485 "rms_level_unittest.cc", 486 "test/debug_dump_replayer.cc", 487 "test/debug_dump_replayer.h", 488 "test/debug_dump_test.cc", 489 "test/echo_canceller_test_tools.cc", 490 "test/echo_canceller_test_tools.h", 491 "test/echo_canceller_test_tools_unittest.cc", 492 "test/echo_control_mock.h", 493 "test/test_utils.h", 494 ] 495 } 496 } 497 } 498 499 rtc_library("audio_processing_perf_tests") { 500 testonly = true 501 configs += [ ":apm_debug_dump" ] 502 503 sources = [ "audio_processing_performance_unittest.cc" ] 504 deps = [ 505 ":audio_processing", 506 ":audioproc_test_utils", 507 "../../api:array_view", 508 "../../api/numerics", 509 "../../api/test/metrics:global_metrics_logger_and_exporter", 510 "../../api/test/metrics:metric", 511 "../../rtc_base:platform_thread", 512 "../../rtc_base:protobuf_utils", 513 "../../rtc_base:random", 514 "../../rtc_base:rtc_event", 515 "../../rtc_base:safe_conversions", 516 "../../system_wrappers", 517 "../../test:test_support", 518 ] 519 absl_deps = [ "//third_party/abseil-cpp/absl/strings" ] 520 } 521 522 rtc_library("analog_mic_simulation") { 523 sources = [ 524 "test/fake_recording_device.cc", 525 "test/fake_recording_device.h", 526 ] 527 deps = [ 528 "../../api:array_view", 529 "../../api/audio:audio_frame_api", 530 "../../common_audio", 531 "../../rtc_base:checks", 532 "../../rtc_base:logging", 533 "../../rtc_base:safe_conversions", 534 "../../rtc_base:safe_minmax", 535 "agc2:gain_map", 536 ] 537 absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] 538 } 539 540 if (rtc_enable_protobuf && !build_with_chromium) { 541 rtc_library("audioproc_f_impl") { 542 testonly = true 543 configs += [ ":apm_debug_dump" ] 544 sources = [ 545 "test/aec_dump_based_simulator.cc", 546 "test/aec_dump_based_simulator.h", 547 "test/api_call_statistics.cc", 548 "test/api_call_statistics.h", 549 "test/audio_processing_simulator.cc", 550 "test/audio_processing_simulator.h", 551 "test/audioproc_float_impl.cc", 552 "test/audioproc_float_impl.h", 553 "test/wav_based_simulator.cc", 554 "test/wav_based_simulator.h", 555 ] 556 557 deps = [ 558 ":analog_mic_simulation", 559 ":api", 560 ":apm_logging", 561 ":audio_processing", 562 ":audioproc_debug_proto", 563 ":audioproc_protobuf_utils", 564 ":audioproc_test_utils", 565 ":runtime_settings_protobuf_utils", 566 "../../api/audio:aec3_config_json", 567 "../../api/audio:aec3_factory", 568 "../../api/audio:echo_detector_creator", 569 "../../common_audio", 570 "../../rtc_base:checks", 571 "../../rtc_base:ignore_wundef", 572 "../../rtc_base:logging", 573 "../../rtc_base:protobuf_utils", 574 "../../rtc_base:rtc_json", 575 "../../rtc_base:safe_conversions", 576 "../../rtc_base:stringutils", 577 "../../rtc_base:task_queue_for_test", 578 "../../rtc_base:timeutils", 579 "../../rtc_base/system:file_wrapper", 580 "../../system_wrappers", 581 "../../system_wrappers:field_trial", 582 "../../test:test_support", 583 "aec_dump", 584 "aec_dump:aec_dump_impl", 585 "//testing/gtest", 586 ] 587 absl_deps = [ 588 "//third_party/abseil-cpp/absl/flags:flag", 589 "//third_party/abseil-cpp/absl/flags:parse", 590 "//third_party/abseil-cpp/absl/strings", 591 "//third_party/abseil-cpp/absl/types:optional", 592 ] 593 } # audioproc_f_impl 594 } 595 596 if (rtc_enable_protobuf) { 597 proto_library("audioproc_unittest_proto") { 598 sources = [ "test/unittest.proto" ] 599 proto_out_dir = "modules/audio_processing/test" 600 } 601 602 rtc_library("audioproc_protobuf_utils") { 603 sources = [ 604 "test/protobuf_utils.cc", 605 "test/protobuf_utils.h", 606 ] 607 608 deps = [ 609 ":audioproc_debug_proto", 610 "../../rtc_base:checks", 611 "../../rtc_base:ignore_wundef", 612 "../../rtc_base:protobuf_utils", 613 "../../rtc_base/system:arch", 614 ] 615 } 616 617 rtc_library("runtime_settings_protobuf_utils") { 618 testonly = true 619 sources = [ 620 "test/runtime_setting_util.cc", 621 "test/runtime_setting_util.h", 622 ] 623 624 deps = [ 625 ":api", 626 ":audioproc_debug_proto", 627 ":audioproc_protobuf_utils", 628 "../../rtc_base:checks", 629 ] 630 } 631 } 632} 633 634rtc_library("audioproc_test_utils") { 635 visibility = [ "*" ] 636 testonly = true 637 sources = [ 638 "test/audio_buffer_tools.cc", 639 "test/audio_buffer_tools.h", 640 "test/audio_processing_builder_for_testing.cc", 641 "test/audio_processing_builder_for_testing.h", 642 "test/bitexactness_tools.cc", 643 "test/bitexactness_tools.h", 644 "test/performance_timer.cc", 645 "test/performance_timer.h", 646 "test/simulator_buffers.cc", 647 "test/simulator_buffers.h", 648 "test/test_utils.cc", 649 "test/test_utils.h", 650 ] 651 652 configs += [ ":apm_debug_dump" ] 653 654 deps = [ 655 ":api", 656 ":audio_buffer", 657 ":audio_processing", 658 "../../api:array_view", 659 "../../api/audio:audio_frame_api", 660 "../../common_audio", 661 "../../rtc_base:checks", 662 "../../rtc_base:random", 663 "../../rtc_base/system:arch", 664 "../../system_wrappers", 665 "../../test:fileutils", 666 "../../test:test_support", 667 "../audio_coding:neteq_input_audio_tools", 668 "//testing/gtest", 669 ] 670 absl_deps = [ 671 "//third_party/abseil-cpp/absl/strings", 672 "//third_party/abseil-cpp/absl/types:optional", 673 ] 674} 675