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