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 "../system_wrappers:cpu_features_api", 58 "third_party/ooura:fft_size_256", 59 ] 60 absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] 61 62 defines = [] 63 64 if (rtc_build_with_neon) { 65 deps += [ ":common_audio_neon" ] 66 } 67 68 if (current_cpu == "x86" || current_cpu == "x64") { 69 deps += [ ":common_audio_sse2" ] 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 "../system_wrappers:cpu_features_api", 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:rtc_base_approved", 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:rtc_base_approved", 210 "../rtc_base/memory:aligned_malloc", 211 "../rtc_base/system:arch", 212 "../system_wrappers", 213 ] 214} 215 216rtc_source_set("fir_filter") { 217 visibility += webrtc_default_visibility 218 sources = [ "fir_filter.h" ] 219} 220 221rtc_library("fir_filter_factory") { 222 visibility += webrtc_default_visibility 223 sources = [ 224 "fir_filter_c.cc", 225 "fir_filter_c.h", 226 "fir_filter_factory.cc", 227 "fir_filter_factory.h", 228 ] 229 deps = [ 230 ":fir_filter", 231 "../rtc_base:checks", 232 "../rtc_base:rtc_base_approved", 233 "../rtc_base/system:arch", 234 "../system_wrappers:cpu_features_api", 235 ] 236 if (current_cpu == "x86" || current_cpu == "x64") { 237 deps += [ ":common_audio_sse2" ] 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 266if (rtc_build_with_neon) { 267 rtc_library("common_audio_neon") { 268 sources = [ 269 "fir_filter_neon.cc", 270 "fir_filter_neon.h", 271 "resampler/sinc_resampler_neon.cc", 272 ] 273 274 if (current_cpu != "arm64") { 275 # Enable compilation for the NEON instruction set. 276 suppressed_configs += [ "//build/config/compiler:compiler_arm_fpu" ] 277 cflags = [ "-mfpu=neon" ] 278 } 279 280 deps = [ 281 ":common_audio_neon_c", 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 rtc_library("common_audio_neon_c") { 291 visibility += webrtc_default_visibility 292 sources = [ 293 "signal_processing/cross_correlation_neon.c", 294 "signal_processing/downsample_fast_neon.c", 295 "signal_processing/min_max_operations_neon.c", 296 ] 297 298 if (current_cpu != "arm64") { 299 # Enable compilation for the NEON instruction set. 300 suppressed_configs += [ "//build/config/compiler:compiler_arm_fpu" ] 301 cflags = [ "-mfpu=neon" ] 302 } 303 304 deps = [ 305 ":common_audio_c", 306 "../rtc_base:checks", 307 "../rtc_base:rtc_base_approved", 308 "../rtc_base/system:arch", 309 ] 310 } 311} 312 313if (rtc_include_tests) { 314 rtc_test("common_audio_unittests") { 315 visibility += webrtc_default_visibility 316 testonly = true 317 318 sources = [ 319 "audio_converter_unittest.cc", 320 "audio_util_unittest.cc", 321 "channel_buffer_unittest.cc", 322 "fir_filter_unittest.cc", 323 "real_fourier_unittest.cc", 324 "resampler/push_resampler_unittest.cc", 325 "resampler/push_sinc_resampler_unittest.cc", 326 "resampler/resampler_unittest.cc", 327 "resampler/sinusoidal_linear_chirp_source.cc", 328 "resampler/sinusoidal_linear_chirp_source.h", 329 "ring_buffer_unittest.cc", 330 "signal_processing/real_fft_unittest.cc", 331 "signal_processing/signal_processing_unittest.cc", 332 "smoothing_filter_unittest.cc", 333 "vad/vad_core_unittest.cc", 334 "vad/vad_filterbank_unittest.cc", 335 "vad/vad_gmm_unittest.cc", 336 "vad/vad_sp_unittest.cc", 337 "vad/vad_unittest.cc", 338 "vad/vad_unittest.h", 339 "wav_file_unittest.cc", 340 "wav_header_unittest.cc", 341 "window_generator_unittest.cc", 342 ] 343 344 # Does not compile on iOS for arm: webrtc:5544. 345 if (!is_ios || target_cpu != "arm") { 346 sources += [ "resampler/sinc_resampler_unittest.cc" ] 347 } 348 349 deps = [ 350 ":common_audio", 351 ":common_audio_c", 352 ":fir_filter", 353 ":fir_filter_factory", 354 ":sinc_resampler", 355 "../rtc_base:checks", 356 "../rtc_base:rtc_base_approved", 357 "../rtc_base:rtc_base_tests_utils", 358 "../rtc_base/system:arch", 359 "../system_wrappers:cpu_features_api", 360 "../test:fileutils", 361 "../test:rtc_expect_death", 362 "../test:test_main", 363 "../test:test_support", 364 "//testing/gtest", 365 ] 366 367 if (is_android) { 368 deps += [ "//testing/android/native_test:native_test_support" ] 369 370 shard_timeout = 900 371 } 372 } 373} 374