# Copyright (c) 2017 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("../../../webrtc.gni")

group("agc2") {
  deps = [
    ":adaptive_digital",
    ":fixed_digital",
  ]
}

rtc_source_set("adaptive_digital") {
  sources = [
    "adaptive_agc.cc",
    "adaptive_agc.h",
    "adaptive_digital_gain_applier.cc",
    "adaptive_digital_gain_applier.h",
    "adaptive_mode_level_estimator.cc",
    "adaptive_mode_level_estimator.h",
    "saturation_protector.cc",
    "saturation_protector.h",
  ]

  configs += [ "..:apm_debug_dump" ]

  deps = [
    ":common",
    ":gain_applier",
    ":noise_level_estimator",
    ":rnn_vad_with_level",
    "..:apm_logging",
    "..:audio_frame_view",
    "../../../api:array_view",
    "../../../common_audio",
    "../../../rtc_base:checks",
    "../../../rtc_base:rtc_base_approved",
    "../../../rtc_base:safe_minmax",
  ]
}

rtc_source_set("biquad_filter") {
  visibility = [ "./*" ]
  sources = [
    "biquad_filter.cc",
    "biquad_filter.h",
  ]
  deps = [
    "../../../api:array_view",
    "../../../rtc_base:rtc_base_approved",
  ]
}

rtc_source_set("common") {
  sources = [
    "agc2_common.h",
  ]
  deps = [
    "../../../rtc_base:rtc_base_approved",
  ]
}

rtc_source_set("fixed_digital") {
  sources = [
    "fixed_digital_level_estimator.cc",
    "fixed_digital_level_estimator.h",
    "fixed_gain_controller.cc",
    "fixed_gain_controller.h",
    "gain_curve_applier.cc",
    "gain_curve_applier.h",
    "interpolated_gain_curve.cc",
    "interpolated_gain_curve.h",
  ]

  configs += [ "..:apm_debug_dump" ]

  deps = [
    ":common",
    "..:apm_logging",
    "..:audio_frame_view",
    "../../../api:array_view",
    "../../../common_audio",
    "../../../rtc_base:checks",
    "../../../rtc_base:gtest_prod",
    "../../../rtc_base:rtc_base_approved",
    "../../../rtc_base:safe_minmax",
    "../../../system_wrappers:metrics_api",
  ]
}

rtc_source_set("gain_applier") {
  sources = [
    "gain_applier.cc",
    "gain_applier.h",
  ]
  deps = [
    ":common",
    "..:audio_frame_view",
    "../../../rtc_base:safe_minmax",
  ]
}

rtc_source_set("noise_level_estimator") {
  sources = [
    "down_sampler.cc",
    "down_sampler.h",
    "noise_level_estimator.cc",
    "noise_level_estimator.h",
    "noise_spectrum_estimator.cc",
    "noise_spectrum_estimator.h",
    "signal_classifier.cc",
    "signal_classifier.h",
  ]
  deps = [
    ":biquad_filter",
    "..:apm_logging",
    "..:audio_frame_view",
    "../../../api:array_view",
    "../../../common_audio",
    "../../../rtc_base:checks",
    "../../../rtc_base:macromagic",
    "../utility:ooura_fft",
  ]

  configs += [ "..:apm_debug_dump" ]
}

rtc_source_set("rnn_vad_with_level") {
  sources = [
    "vad_with_level.cc",
    "vad_with_level.h",
  ]
  deps = [
    "..:audio_frame_view",
    "../../../api:array_view",
    "../../../common_audio",
    "../../../rtc_base:checks",
    "rnn_vad:lib",
  ]
}

rtc_source_set("adaptive_digital_unittests") {
  testonly = true
  configs += [ "..:apm_debug_dump" ]

  sources = [
    "adaptive_digital_gain_applier_unittest.cc",
    "adaptive_mode_level_estimator_unittest.cc",
    "gain_applier_unittest.cc",
    "saturation_protector_unittest.cc",
  ]
  deps = [
    ":adaptive_digital",
    ":common",
    ":gain_applier",
    ":test_utils",
    "..:apm_logging",
    "..:audio_frame_view",
    "../../../api:array_view",
    "../../../common_audio",
    "../../../rtc_base:checks",
    "../../../rtc_base:rtc_base_approved",
    "../../../rtc_base:rtc_base_tests_utils",
  ]
}

rtc_source_set("biquad_filter_unittests") {
  testonly = true
  sources = [
    "biquad_filter_unittest.cc",
  ]
  deps = [
    ":biquad_filter",
    "../../../rtc_base:rtc_base_tests_utils",
  ]
}

rtc_source_set("fixed_digital_unittests") {
  testonly = true
  configs += [ "..:apm_debug_dump" ]

  sources = [
    "agc2_testing_common_unittest.cc",
    "compute_interpolated_gain_curve.cc",
    "compute_interpolated_gain_curve.h",
    "fixed_digital_level_estimator_unittest.cc",
    "fixed_gain_controller_unittest.cc",
    "gain_curve_applier_unittest.cc",
    "interpolated_gain_curve_unittest.cc",
    "limiter.cc",
    "limiter.h",
    "limiter_unittest.cc",
  ]
  deps = [
    ":common",
    ":fixed_digital",
    ":test_utils",
    "..:apm_logging",
    "..:audio_frame_view",
    "../../../api:array_view",
    "../../../common_audio",
    "../../../rtc_base:checks",
    "../../../rtc_base:rtc_base_approved",
    "../../../rtc_base:rtc_base_tests_utils",
    "//third_party/abseil-cpp/absl/memory",
  ]
}

rtc_source_set("noise_estimator_unittests") {
  testonly = true
  configs += [ "..:apm_debug_dump" ]

  sources = [
    "noise_level_estimator_unittest.cc",
    "signal_classifier_unittest.cc",
  ]
  deps = [
    ":noise_level_estimator",
    ":test_utils",
    "..:apm_logging",
    "..:audio_frame_view",
    "../../../api:array_view",
    "../../../rtc_base:checks",
    "../../../rtc_base:rtc_base_approved",
    "../../../rtc_base:rtc_base_tests_utils",
  ]
}

rtc_source_set("test_utils") {
  testonly = true
  visibility = [ ":*" ]
  sources = [
    "agc2_testing_common.cc",
    "agc2_testing_common.h",
    "vector_float_frame.cc",
    "vector_float_frame.h",
  ]
  deps = [
    "..:audio_frame_view",
    "../../../rtc_base:checks",
    "../../../rtc_base:rtc_base_approved",
  ]
}
