# 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_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",
    "saturation_protector_buffer.cc",
    "saturation_protector_buffer.h",
  ]

  configs += [ "..:apm_debug_dump" ]

  deps = [
    ":common",
    ":cpu_features",
    ":gain_applier",
    ":noise_level_estimator",
    ":rnn_vad_with_level",
    "..: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:field_trial",
    "../../../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",
  ]

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

rtc_library("gain_applier") {
  sources = [
    "gain_applier.cc",
    "gain_applier.h",
  ]
  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",
  ]
  deps = [
    ":biquad_filter",
    "..:apm_logging",
    "..:audio_frame_view",
    "../../../api:array_view",
    "../../../rtc_base:checks",
    "../../../system_wrappers",
  ]

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

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

  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 = [ "./*" ]
  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("rnn_vad_with_level_unittests") {
  testonly = true
  sources = [ "vad_with_level_unittest.cc" ]
  deps = [
    ":common",
    ":rnn_vad_with_level",
    "..:audio_frame_view",
    "../../../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",
  ]
}
