1# Copyright (c) 2018 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 11rtc_library("rnn_vad") { 12 visibility = [ "../*" ] 13 sources = [ 14 "features_extraction.cc", 15 "features_extraction.h", 16 "rnn.cc", 17 "rnn.h", 18 ] 19 20 defines = [] 21 if (rtc_build_with_neon && current_cpu != "arm64") { 22 suppressed_configs += [ "//build/config/compiler:compiler_arm_fpu" ] 23 cflags = [ "-mfpu=neon" ] 24 } 25 26 deps = [ 27 ":rnn_vad_common", 28 ":rnn_vad_layers", 29 ":rnn_vad_lp_residual", 30 ":rnn_vad_pitch", 31 ":rnn_vad_sequence_buffer", 32 ":rnn_vad_spectral_features", 33 "..:biquad_filter", 34 "..:cpu_features", 35 "../../../../api:array_view", 36 "../../../../rtc_base:checks", 37 "../../../../rtc_base:safe_compare", 38 "../../../../rtc_base:safe_conversions", 39 "//third_party/rnnoise:rnn_vad", 40 ] 41} 42 43rtc_library("rnn_vad_auto_correlation") { 44 sources = [ 45 "auto_correlation.cc", 46 "auto_correlation.h", 47 ] 48 deps = [ 49 ":rnn_vad_common", 50 "../../../../api:array_view", 51 "../../../../rtc_base:checks", 52 "../../utility:pffft_wrapper", 53 ] 54} 55 56rtc_source_set("rnn_vad_common") { 57 # TODO(alessiob): Make this target visibility private. 58 visibility = [ 59 ":*", 60 "..:vad_wrapper", 61 ] 62 sources = [ "common.h" ] 63 deps = [ 64 "../../../../rtc_base/system:arch", 65 "../../../../system_wrappers", 66 ] 67} 68 69rtc_library("rnn_vad_lp_residual") { 70 sources = [ 71 "lp_residual.cc", 72 "lp_residual.h", 73 ] 74 deps = [ 75 "../../../../api:array_view", 76 "../../../../rtc_base:checks", 77 "../../../../rtc_base:safe_compare", 78 ] 79} 80 81rtc_source_set("rnn_vad_layers") { 82 sources = [ 83 "rnn_fc.cc", 84 "rnn_fc.h", 85 "rnn_gru.cc", 86 "rnn_gru.h", 87 ] 88 89 defines = [] 90 if (rtc_build_with_neon && current_cpu != "arm64") { 91 suppressed_configs += [ "//build/config/compiler:compiler_arm_fpu" ] 92 cflags = [ "-mfpu=neon" ] 93 } 94 95 deps = [ 96 ":rnn_vad_common", 97 ":vector_math", 98 "..:cpu_features", 99 "../../../../api:array_view", 100 "../../../../api:function_view", 101 "../../../../rtc_base:checks", 102 "../../../../rtc_base:safe_conversions", 103 "//third_party/rnnoise:rnn_vad", 104 ] 105 if (current_cpu == "x86" || current_cpu == "x64") { 106 deps += [ ":vector_math_avx2" ] 107 } 108 absl_deps = [ "//third_party/abseil-cpp/absl/strings" ] 109} 110 111rtc_source_set("vector_math") { 112 sources = [ "vector_math.h" ] 113 deps = [ 114 "..:cpu_features", 115 "../../../../api:array_view", 116 "../../../../rtc_base:checks", 117 "../../../../rtc_base:safe_conversions", 118 "../../../../rtc_base/system:arch", 119 ] 120} 121 122if (current_cpu == "x86" || current_cpu == "x64") { 123 rtc_library("vector_math_avx2") { 124 sources = [ "vector_math_avx2.cc" ] 125 if (is_win) { 126 cflags = [ "/arch:AVX2" ] 127 } else { 128 cflags = [ 129 "-mavx2", 130 "-mfma", 131 ] 132 } 133 deps = [ 134 ":vector_math", 135 "../../../../api:array_view", 136 "../../../../rtc_base:checks", 137 "../../../../rtc_base:safe_conversions", 138 ] 139 } 140} 141 142rtc_library("rnn_vad_pitch") { 143 sources = [ 144 "pitch_search.cc", 145 "pitch_search.h", 146 "pitch_search_internal.cc", 147 "pitch_search_internal.h", 148 ] 149 150 defines = [] 151 if (rtc_build_with_neon && current_cpu != "arm64") { 152 suppressed_configs += [ "//build/config/compiler:compiler_arm_fpu" ] 153 cflags = [ "-mfpu=neon" ] 154 } 155 156 deps = [ 157 ":rnn_vad_auto_correlation", 158 ":rnn_vad_common", 159 ":vector_math", 160 "..:cpu_features", 161 "../../../../api:array_view", 162 "../../../../rtc_base:checks", 163 "../../../../rtc_base:gtest_prod", 164 "../../../../rtc_base:safe_compare", 165 "../../../../rtc_base:safe_conversions", 166 "../../../../rtc_base/system:arch", 167 ] 168 if (current_cpu == "x86" || current_cpu == "x64") { 169 deps += [ ":vector_math_avx2" ] 170 } 171} 172 173rtc_source_set("rnn_vad_ring_buffer") { 174 sources = [ "ring_buffer.h" ] 175 deps = [ 176 "../../../../api:array_view", 177 "../../../../rtc_base:checks", 178 ] 179} 180 181rtc_source_set("rnn_vad_sequence_buffer") { 182 sources = [ "sequence_buffer.h" ] 183 deps = [ 184 "../../../../api:array_view", 185 "../../../../rtc_base:checks", 186 ] 187} 188 189rtc_library("rnn_vad_spectral_features") { 190 sources = [ 191 "spectral_features.cc", 192 "spectral_features.h", 193 "spectral_features_internal.cc", 194 "spectral_features_internal.h", 195 ] 196 deps = [ 197 ":rnn_vad_common", 198 ":rnn_vad_ring_buffer", 199 ":rnn_vad_symmetric_matrix_buffer", 200 "../../../../api:array_view", 201 "../../../../rtc_base:checks", 202 "../../../../rtc_base:safe_compare", 203 "../../utility:pffft_wrapper", 204 ] 205} 206 207rtc_source_set("rnn_vad_symmetric_matrix_buffer") { 208 sources = [ "symmetric_matrix_buffer.h" ] 209 deps = [ 210 "../../../../api:array_view", 211 "../../../../rtc_base:checks", 212 "../../../../rtc_base:safe_compare", 213 ] 214} 215 216if (rtc_include_tests) { 217 rtc_library("test_utils") { 218 testonly = true 219 sources = [ 220 "test_utils.cc", 221 "test_utils.h", 222 ] 223 deps = [ 224 ":rnn_vad", 225 ":rnn_vad_common", 226 "../../../../api:array_view", 227 "../../../../api:scoped_refptr", 228 "../../../../rtc_base:checks", 229 "../../../../rtc_base:safe_compare", 230 "../../../../test:fileutils", 231 "../../../../test:test_support", 232 ] 233 absl_deps = [ "//third_party/abseil-cpp/absl/strings" ] 234 } 235 236 unittest_resources = [ 237 "../../../../resources/audio_processing/agc2/rnn_vad/band_energies.dat", 238 "../../../../resources/audio_processing/agc2/rnn_vad/pitch_buf_24k.dat", 239 "../../../../resources/audio_processing/agc2/rnn_vad/pitch_lp_res.dat", 240 "../../../../resources/audio_processing/agc2/rnn_vad/pitch_search_int.dat", 241 "../../../../resources/audio_processing/agc2/rnn_vad/samples.pcm", 242 "../../../../resources/audio_processing/agc2/rnn_vad/vad_prob.dat", 243 ] 244 245 if (is_ios) { 246 bundle_data("unittests_bundle_data") { 247 testonly = true 248 sources = unittest_resources 249 outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ] 250 } 251 } 252 253 rtc_library("unittests") { 254 testonly = true 255 sources = [ 256 "auto_correlation_unittest.cc", 257 "features_extraction_unittest.cc", 258 "lp_residual_unittest.cc", 259 "pitch_search_internal_unittest.cc", 260 "pitch_search_unittest.cc", 261 "ring_buffer_unittest.cc", 262 "rnn_fc_unittest.cc", 263 "rnn_gru_unittest.cc", 264 "rnn_unittest.cc", 265 "rnn_vad_unittest.cc", 266 "sequence_buffer_unittest.cc", 267 "spectral_features_internal_unittest.cc", 268 "spectral_features_unittest.cc", 269 "symmetric_matrix_buffer_unittest.cc", 270 "vector_math_unittest.cc", 271 ] 272 273 defines = [] 274 if (rtc_build_with_neon && current_cpu != "arm64") { 275 suppressed_configs += [ "//build/config/compiler:compiler_arm_fpu" ] 276 cflags = [ "-mfpu=neon" ] 277 } 278 279 deps = [ 280 ":rnn_vad", 281 ":rnn_vad_auto_correlation", 282 ":rnn_vad_common", 283 ":rnn_vad_layers", 284 ":rnn_vad_lp_residual", 285 ":rnn_vad_pitch", 286 ":rnn_vad_ring_buffer", 287 ":rnn_vad_sequence_buffer", 288 ":rnn_vad_spectral_features", 289 ":rnn_vad_symmetric_matrix_buffer", 290 ":test_utils", 291 ":vector_math", 292 "..:cpu_features", 293 "../..:audioproc_test_utils", 294 "../../../../api:array_view", 295 "../../../../common_audio/", 296 "../../../../rtc_base:checks", 297 "../../../../rtc_base:logging", 298 "../../../../rtc_base:safe_compare", 299 "../../../../rtc_base:safe_conversions", 300 "../../../../rtc_base:stringutils", 301 "../../../../rtc_base/system:arch", 302 "../../../../test:test_support", 303 "../../utility:pffft_wrapper", 304 "//third_party/rnnoise:rnn_vad", 305 ] 306 if (current_cpu == "x86" || current_cpu == "x64") { 307 deps += [ ":vector_math_avx2" ] 308 } 309 absl_deps = [ "//third_party/abseil-cpp/absl/memory" ] 310 data = unittest_resources 311 if (is_ios) { 312 deps += [ ":unittests_bundle_data" ] 313 } 314 } 315 316 if (!build_with_chromium) { 317 rtc_executable("rnn_vad_tool") { 318 testonly = true 319 sources = [ "rnn_vad_tool.cc" ] 320 deps = [ 321 ":rnn_vad", 322 ":rnn_vad_common", 323 "..:cpu_features", 324 "../../../../api:array_view", 325 "../../../../common_audio", 326 "../../../../rtc_base:logging", 327 "../../../../rtc_base:safe_compare", 328 "../../../../test:test_support", 329 "//third_party/abseil-cpp/absl/flags:flag", 330 "//third_party/abseil-cpp/absl/flags:parse", 331 ] 332 } 333 } 334} 335