# 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",
    "../../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",
    "../../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 = [ "//webrtc/modules: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",
      "../../base:rtc_base",
      "../../base:rtc_base_approved",
      "../../test:test_support",
      "//testing/gmock",
    ]
  }
}
