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") 10 11visibility = [ ":*" ] 12 13rtc_library("common_audio") { 14 visibility += [ "*" ] 15 sources = [ 16 "audio_converter.cc", 17 "audio_converter.h", 18 "audio_util.cc", 19 "channel_buffer.cc", 20 "channel_buffer.h", 21 "include/audio_util.h", 22 "real_fourier.cc", 23 "real_fourier.h", 24 "real_fourier_ooura.cc", 25 "real_fourier_ooura.h", 26 "resampler/include/push_resampler.h", 27 "resampler/include/resampler.h", 28 "resampler/push_resampler.cc", 29 "resampler/push_sinc_resampler.cc", 30 "resampler/push_sinc_resampler.h", 31 "resampler/resampler.cc", 32 "resampler/sinc_resampler.cc", 33 "smoothing_filter.cc", 34 "smoothing_filter.h", 35 "vad/include/vad.h", 36 "vad/vad.cc", 37 "wav_file.cc", 38 "wav_file.h", 39 "wav_header.cc", 40 "wav_header.h", 41 "window_generator.cc", 42 "window_generator.h", 43 ] 44 45 deps = [ 46 ":common_audio_c", 47 ":sinc_resampler", 48 "../api:array_view", 49 "../rtc_base:checks", 50 "../rtc_base:gtest_prod", 51 "../rtc_base:logging", 52 "../rtc_base:safe_conversions", 53 "../rtc_base:sanitizer", 54 "../rtc_base:timeutils", 55 "../rtc_base/memory:aligned_malloc", 56 "../rtc_base/system:arch", 57 "../rtc_base/system:file_wrapper", 58 "../system_wrappers", 59 "third_party/ooura:fft_size_256", 60 ] 61 absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] 62 63 defines = [] 64 65 if (rtc_build_with_neon) { 66 deps += [ ":common_audio_neon" ] 67 } 68 69 if (current_cpu == "x86" || current_cpu == "x64") { 70 deps += [ ":common_audio_sse2" ] 71 deps += [ ":common_audio_avx2" ] 72 } 73} 74 75rtc_source_set("mock_common_audio") { 76 visibility += webrtc_default_visibility 77 testonly = true 78 sources = [ 79 "mocks/mock_smoothing_filter.h", 80 "vad/mock/mock_vad.h", 81 ] 82 deps = [ 83 ":common_audio", 84 "../test:test_support", 85 ] 86} 87 88rtc_source_set("common_audio_c_arm_asm") { 89 sources = [] 90 deps = [] 91 if (current_cpu == "arm") { 92 sources += [ "signal_processing/complex_bit_reverse_arm.S" ] 93 94 if (arm_version >= 7) { 95 sources += [ "signal_processing/filter_ar_fast_q12_armv7.S" ] 96 } else { 97 sources += [ "signal_processing/filter_ar_fast_q12.c" ] 98 } 99 deps += [ "../rtc_base/system:asm_defines" ] 100 } 101} 102 103rtc_library("common_audio_c") { 104 visibility += webrtc_default_visibility 105 sources = [ 106 "ring_buffer.c", 107 "ring_buffer.h", 108 "signal_processing/auto_corr_to_refl_coef.c", 109 "signal_processing/auto_correlation.c", 110 "signal_processing/complex_fft_tables.h", 111 "signal_processing/copy_set_operations.c", 112 "signal_processing/cross_correlation.c", 113 "signal_processing/division_operations.c", 114 "signal_processing/downsample_fast.c", 115 "signal_processing/energy.c", 116 "signal_processing/filter_ar.c", 117 "signal_processing/filter_ma_fast_q12.c", 118 "signal_processing/get_hanning_window.c", 119 "signal_processing/get_scaling_square.c", 120 "signal_processing/ilbc_specific_functions.c", 121 "signal_processing/include/real_fft.h", 122 "signal_processing/include/signal_processing_library.h", 123 "signal_processing/include/spl_inl.h", 124 "signal_processing/include/spl_inl_armv7.h", 125 "signal_processing/levinson_durbin.c", 126 "signal_processing/lpc_to_refl_coef.c", 127 "signal_processing/min_max_operations.c", 128 "signal_processing/randomization_functions.c", 129 "signal_processing/real_fft.c", 130 "signal_processing/refl_coef_to_lpc.c", 131 "signal_processing/resample.c", 132 "signal_processing/resample_48khz.c", 133 "signal_processing/resample_by_2.c", 134 "signal_processing/resample_by_2_internal.c", 135 "signal_processing/resample_by_2_internal.h", 136 "signal_processing/resample_fractional.c", 137 "signal_processing/spl_init.c", 138 "signal_processing/spl_inl.c", 139 "signal_processing/spl_sqrt.c", 140 "signal_processing/splitting_filter.c", 141 "signal_processing/sqrt_of_one_minus_x_squared.c", 142 "signal_processing/vector_scaling_operations.c", 143 "vad/include/webrtc_vad.h", 144 "vad/vad_core.c", 145 "vad/vad_core.h", 146 "vad/vad_filterbank.c", 147 "vad/vad_filterbank.h", 148 "vad/vad_gmm.c", 149 "vad/vad_gmm.h", 150 "vad/vad_sp.c", 151 "vad/vad_sp.h", 152 "vad/webrtc_vad.c", 153 ] 154 155 if (current_cpu == "mipsel") { 156 sources += [ 157 "signal_processing/complex_bit_reverse_mips.c", 158 "signal_processing/complex_fft_mips.c", 159 "signal_processing/cross_correlation_mips.c", 160 "signal_processing/downsample_fast_mips.c", 161 "signal_processing/filter_ar_fast_q12_mips.c", 162 "signal_processing/include/spl_inl_mips.h", 163 "signal_processing/min_max_operations_mips.c", 164 "signal_processing/resample_by_2_mips.c", 165 ] 166 if (mips_dsp_rev > 0) { 167 sources += [ "signal_processing/vector_scaling_operations_mips.c" ] 168 } 169 } else { 170 sources += [ "signal_processing/complex_fft.c" ] 171 } 172 173 if (current_cpu != "arm" && current_cpu != "mipsel") { 174 sources += [ 175 "signal_processing/complex_bit_reverse.c", 176 "signal_processing/filter_ar_fast_q12.c", 177 ] 178 } 179 180 deps = [ 181 ":common_audio_c_arm_asm", 182 ":common_audio_cc", 183 "../rtc_base:checks", 184 "../rtc_base:compile_assert_c", 185 "../rtc_base:sanitizer", 186 "../rtc_base/system:arch", 187 "../system_wrappers", 188 "third_party/ooura:fft_size_256", 189 "third_party/spl_sqrt_floor", 190 ] 191} 192 193rtc_library("common_audio_cc") { 194 sources = [ 195 "signal_processing/dot_product_with_scale.cc", 196 "signal_processing/dot_product_with_scale.h", 197 ] 198 199 deps = [ 200 "../rtc_base:safe_conversions", 201 "../system_wrappers", 202 ] 203} 204 205rtc_source_set("sinc_resampler") { 206 sources = [ "resampler/sinc_resampler.h" ] 207 deps = [ 208 "../rtc_base:gtest_prod", 209 "../rtc_base/memory:aligned_malloc", 210 "../rtc_base/system:arch", 211 "../system_wrappers", 212 ] 213} 214 215rtc_source_set("fir_filter") { 216 visibility += webrtc_default_visibility 217 sources = [ "fir_filter.h" ] 218} 219 220rtc_library("fir_filter_factory") { 221 visibility += webrtc_default_visibility 222 sources = [ 223 "fir_filter_c.cc", 224 "fir_filter_c.h", 225 "fir_filter_factory.cc", 226 "fir_filter_factory.h", 227 ] 228 deps = [ 229 ":fir_filter", 230 "../rtc_base:checks", 231 "../rtc_base/system:arch", 232 "../system_wrappers", 233 ] 234 if (current_cpu == "x86" || current_cpu == "x64") { 235 deps += [ ":common_audio_sse2" ] 236 deps += [ ":common_audio_avx2" ] 237 } 238 if (rtc_build_with_neon) { 239 deps += [ ":common_audio_neon" ] 240 } 241} 242 243if (current_cpu == "x86" || current_cpu == "x64") { 244 rtc_library("common_audio_sse2") { 245 sources = [ 246 "fir_filter_sse.cc", 247 "fir_filter_sse.h", 248 "resampler/sinc_resampler_sse.cc", 249 ] 250 251 if (is_posix || is_fuchsia) { 252 cflags = [ "-msse2" ] 253 } 254 255 deps = [ 256 ":fir_filter", 257 ":sinc_resampler", 258 "../rtc_base:checks", 259 "../rtc_base/memory:aligned_malloc", 260 ] 261 } 262 263 rtc_library("common_audio_avx2") { 264 sources = [ 265 "fir_filter_avx2.cc", 266 "fir_filter_avx2.h", 267 "resampler/sinc_resampler_avx2.cc", 268 ] 269 270 if (is_win) { 271 cflags = [ "/arch:AVX2" ] 272 } else { 273 cflags = [ 274 "-mavx2", 275 "-mfma", 276 ] 277 } 278 279 deps = [ 280 ":fir_filter", 281 ":sinc_resampler", 282 "../rtc_base:checks", 283 "../rtc_base/memory:aligned_malloc", 284 ] 285 } 286} 287 288if (rtc_build_with_neon) { 289 rtc_library("common_audio_neon") { 290 sources = [ 291 "fir_filter_neon.cc", 292 "fir_filter_neon.h", 293 "resampler/sinc_resampler_neon.cc", 294 ] 295 296 if (current_cpu != "arm64") { 297 # Enable compilation for the NEON instruction set. 298 suppressed_configs += [ "//build/config/compiler:compiler_arm_fpu" ] 299 cflags = [ "-mfpu=neon" ] 300 } 301 302 deps = [ 303 ":common_audio_neon_c", 304 ":fir_filter", 305 ":sinc_resampler", 306 "../rtc_base:checks", 307 "../rtc_base/memory:aligned_malloc", 308 ] 309 } 310 311 rtc_library("common_audio_neon_c") { 312 visibility += webrtc_default_visibility 313 sources = [ 314 "signal_processing/cross_correlation_neon.c", 315 "signal_processing/downsample_fast_neon.c", 316 "signal_processing/min_max_operations_neon.c", 317 ] 318 319 if (current_cpu != "arm64") { 320 # Enable compilation for the NEON instruction set. 321 suppressed_configs += [ "//build/config/compiler:compiler_arm_fpu" ] 322 cflags = [ "-mfpu=neon" ] 323 } 324 325 deps = [ 326 ":common_audio_c", 327 "../rtc_base:checks", 328 "../rtc_base/system:arch", 329 ] 330 } 331} 332 333if (rtc_include_tests && !build_with_chromium) { 334 rtc_test("common_audio_unittests") { 335 visibility += webrtc_default_visibility 336 testonly = true 337 338 sources = [ 339 "audio_converter_unittest.cc", 340 "audio_util_unittest.cc", 341 "channel_buffer_unittest.cc", 342 "fir_filter_unittest.cc", 343 "real_fourier_unittest.cc", 344 "resampler/push_resampler_unittest.cc", 345 "resampler/push_sinc_resampler_unittest.cc", 346 "resampler/resampler_unittest.cc", 347 "resampler/sinusoidal_linear_chirp_source.cc", 348 "resampler/sinusoidal_linear_chirp_source.h", 349 "ring_buffer_unittest.cc", 350 "signal_processing/real_fft_unittest.cc", 351 "signal_processing/signal_processing_unittest.cc", 352 "smoothing_filter_unittest.cc", 353 "vad/vad_core_unittest.cc", 354 "vad/vad_filterbank_unittest.cc", 355 "vad/vad_gmm_unittest.cc", 356 "vad/vad_sp_unittest.cc", 357 "vad/vad_unittest.cc", 358 "vad/vad_unittest.h", 359 "wav_file_unittest.cc", 360 "wav_header_unittest.cc", 361 "window_generator_unittest.cc", 362 ] 363 364 # Does not compile on iOS for arm: webrtc:5544. 365 if (!is_ios || target_cpu != "arm") { 366 sources += [ "resampler/sinc_resampler_unittest.cc" ] 367 } 368 369 deps = [ 370 ":common_audio", 371 ":common_audio_c", 372 ":fir_filter", 373 ":fir_filter_factory", 374 ":sinc_resampler", 375 "../rtc_base:checks", 376 "../rtc_base:macromagic", 377 "../rtc_base:rtc_base_tests_utils", 378 "../rtc_base:stringutils", 379 "../rtc_base:timeutils", 380 "../rtc_base/system:arch", 381 "../system_wrappers", 382 "../test:fileutils", 383 "../test:rtc_expect_death", 384 "../test:test_main", 385 "../test:test_support", 386 "//testing/gtest", 387 ] 388 389 if (is_android) { 390 deps += [ "//testing/android/native_test:native_test_support" ] 391 392 shard_timeout = 900 393 } 394 } 395} 396