# 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_library("adaptive_digital") {
  sources = [
    "adaptive_digital_gain_applier.cc",
    "adaptive_digital_gain_applier.h",
    "adaptive_digital_gain_controller.cc",
    "adaptive_digital_gain_controller.h",
    "adaptive_mode_level_estimator.cc",
    "adaptive_mode_level_estimator.h",
    "saturation_protector.cc",
    "saturation_protector.h",
    "saturation_protector_buffer.cc",
    "saturation_protector_buffer.h",
  ]

  visibility = [
    "..:gain_controller2",
    "./*",
  ]

  configs += [ "..:apm_debug_dump" ]

  deps = [
    ":common",
    ":cpu_features",
    ":gain_applier",
    ":noise_level_estimator",
    ":vad_wrapper",
    "..:api",
    "..:apm_logging",
    "..:audio_frame_view",
    "../../../api:array_view",
    "../../../common_audio",
    "../../../rtc_base:checks",
    "../../../rtc_base:logging",
    "../../../rtc_base:rtc_base_approved",
    "../../../rtc_base:safe_compare",
    "../../../rtc_base:safe_minmax",
    "../../../system_wrappers:metrics",
  ]

  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("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" ]
}

rtc_library("fixed_digital") {
  sources = [
    "fixed_digital_level_estimator.cc",
    "fixed_digital_level_estimator.h",
    "interpolated_gain_curve.cc",
    "interpolated_gain_curve.h",
    "limiter.cc",
    "limiter.h",
  ]

  visibility = [
    "..:gain_controller2",
    "../../audio_mixer:audio_mixer_impl",
    "./*",
  ]

  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_conversions",
    "../../../rtc_base:safe_minmax",
    "../../../system_wrappers:metrics",
  ]
}

rtc_library("gain_applier") {
  sources = [
    "gain_applier.cc",
    "gain_applier.h",
  ]

  visibility = [
    "..:gain_controller2",
    "./*",
  ]

  deps = [
    ":common",
    "..:audio_frame_view",
    "../../../api:array_view",
    "../../../rtc_base:safe_minmax",
  ]
}

rtc_library("noise_level_estimator") {
  sources = [
    "noise_level_estimator.cc",
    "noise_level_estimator.h",
  ]
  visibility = [ "./*" ]
  deps = [
    ":biquad_filter",
    "..:apm_logging",
    "..:audio_frame_view",
    "../../../api:array_view",
    "../../../rtc_base:checks",
    "../../../system_wrappers",
  ]

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

rtc_library("vad_wrapper") {
  sources = [
    "vad_wrapper.cc",
    "vad_wrapper.h",
  ]

  visibility = [
    "..:gain_controller2",
    "./*",
  ]

  defines = []
  if (rtc_build_with_neon && current_cpu != "arm64") {
    suppressed_configs += [ "//build/config/compiler:compiler_arm_fpu" ]
    cflags = [ "-mfpu=neon" ]
  }

  deps = [
    ":common",
    ":cpu_features",
    "..:audio_frame_view",
    "../../../api:array_view",
    "../../../common_audio",
    "../../../rtc_base:checks",
    "rnn_vad",
    "rnn_vad:rnn_vad_common",
  ]
}

rtc_library("cpu_features") {
  sources = [
    "cpu_features.cc",
    "cpu_features.h",
  ]

  visibility = [
    "..:gain_controller2",
    "./*",
  ]

  deps = [
    "../../../rtc_base:stringutils",
    "../../../rtc_base/system:arch",
    "../../../system_wrappers",
  ]
}

rtc_library("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_buffer_unittest.cc",
    "saturation_protector_unittest.cc",
  ]
  deps = [
    ":adaptive_digital",
    ":common",
    ":gain_applier",
    ":test_utils",
    "..:api",
    "..:apm_logging",
    "..:audio_frame_view",
    "../../../api:array_view",
    "../../../common_audio",
    "../../../rtc_base:checks",
    "../../../rtc_base:gunit_helpers",
    "../../../rtc_base:rtc_base_approved",
    "../../../test:test_support",
  ]
}

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

rtc_library("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",
    "interpolated_gain_curve_unittest.cc",
    "limiter_db_gain_curve.cc",
    "limiter_db_gain_curve.h",
    "limiter_db_gain_curve_unittest.cc",
    "limiter_unittest.cc",
  ]
  deps = [
    ":common",
    ":fixed_digital",
    ":test_utils",
    "..:apm_logging",
    "..:audio_frame_view",
    "../../../api:array_view",
    "../../../common_audio",
    "../../../rtc_base:checks",
    "../../../rtc_base:gunit_helpers",
    "../../../rtc_base:rtc_base_approved",
    "../../../system_wrappers:metrics",
  ]
}

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

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

rtc_library("vad_wrapper_unittests") {
  testonly = true
  sources = [ "vad_wrapper_unittest.cc" ]
  deps = [
    ":common",
    ":vad_wrapper",
    "..:audio_frame_view",
    "../../../rtc_base:checks",
    "../../../rtc_base:gunit_helpers",
    "../../../rtc_base:safe_compare",
    "../../../test:test_support",
  ]
}

rtc_library("test_utils") {
  testonly = true
  visibility = [
    ":*",
    "..:audio_processing_unittests",
  ]
  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",
  ]
}
