xref: /aosp_15_r20/external/webrtc/modules/audio_processing/BUILD.gn (revision d9f758449e529ab9291ac668be2861e7a55c2422)
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