# Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

import("//build/config/arm.gni")
import("../../webrtc.gni")
if (!build_with_mozilla) {
  import("//third_party/protobuf/proto_library.gni")
}

declare_args() {
  # Disables the usual mode where we trust the reported system delay
  # values the AEC receives. The corresponding define is set appropriately
  # in the code, but it can be force-enabled here for testing.
  aec_untrusted_delay_for_testing = false
}

config("apm_debug_dump") {
  if (apm_debug_dump) {
    defines = [ "WEBRTC_APM_DEBUG_DUMP=1" ]
  } else {
    defines = [ "WEBRTC_APM_DEBUG_DUMP=0" ]
  }
}

rtc_static_library("audio_processing") {
  visibility = [ "*" ]
  configs += [ ":apm_debug_dump" ]
  sources = [
    "aec/aec_resampler.cc",
    "aec/aec_resampler.h",
    "aec/echo_cancellation.cc",
    "aec/echo_cancellation.h",
    "agc/agc.cc",
    "agc/agc.h",
    "agc/agc_manager_direct.cc",
    "agc/agc_manager_direct.h",
    "agc/gain_map_internal.h",
    "agc/loudness_histogram.cc",
    "agc/loudness_histogram.h",
    "agc/utility.cc",
    "agc/utility.h",
    "audio_buffer.cc",
    "audio_buffer.h",
    "audio_processing_impl.cc",
    "audio_processing_impl.h",
    "beamformer/array_util.cc",
    "beamformer/array_util.h",
    "beamformer/complex_matrix.h",
    "beamformer/covariance_matrix_generator.cc",
    "beamformer/covariance_matrix_generator.h",
    "beamformer/matrix.h",
    "beamformer/nonlinear_beamformer.cc",
    "beamformer/nonlinear_beamformer.h",
    "common.h",
    "echo_cancellation_impl.cc",
    "echo_cancellation_impl.h",
    "echo_control_mobile_impl.cc",
    "echo_control_mobile_impl.h",
    "echo_detector/circular_buffer.cc",
    "echo_detector/circular_buffer.h",
    "echo_detector/mean_variance_estimator.cc",
    "echo_detector/mean_variance_estimator.h",
    "echo_detector/moving_max.cc",
    "echo_detector/moving_max.h",
    "echo_detector/normalized_covariance_estimator.cc",
    "echo_detector/normalized_covariance_estimator.h",
    "gain_control_for_experimental_agc.cc",
    "gain_control_for_experimental_agc.h",
    "gain_control_impl.cc",
    "gain_control_impl.h",
    "gain_controller2.cc",
    "gain_controller2.h",
    "include/audio_processing.cc",
    "include/audio_processing.h",
    "include/config.cc",
    "include/config.h",
    "level_estimator_impl.cc",
    "level_estimator_impl.h",
    "low_cut_filter.cc",
    "low_cut_filter.h",
    "noise_suppression_impl.cc",
    "noise_suppression_impl.h",
    "render_queue_item_verifier.h",
    "residual_echo_detector.cc",
    "residual_echo_detector.h",
    "rms_level.cc",
    "rms_level.h",
    "splitting_filter.cc",
    "splitting_filter.h",
    "three_band_filter_bank.cc",
    "three_band_filter_bank.h",
    "transient/common.h",
    "transient/daubechies_8_wavelet_coeffs.h",
    "transient/dyadic_decimator.h",
    "transient/moving_moments.cc",
    "transient/moving_moments.h",
    "transient/transient_detector.cc",
    "transient/transient_detector.h",
    "transient/transient_suppressor.cc",
    "transient/transient_suppressor.h",
    "transient/wpd_node.cc",
    "transient/wpd_node.h",
    "transient/wpd_tree.cc",
    "transient/wpd_tree.h",
    "typing_detection.cc",
    "typing_detection.h",
    "voice_detection_impl.cc",
    "voice_detection_impl.h",
  ]

  defines = []
  deps = [
    ":aec_core",
    ":aec_dump_interface",
    ":apm_logging",
    ":audio_frame_view",
    ":audio_generator_interface",
    ":audio_processing_c",
    ":audio_processing_statistics",
    "../..:typedefs",
    "../..:webrtc_common",
    "../../api:array_view",
    "../../api:optional",
    "../../api/audio:aec3_config",
    "../../api/audio:audio_frame_api",
    "../../api/audio:echo_control",
    "../../audio/utility:audio_frame_operations",
    "../../common_audio:common_audio_c",
    "../../rtc_base:checks",
    "../../rtc_base:deprecation",
    "../../rtc_base:gtest_prod",
    "../../rtc_base:protobuf_utils",
    "../../rtc_base:safe_minmax",
    "../../rtc_base:sanitizer",
    "../../rtc_base/system:file_wrapper",
    "../../system_wrappers:cpu_features_api",
    "../../system_wrappers:field_trial_api",
    "../../system_wrappers:metrics_api",
    "agc2:adaptive_digital",
    "agc2:fixed_digital",
    "agc2:gain_applier",
    "vad",
  ]

  if (aec_untrusted_delay_for_testing) {
    defines += [ "WEBRTC_UNTRUSTED_DELAY" ]
  }

  if (rtc_enable_protobuf) {
    defines += [ "WEBRTC_AUDIOPROC_DEBUG_DUMP" ]
    deps += [ ":audioproc_debug_proto" ]
  }

  if (rtc_enable_intelligibility_enhancer) {
    defines += [ "WEBRTC_INTELLIGIBILITY_ENHANCER=1" ]
    sources += [
      "intelligibility/intelligibility_enhancer.cc",
      "intelligibility/intelligibility_enhancer.h",
      "intelligibility/intelligibility_utils.cc",
      "intelligibility/intelligibility_utils.h",
    ]
  } else {
    defines += [ "WEBRTC_INTELLIGIBILITY_ENHANCER=0" ]
  }

  if (rtc_prefer_fixed_point) {
    defines += [ "WEBRTC_NS_FIXED" ]
  } else {
    defines += [ "WEBRTC_NS_FLOAT" ]
  }

  # TODO(jschuh): Bug 1348: fix this warning.
  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

  deps += [
    "../../common_audio",
    "../../common_audio:fir_filter",
    "../../common_audio:fir_filter_factory",
    "../../rtc_base:rtc_base_approved",
    "../../system_wrappers",
  ]
}

rtc_source_set("audio_processing_statistics") {
  visibility = [ "*" ]
  sources = [
    "include/audio_processing_statistics.cc",
    "include/audio_processing_statistics.h",
  ]
  deps = [
    "../../api:optional",
  ]
}

rtc_source_set("audio_frame_view") {
  sources = [
    "include/audio_frame_view.h",
  ]
  deps = [
    "../../api:array_view",
  ]
}

rtc_source_set("aec_dump_interface") {
  sources = [
    "include/aec_dump.cc",
    "include/aec_dump.h",
  ]

  deps = [
    ":audio_frame_view",
    "../../api:array_view",
    "../../api/audio:audio_frame_api",
    "../../rtc_base:rtc_base_approved",
  ]
}

rtc_source_set("audio_generator_interface") {
  visibility = [ "*" ]
  sources = [
    "include/audio_generator.h",
  ]
  deps = [
    ":audio_frame_view",
    "../../rtc_base:rtc_base_approved",
    "../../system_wrappers:system_wrappers",
  ]
}

rtc_source_set("audio_generator_factory") {
  visibility = [ "*" ]
  sources = [
    "include/audio_generator_factory.cc",
    "include/audio_generator_factory.h",
  ]
  deps = [
    ":audio_generator_interface",
    ":file_audio_generator",
    "../../common_audio:common_audio",
    "../../rtc_base:rtc_base_approved",
    "../../system_wrappers:system_wrappers",
  ]
}

rtc_source_set("file_audio_generator") {
  sources = [
    "audio_generator/file_audio_generator.cc",
    "audio_generator/file_audio_generator.h",
  ]
  deps = [
    ":audio_generator_interface",
    "../../common_audio:common_audio",
    "../../rtc_base:rtc_base_approved",
    "../../system_wrappers:system_wrappers",
  ]
}

rtc_source_set("audio_processing_c") {
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  sources = [
    "agc/legacy/analog_agc.c",
    "agc/legacy/analog_agc.h",
    "agc/legacy/digital_agc.c",
    "agc/legacy/digital_agc.h",
    "agc/legacy/gain_control.h",
  ]

  if (rtc_prefer_fixed_point) {
    sources += [
      "ns/noise_suppression_x.c",
      "ns/noise_suppression_x.h",
      "ns/nsx_core.c",
      "ns/nsx_core.h",
      "ns/nsx_defines.h",
    ]
    if (current_cpu == "mipsel") {
      sources += [ "ns/nsx_core_mips.c" ]
    } else {
      sources += [ "ns/nsx_core_c.c" ]
    }
  } else {
    sources += [
      "ns/defines.h",
      "ns/noise_suppression.c",
      "ns/noise_suppression.h",
      "ns/ns_core.c",
      "ns/ns_core.h",
      "ns/windows_private.h",
    ]
  }

  deps = [
    "../..:typedefs",
    "../..:webrtc_common",
    "../../common_audio",
    "../../common_audio:common_audio_c",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base_approved",
    "../../system_wrappers:cpu_features_api",
  ]

  if (rtc_build_with_neon) {
    sources += [ "ns/nsx_core_neon.c" ]

    if (current_cpu != "arm64") {
      # Enable compilation for the NEON instruction set. This is needed
      # since //build/config/arm.gni only enables NEON for iOS, not Android.
      # This provides the same functionality as webrtc/build/arm_neon.gypi.
      suppressed_configs += [ "//build/config/compiler:compiler_arm_fpu" ]
      cflags = [ "-mfpu=neon" ]
    }

    # Disable LTO on NEON targets due to compiler bug.
    # TODO(fdegans): Enable this. See crbug.com/408997.
    if (rtc_use_lto) {
      cflags -= [
        "-flto",
        "-ffat-lto-objects",
      ]
    }
  }
}

if (rtc_enable_protobuf) {
  proto_library("audioproc_debug_proto") {
    sources = [
      "debug.proto",
    ]

    proto_out_dir = "modules/audio_processing"
  }
}

rtc_source_set("apm_logging") {
  configs += [ ":apm_debug_dump" ]
  sources = [
    "logging/apm_data_dumper.cc",
    "logging/apm_data_dumper.h",
  ]
  deps = [
    "../../api:array_view",
    "../../common_audio:common_audio",
    "../../rtc_base:rtc_base_approved",
    "../../rtc_base:stringutils",
  ]
  defines = []
}

rtc_source_set("aec_core") {
  configs += [ ":apm_debug_dump" ]
  sources = [
    "aec/aec_common.h",
    "aec/aec_core.cc",
    "aec/aec_core.h",
    "aec/aec_core_optimized_methods.h",
    "aecm/aecm_core.cc",
    "aecm/aecm_core.h",
    "aecm/aecm_defines.h",
    "aecm/echo_control_mobile.cc",
    "aecm/echo_control_mobile.h",
    "utility/block_mean_calculator.cc",
    "utility/block_mean_calculator.h",
    "utility/delay_estimator.cc",
    "utility/delay_estimator.h",
    "utility/delay_estimator_internal.h",
    "utility/delay_estimator_wrapper.cc",
    "utility/delay_estimator_wrapper.h",
    "utility/ooura_fft.cc",
    "utility/ooura_fft.h",
    "utility/ooura_fft_tables_common.h",
  ]
  deps = [
    ":apm_logging",
    ":audio_processing_statistics",
    "../..:typedefs",
    "../..:webrtc_common",
    "../../common_audio:common_audio",
    "../../common_audio:common_audio_c",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base_approved",
    "../../rtc_base:sanitizer",
    "../../system_wrappers:cpu_features_api",
    "../../system_wrappers:metrics_api",
  ]
  cflags = []
  defines = []

  if (current_cpu == "x86" || current_cpu == "x64") {
    sources += [
      "aec/aec_core_sse2.cc",
      "utility/ooura_fft_sse2.cc",
      "utility/ooura_fft_tables_neon_sse2.h",
    ]
    if (is_posix || is_fuchsia) {
      cflags += [ "-msse2" ]
    }
  }

  if (rtc_build_with_neon) {
    sources += [
      "aec/aec_core_neon.cc",
      "aecm/aecm_core_neon.cc",
      "utility/ooura_fft_neon.cc",
      "utility/ooura_fft_tables_neon_sse2.h",
    ]

    if (current_cpu != "arm64") {
      # Enable compilation for the NEON instruction set. This is needed
      # since //build/config/arm.gni only enables NEON for iOS, not Android.
      # This provides the same functionality as webrtc/build/arm_neon.gypi.
      suppressed_configs += [ "//build/config/compiler:compiler_arm_fpu" ]
      cflags += [ "-mfpu=neon" ]
    }

    # Disable LTO on NEON targets due to compiler bug.
    # TODO(fdegans): Enable this. See crbug.com/408997.
    if (rtc_use_lto) {
      cflags -= [
        "-flto",
        "-ffat-lto-objects",
      ]
    }

    deps += [ "../../common_audio" ]
  }

  if (current_cpu == "mipsel") {
    sources += [ "aecm/aecm_core_mips.cc" ]
    if (mips_float_abi == "hard") {
      sources += [
        "aec/aec_core_mips.cc",
        "utility/ooura_fft_mips.cc",
      ]
    }
  } else {
    sources += [ "aecm/aecm_core_c.cc" ]
  }

  # TODO(jschuh): Bug 1348: fix this warning.
  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
}

if (rtc_include_tests) {
  rtc_source_set("mocks") {
    testonly = true
    sources = [
      "include/mock_audio_processing.h",
    ]
    deps = [
      ":aec_dump_interface",
      ":audio_processing",
      ":audio_processing_statistics",
      "../../test:test_support",
    ]
  }

  group("audio_processing_tests") {
    testonly = true
    deps = [
      ":audioproc_test_utils",
      ":click_annotate",
      ":nonlinear_beamformer_test",
      ":transient_suppression_test",
    ]

    if (rtc_enable_intelligibility_enhancer) {
      deps += [ ":intelligibility_proc" ]
    }

    if (rtc_enable_protobuf) {
      deps += [
        ":audioproc_f",
        ":audioproc_unittest_proto",
        "aec_dump:aec_dump_unittests",
        "test/conversational_speech",
        "test/py_quality_assessment",
      ]
    }
  }

  rtc_source_set("audio_processing_unittests") {
    testonly = true

    configs += [ ":apm_debug_dump" ]
    sources = [
      "aec/echo_cancellation_unittest.cc",
      "aec/system_delay_unittest.cc",
      "agc/agc_manager_direct_unittest.cc",
      "agc/loudness_histogram_unittest.cc",
      "agc/mock_agc.h",
      "audio_buffer_unittest.cc",
      "audio_frame_view_unittest.cc",
      "beamformer/array_util_unittest.cc",
      "beamformer/complex_matrix_unittest.cc",
      "beamformer/covariance_matrix_generator_unittest.cc",
      "beamformer/matrix_test_helpers.h",
      "beamformer/matrix_unittest.cc",
      "beamformer/mock_nonlinear_beamformer.h",
      "config_unittest.cc",
      "echo_cancellation_impl_unittest.cc",
      "gain_controller2_unittest.cc",
      "splitting_filter_unittest.cc",
      "test/fake_recording_device_unittest.cc",
      "transient/dyadic_decimator_unittest.cc",
      "transient/file_utils.cc",
      "transient/file_utils.h",
      "transient/file_utils_unittest.cc",
      "transient/moving_moments_unittest.cc",
      "transient/transient_detector_unittest.cc",
      "transient/transient_suppressor_unittest.cc",
      "transient/wpd_node_unittest.cc",
      "transient/wpd_tree_unittest.cc",
      "utility/block_mean_calculator_unittest.cc",
      "utility/delay_estimator_unittest.cc",
    ]

    deps = [
      ":aec_core",
      ":analog_mic_simulation",
      ":apm_logging",
      ":audio_frame_view",
      ":audio_processing",
      ":audioproc_test_utils",
      ":file_audio_generator_unittests",
      ":mocks",
      "../..:typedefs",
      "../..:webrtc_common",
      "../../api:array_view",
      "../../api:optional",
      "../../api/audio:aec3_config",
      "../../api/audio:aec3_factory",
      "../../common_audio:common_audio",
      "../../common_audio:common_audio_c",
      "../../rtc_base:checks",
      "../../rtc_base:gtest_prod",
      "../../rtc_base:protobuf_utils",
      "../../rtc_base:rtc_base",
      "../../rtc_base:rtc_base_approved",
      "../../rtc_base:safe_minmax",
      "../../rtc_base/system:file_wrapper",
      "../../system_wrappers",
      "../../system_wrappers:cpu_features_api",
      "../../test:fileutils",
      "../../test:test_support",
      "../audio_coding:neteq_input_audio_tools",
      "aec_dump:mock_aec_dump_unittests",
      "agc2:adaptive_digital_unittests",
      "agc2:fixed_digital_unittests",
      "agc2:noise_estimator_unittests",
      "test/conversational_speech:unittest",
      "vad:vad_unittests",
      "//testing/gtest",
    ]

    defines = []

    if (rtc_enable_intelligibility_enhancer) {
      defines += [ "WEBRTC_INTELLIGIBILITY_ENHANCER=1" ]
      sources += [
        "intelligibility/intelligibility_enhancer_unittest.cc",
        "intelligibility/intelligibility_utils_unittest.cc",
      ]
    } else {
      defines += [ "WEBRTC_INTELLIGIBILITY_ENHANCER=0" ]
    }

    if (rtc_prefer_fixed_point) {
      defines += [ "WEBRTC_AUDIOPROC_FIXED_PROFILE" ]
    } else {
      defines += [ "WEBRTC_AUDIOPROC_FLOAT_PROFILE" ]
    }

    if (rtc_enable_protobuf) {
      defines += [ "WEBRTC_AUDIOPROC_DEBUG_DUMP" ]
      deps += [
        ":audioproc_debug_proto",
        ":audioproc_protobuf_utils",
        ":audioproc_test_utils",
        ":audioproc_unittest_proto",
        "../../api/audio:audio_frame_api",
        "../../rtc_base:rtc_task_queue",
        "aec_dump",
        "aec_dump:aec_dump_unittests",
      ]
      sources += [
        "audio_processing_impl_locking_unittest.cc",
        "audio_processing_impl_unittest.cc",
        "audio_processing_unittest.cc",
        "beamformer/nonlinear_beamformer_unittest.cc",
        "echo_cancellation_bit_exact_unittest.cc",
        "echo_control_mobile_unittest.cc",
        "echo_detector/circular_buffer_unittest.cc",
        "echo_detector/mean_variance_estimator_unittest.cc",
        "echo_detector/moving_max_unittest.cc",
        "echo_detector/normalized_covariance_estimator_unittest.cc",
        "gain_control_unittest.cc",
        "level_estimator_unittest.cc",
        "low_cut_filter_unittest.cc",
        "noise_suppression_unittest.cc",
        "residual_echo_detector_unittest.cc",
        "rms_level_unittest.cc",
        "test/debug_dump_replayer.cc",
        "test/debug_dump_replayer.h",
        "test/debug_dump_test.cc",
        "test/echo_canceller_test_tools.cc",
        "test/echo_canceller_test_tools.h",
        "test/echo_canceller_test_tools_unittest.cc",
        "test/test_utils.h",
        "voice_detection_unittest.cc",
      ]
    }

    if ((!build_with_chromium || is_win) && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }
  }

  rtc_source_set("audio_processing_perf_tests") {
    testonly = true

    sources = [
      "audio_processing_performance_unittest.cc",
    ]
    deps = [
      ":audio_processing",
      ":audioproc_test_utils",
      "../../api:array_view",
      "../../rtc_base:protobuf_utils",
      "../../rtc_base:rtc_base_approved",
      "../../system_wrappers",
      "../../test:perf_test",
      "../../test:test_support",
    ]

    if (rtc_enable_intelligibility_enhancer) {
      defines = [ "WEBRTC_INTELLIGIBILITY_ENHANCER=1" ]
    } else {
      defines = [ "WEBRTC_INTELLIGIBILITY_ENHANCER=0" ]
    }
  }

  rtc_source_set("file_audio_generator_unittests") {
    testonly = true

    sources = [
      "audio_generator/file_audio_generator_unittest.cc",
    ]

    deps = [
      ":audio_generator_factory",
      ":audio_processing",
      ":file_audio_generator",
      "../../rtc_base:rtc_base_approved",
      "../../test:fileutils",
      "../../test:test_support",
    ]
  }

  rtc_source_set("analog_mic_simulation") {
    sources = [
      "test/fake_recording_device.cc",
      "test/fake_recording_device.h",
    ]
    deps = [
      "../../api:array_view",
      "../../api:optional",
      "../../api/audio:audio_frame_api",
      "../../common_audio:common_audio",
      "../../rtc_base:checks",
      "../../rtc_base:rtc_base_approved",
    ]
  }

  if (rtc_enable_protobuf) {
    rtc_source_set("audioproc_f_impl") {
      testonly = true
      sources = [
        "test/aec_dump_based_simulator.cc",
        "test/aec_dump_based_simulator.h",
        "test/audio_processing_simulator.cc",
        "test/audio_processing_simulator.h",
        "test/audioproc_float_impl.cc",
        "test/audioproc_float_impl.h",
        "test/wav_based_simulator.cc",
        "test/wav_based_simulator.h",
      ]

      deps = [
        ":analog_mic_simulation",
        ":audio_processing",
        ":audioproc_debug_proto",
        ":audioproc_protobuf_utils",
        ":audioproc_test_utils",
        "../../api:optional",
        "../../api/audio:aec3_factory",
        "../../common_audio:common_audio",
        "../../rtc_base:checks",
        "../../rtc_base:protobuf_utils",
        "../../rtc_base:rtc_base_approved",
        "../../rtc_base:rtc_json",
        "../../rtc_base:rtc_task_queue",
        "../../rtc_base:stringutils",
        "../../system_wrappers",
        "../../system_wrappers:system_wrappers_default",
        "../../test:test_support",
        "aec_dump",
        "aec_dump:aec_dump_impl",
        "//testing/gtest",
      ]
    }  # audioproc_f_impl
    rtc_executable("audioproc_f") {
      testonly = true
      sources = [
        "test/audioproc_float_main.cc",
      ]
      deps = [
        ":audio_processing",
        "../../api:audioproc_f_api",
        "../../rtc_base:rtc_base_approved",
      ]
    }  # audioproc_f
  }

  rtc_source_set("audioproc_test_utils") {
    visibility = [ "*" ]
    testonly = true
    sources = [
      "test/audio_buffer_tools.cc",
      "test/audio_buffer_tools.h",
      "test/bitexactness_tools.cc",
      "test/bitexactness_tools.h",
      "test/performance_timer.cc",
      "test/performance_timer.h",
      "test/simulator_buffers.cc",
      "test/simulator_buffers.h",
      "test/test_utils.cc",
      "test/test_utils.h",
    ]

    deps = [
      ":audio_processing",
      "../../api:array_view",
      "../../api:optional",
      "../../api/audio:audio_frame_api",
      "../../common_audio",
      "../../rtc_base:checks",
      "../../rtc_base:rtc_base_approved",
      "../../system_wrappers",
      "../../test:fileutils",
      "../../test:test_support",
      "../audio_coding:neteq_input_audio_tools",
      "//testing/gtest",
    ]
  }

  rtc_executable("transient_suppression_test") {
    testonly = true
    sources = [
      "transient/file_utils.cc",
      "transient/file_utils.h",
      "transient/transient_suppression_test.cc",
    ]
    deps = [
      ":audio_processing",
      "../..:typedefs",
      "../..:webrtc_common",
      "../../common_audio:common_audio",
      "../../rtc_base:rtc_base_approved",
      "../../rtc_base/system:file_wrapper",
      "../../system_wrappers",
      "../../system_wrappers:metrics_default",
      "../../test:fileutils",
      "../../test:test_support",
      "//testing/gtest",
    ]
  }

  rtc_executable("click_annotate") {
    testonly = true
    sources = [
      "transient/click_annotate.cc",
      "transient/file_utils.cc",
      "transient/file_utils.h",
    ]
    deps = [
      ":audio_processing",
      "../..:typedefs",
      "../..:webrtc_common",
      "../../rtc_base/system:file_wrapper",
      "../../system_wrappers",
      "../../system_wrappers:metrics_default",
    ]
  }

  rtc_executable("nonlinear_beamformer_test") {
    testonly = true
    sources = [
      "beamformer/nonlinear_beamformer_test.cc",
    ]
    deps = [
      ":audio_processing",
      ":audioproc_test_utils",
      "../../common_audio:common_audio",
      "../../rtc_base:checks",
      "../../rtc_base:rtc_base_approved",
      "../../system_wrappers:metrics_default",
    ]
  }

  if (rtc_enable_intelligibility_enhancer) {
    rtc_executable("intelligibility_proc") {
      testonly = true
      sources = [
        "intelligibility/test/intelligibility_proc.cc",
      ]
      deps = [
        ":audio_processing",
        ":audioproc_test_utils",
        "../../common_audio",
        "../../rtc_base:rtc_base_approved",
        "../../system_wrappers:metrics_default",
        "../../test:test_support",
        "//testing/gtest",
      ]
    }
  }

  if (rtc_enable_protobuf) {
    proto_library("audioproc_unittest_proto") {
      sources = [
        "test/unittest.proto",
      ]
      proto_out_dir = "modules/audio_processing/test"
    }

    rtc_static_library("audioproc_protobuf_utils") {
      sources = [
        "test/protobuf_utils.cc",
        "test/protobuf_utils.h",
      ]

      deps = [
        ":audioproc_debug_proto",
        "../..:typedefs",
        "../..:webrtc_common",
        "../../rtc_base:protobuf_utils",
        "../../rtc_base:rtc_base_approved",
      ]
    }
  }
}
