# Copyright (c) 2018 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")

rtc_source_set("gain_control_interface") {
  sources = [ "gain_control.h" ]
}

rtc_library("agc") {
  sources = [
    "agc_manager_direct.cc",
    "agc_manager_direct.h",
  ]
  configs += [ "..:apm_debug_dump" ]
  deps = [
    ":clipping_predictor",
    ":clipping_predictor_evaluator",
    ":gain_control_interface",
    ":gain_map",
    ":level_estimation",
    "..:api",
    "..:apm_logging",
    "..:audio_buffer",
    "..:audio_frame_view",
    "../../../api:array_view",
    "../../../common_audio",
    "../../../common_audio:common_audio_c",
    "../../../rtc_base:checks",
    "../../../rtc_base:gtest_prod",
    "../../../rtc_base:logging",
    "../../../rtc_base:safe_minmax",
    "../../../system_wrappers:field_trial",
    "../../../system_wrappers:metrics",
    "../vad",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("analog_gain_stats_reporter") {
  sources = [
    "analog_gain_stats_reporter.cc",
    "analog_gain_stats_reporter.h",
  ]
  deps = [
    "../../../rtc_base:gtest_prod",
    "../../../rtc_base:logging",
    "../../../rtc_base:safe_minmax",
    "../../../system_wrappers:metrics",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("clipping_predictor") {
  sources = [
    "clipping_predictor.cc",
    "clipping_predictor.h",
  ]
  deps = [
    ":clipping_predictor_level_buffer",
    ":gain_map",
    "..:api",
    "..:audio_frame_view",
    "../../../common_audio",
    "../../../rtc_base:checks",
    "../../../rtc_base:logging",
    "../../../rtc_base:safe_minmax",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("clipping_predictor_evaluator") {
  sources = [
    "clipping_predictor_evaluator.cc",
    "clipping_predictor_evaluator.h",
  ]
  deps = [
    "../../../rtc_base:checks",
    "../../../rtc_base:logging",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("clipping_predictor_level_buffer") {
  sources = [
    "clipping_predictor_level_buffer.cc",
    "clipping_predictor_level_buffer.h",
  ]
  deps = [
    "../../../rtc_base:checks",
    "../../../rtc_base:logging",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("level_estimation") {
  sources = [
    "agc.cc",
    "agc.h",
    "loudness_histogram.cc",
    "loudness_histogram.h",
    "utility.cc",
    "utility.h",
  ]
  deps = [
    "../../../api:array_view",
    "../../../rtc_base:checks",
    "../vad",
  ]
}

rtc_library("legacy_agc") {
  visibility = [
    ":*",
    "..:*",
  ]  # Only targets in this file and in
     # audio_processing can depend on
     # this.

  sources = [
    "legacy/analog_agc.cc",
    "legacy/analog_agc.h",
    "legacy/digital_agc.cc",
    "legacy/digital_agc.h",
    "legacy/gain_control.h",
  ]

  deps = [
    "../../../common_audio",
    "../../../common_audio:common_audio_c",
    "../../../common_audio/third_party/ooura:fft_size_256",
    "../../../rtc_base:checks",
    "../../../system_wrappers",
  ]

  if (rtc_build_with_neon) {
    if (current_cpu != "arm64") {
      # Enable compilation for the NEON instruction set.
      suppressed_configs += [ "//build/config/compiler:compiler_arm_fpu" ]
      cflags = [ "-mfpu=neon" ]
    }
  }
}

rtc_source_set("gain_map") {
  sources = [ "gain_map_internal.h" ]
}

if (rtc_include_tests) {
  rtc_library("agc_unittests") {
    testonly = true
    sources = [
      "agc_manager_direct_unittest.cc",
      "analog_gain_stats_reporter_unittest.cc",
      "clipping_predictor_evaluator_unittest.cc",
      "clipping_predictor_level_buffer_unittest.cc",
      "clipping_predictor_unittest.cc",
      "loudness_histogram_unittest.cc",
      "mock_agc.h",
    ]
    configs += [ "..:apm_debug_dump" ]

    deps = [
      ":agc",
      ":analog_gain_stats_reporter",
      ":clipping_predictor",
      ":clipping_predictor_evaluator",
      ":clipping_predictor_level_buffer",
      ":gain_control_interface",
      ":level_estimation",
      "..:mocks",
      "../../../api:array_view",
      "../../../rtc_base:checks",
      "../../../rtc_base:random",
      "../../../rtc_base:safe_conversions",
      "../../../rtc_base:safe_minmax",
      "../../../rtc_base:stringutils",
      "../../../system_wrappers:metrics",
      "../../../test:field_trial",
      "../../../test:fileutils",
      "../../../test:test_support",
      "//testing/gtest",
    ]
    absl_deps = [
      "//third_party/abseil-cpp/absl/strings",
      "//third_party/abseil-cpp/absl/types:optional",
    ]
  }
}
