# Copyright (c) 2014 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("audio_mixer") {
  public_deps = [
    ":audio_frame_manipulator",
    ":audio_mixer_impl",
  ]
}

rtc_static_library("audio_mixer_impl") {
  sources = [
    "audio_mixer_impl.cc",
    "audio_mixer_impl.h",
    "default_output_rate_calculator.cc",
    "default_output_rate_calculator.h",
    "frame_combiner.cc",
    "frame_combiner.h",
    "output_rate_calculator.h",
  ]

  public = [
    "audio_mixer_impl.h",
    "default_output_rate_calculator.h",  # For creating a mixer with limiter disabled.
    "frame_combiner.h",
  ]

  public_deps = [
    "../../api:audio_mixer_api",
  ]

  deps = [
    ":audio_frame_manipulator",
    "..:module_api",
    "../..:webrtc_common",
    "../../audio/utility:audio_frame_operations",
    "../../rtc_base:rtc_base_approved",
    "../../system_wrappers",
    "../audio_processing",
  ]
}

rtc_static_library("audio_frame_manipulator") {
  visibility = [
    ":*",
    "../../modules:*",
  ]

  sources = [
    "audio_frame_manipulator.cc",
    "audio_frame_manipulator.h",
  ]

  deps = [
    "..:module_api",
    "../../audio/utility",
    "../../rtc_base:rtc_base_approved",
  ]
}

if (rtc_include_tests) {
  rtc_source_set("audio_mixer_unittests") {
    testonly = true

    # Skip restricting visibility on mobile platforms since the tests on those
    # gets additional generated targets which would require many lines here to
    # cover (which would be confusing to read and hard to maintain).
    if (!is_android && !is_ios) {
      visibility = [ "..:modules_unittests" ]
    }
    sources = [
      "audio_frame_manipulator_unittest.cc",
      "audio_mixer_impl_unittest.cc",
      "frame_combiner_unittest.cc",
      "gain_change_calculator.cc",
      "gain_change_calculator.h",
      "sine_wave_generator.cc",
      "sine_wave_generator.h",
    ]
    deps = [
      ":audio_frame_manipulator",
      ":audio_mixer_impl",
      "..:module_api",
      "../../api:audio_mixer_api",
      "../../audio/utility:audio_frame_operations",
      "../../rtc_base:rtc_base_approved",
      "../../rtc_base:rtc_task_queue",
      "../../test:test_support",
      "//testing/gmock",
    ]
  }
}
