# 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",
    "..:aec_core",
    "..:apm_logging",
    "..:audio_frame_view",
    "../../../api:array_view",
    "../../../common_audio",
    "../../../rtc_base:checks",
    "../../../rtc_base:rtc_base_approved",
    "../../../rtc_base:safe_minmax",
    "../vad",
    "../vad:vad_with_level",
    "rnn_vad",
  ]
}

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",
    "..:aec_core",
    "..:apm_logging",
    "..:audio_frame_view",
    "../../../api:array_view",
    "../../../common_audio",
    "../../../rtc_base:checks",
    "../../../rtc_base:macromagic",
  ]

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

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",
    "../vad:vad_with_level",
  ]
}

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",
  ]
}

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",
  ]
}
