# 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")

if (is_android) {
  import("//build/config/android/config.gni")
  import("//build/config/android/rules.gni")
}

config("audio_device_warnings_config") {
  if (is_win && is_clang) {
    cflags = [
      # Disable warnings failing when compiling with Clang on Windows.
      # https://bugs.chromium.org/p/webrtc/issues/detail?id=5366
      "-Wno-microsoft-goto",
    ]
  }
}

rtc_source_set("audio_device_default") {
  visibility = [ "*" ]
  sources = [ "include/audio_device_default.h" ]
  deps = [ "../../api/audio:audio_device" ]
}

rtc_source_set("audio_device") {
  visibility = [ "*" ]
  public_deps += [  # no-presubmit-check TODO(webrtc:8603)
    ":audio_device_api",

    # Deprecated.
    # TODO(webrtc:7452): Remove this public dep. audio_device_impl should
    # be depended on directly if needed.
    ":audio_device_impl",
  ]
}

rtc_source_set("audio_device_api") {
  visibility = [ "*" ]
  sources = [
    "include/audio_device.h",
    "include/audio_device_defines.h",
  ]
  deps = [ "../../api/audio:audio_device" ]
}

rtc_library("audio_device_config") {
  sources = [ "audio_device_config.h" ]
}

rtc_library("audio_device_buffer") {
  sources = [
    "audio_device_buffer.cc",
    "audio_device_buffer.h",
    "fine_audio_buffer.cc",
    "fine_audio_buffer.h",
  ]
  deps = [
    "../../api:array_view",
    "../../api:sequence_checker",
    "../../api/audio:audio_device",
    "../../api/task_queue",
    "../../common_audio:common_audio_c",
    "../../rtc_base:buffer",
    "../../rtc_base:checks",
    "../../rtc_base:event_tracer",
    "../../rtc_base:logging",
    "../../rtc_base:macromagic",
    "../../rtc_base:safe_conversions",
    "../../rtc_base:timestamp_aligner",
    "../../rtc_base:timeutils",
    "../../rtc_base/synchronization:mutex",
    "../../system_wrappers",
    "../../system_wrappers:metrics",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_library("audio_device_generic") {
  sources = [
    "audio_device_generic.cc",
    "audio_device_generic.h",
  ]
  deps = [
    ":audio_device_buffer",
    "../../api/audio:audio_device",
    "../../rtc_base:logging",
  ]
}

rtc_library("audio_device_name") {
  sources = [
    "audio_device_name.cc",
    "audio_device_name.h",
  ]
  deps = [ "//third_party/abseil-cpp/absl/strings:string_view" ]
}

rtc_source_set("windows_core_audio_utility") {
  if (is_win && !build_with_chromium) {
    sources = [
      "win/core_audio_utility_win.cc",
      "win/core_audio_utility_win.h",
    ]

    deps = [
      ":audio_device_name",
      "../../api/audio:audio_device",
      "../../api/units:time_delta",
      "../../rtc_base:checks",
      "../../rtc_base:logging",
      "../../rtc_base:macromagic",
      "../../rtc_base:platform_thread_types",
      "../../rtc_base:stringutils",
      "../../rtc_base/win:windows_version",
      "//third_party/abseil-cpp/absl/strings:strings",
    ]

    libs = [ "oleaut32.lib" ]
  }
}

# An ADM with a dedicated factory method which does not depend on the
# audio_device_impl target. The goal is to use this new structure and
# gradually phase out the old design.
# TODO(henrika): currently only supported on Windows.
rtc_source_set("audio_device_module_from_input_and_output") {
  visibility = [ "*" ]
  if (is_win && !build_with_chromium) {
    sources = [
      "include/audio_device_factory.cc",
      "include/audio_device_factory.h",
    ]
    sources += [
      "win/audio_device_module_win.cc",
      "win/audio_device_module_win.h",
      "win/core_audio_base_win.cc",
      "win/core_audio_base_win.h",
      "win/core_audio_input_win.cc",
      "win/core_audio_input_win.h",
      "win/core_audio_output_win.cc",
      "win/core_audio_output_win.h",
    ]

    deps = [
      ":audio_device_buffer",
      ":windows_core_audio_utility",
      "../../api:make_ref_counted",
      "../../api:scoped_refptr",
      "../../api:sequence_checker",
      "../../api/audio:audio_device",
      "../../api/task_queue",
      "../../rtc_base:checks",
      "../../rtc_base:logging",
      "../../rtc_base:macromagic",
      "../../rtc_base:platform_thread",
      "../../rtc_base:safe_conversions",
      "../../rtc_base:stringutils",
      "../../rtc_base:timeutils",
      "../../rtc_base/win:scoped_com_initializer",
      "../../rtc_base/win:windows_version",
      "//third_party/abseil-cpp/absl/strings:strings",
      "//third_party/abseil-cpp/absl/types:optional",
    ]
  }
}

if (!build_with_chromium) {
  rtc_library("test_audio_device_module") {
    visibility = [ "*" ]
    sources = [
      "include/test_audio_device.cc",
      "include/test_audio_device.h",
      "test_audio_device_impl.cc",
      "test_audio_device_impl.h",
    ]
    deps = [
      ":audio_device_buffer",
      ":audio_device_default",
      ":audio_device_generic",
      ":audio_device_impl",
      "../../api:array_view",
      "../../api:make_ref_counted",
      "../../api:scoped_refptr",
      "../../api/audio:audio_device",
      "../../api/task_queue",
      "../../api/units:time_delta",
      "../../common_audio",
      "../../rtc_base:buffer",
      "../../rtc_base:checks",
      "../../rtc_base:logging",
      "../../rtc_base:macromagic",
      "../../rtc_base:platform_thread",
      "../../rtc_base:random",
      "../../rtc_base:rtc_event",
      "../../rtc_base:safe_conversions",
      "../../rtc_base:timeutils",
      "../../rtc_base/synchronization:mutex",
      "../../rtc_base/task_utils:repeating_task",
      "//third_party/abseil-cpp/absl/strings:string_view",
      "//third_party/abseil-cpp/absl/types:optional",
    ]
  }
}

rtc_library("audio_device_dummy") {
  visibility = [ "*" ]
  sources = [
    "dummy/audio_device_dummy.cc",
    "dummy/audio_device_dummy.h",
  ]
  deps = [
    ":audio_device_buffer",
    ":audio_device_generic",
    "../../api/audio:audio_device",
  ]
}

if (!build_with_chromium) {
  rtc_library("file_audio_device") {
    visibility = [ "*" ]
    sources = [
      "dummy/file_audio_device.cc",
      "dummy/file_audio_device.h",
      "dummy/file_audio_device_factory.cc",
      "dummy/file_audio_device_factory.h",
    ]
    defines = []
    if (rtc_use_dummy_audio_file_devices) {
      defines += [ "WEBRTC_DUMMY_FILE_DEVICES" ]
    }
    deps = [
      ":audio_device_generic",
      "../../rtc_base:checks",
      "../../rtc_base:logging",
      "../../rtc_base:platform_thread",
      "../../rtc_base:stringutils",
      "../../rtc_base:timeutils",
      "../../rtc_base/synchronization:mutex",
      "../../rtc_base/system:file_wrapper",
      "../../system_wrappers",
      "//third_party/abseil-cpp/absl/strings:string_view",
    ]
  }
}

# Contains default implementations of webrtc::AudioDeviceModule for Windows,
# Linux, Mac, iOS and Android.
rtc_library("audio_device_impl") {
  visibility = [ "*" ]
  deps = [
    ":audio_device_buffer",
    ":audio_device_config",
    ":audio_device_default",
    ":audio_device_dummy",
    ":audio_device_generic",
    "../../api:array_view",
    "../../api:make_ref_counted",
    "../../api:refcountedbase",
    "../../api:scoped_refptr",
    "../../api:sequence_checker",
    "../../api/audio:audio_device",
    "../../api/task_queue",
    "../../api/units:time_delta",
    "../../common_audio",
    "../../common_audio:common_audio_c",
    "../../rtc_base:buffer",
    "../../rtc_base:checks",
    "../../rtc_base:logging",
    "../../rtc_base:macromagic",
    "../../rtc_base:platform_thread",
    "../../rtc_base:random",
    "../../rtc_base:rtc_event",
    "../../rtc_base:safe_conversions",
    "../../rtc_base:stringutils",
    "../../rtc_base:timeutils",
    "../../rtc_base/synchronization:mutex",
    "../../rtc_base/system:arch",
    "../../rtc_base/system:file_wrapper",
    "../../rtc_base/task_utils:repeating_task",
    "../../system_wrappers",
    "../../system_wrappers:field_trial",
    "../../system_wrappers:metrics",
    "../utility",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
  if (rtc_include_internal_audio_device && is_ios) {
    deps += [ "../../sdk:audio_device" ]
  }

  sources = [ "include/fake_audio_device.h" ]

  if (build_with_mozilla) {
    sources += [
      "opensl/single_rw_fifo.cc",
      "opensl/single_rw_fifo.h",
    ]
  }

  defines = []
  cflags = []
  if (rtc_audio_device_plays_sinus_tone) {
    defines += [ "AUDIO_DEVICE_PLAYS_SINUS_TONE" ]
  }
  if (rtc_enable_android_aaudio) {
    defines += [ "WEBRTC_AUDIO_DEVICE_INCLUDE_ANDROID_AAUDIO" ]
  }
  if (rtc_include_internal_audio_device) {
    sources += [
      "audio_device_data_observer.cc",
      "audio_device_impl.cc",
      "audio_device_impl.h",
      "include/audio_device_data_observer.h",
    ]
    if (is_android) {
      deps += [ "../../sdk/android:native_api_audio_device_module" ]

      if (build_with_mozilla) {
        include_dirs += [
          "/config/external/nspr",
          "/nsprpub/lib/ds",
          "/nsprpub/pr/include",
        ]
      }
    }
    if (rtc_use_dummy_audio_file_devices) {
      defines += [ "WEBRTC_DUMMY_FILE_DEVICES" ]
    } else {
      if (is_linux || is_chromeos) {
        sources += [
          "linux/alsasymboltable_linux.cc",
          "linux/alsasymboltable_linux.h",
          "linux/audio_device_alsa_linux.cc",
          "linux/audio_device_alsa_linux.h",
          "linux/audio_mixer_manager_alsa_linux.cc",
          "linux/audio_mixer_manager_alsa_linux.h",
          "linux/latebindingsymboltable_linux.cc",
          "linux/latebindingsymboltable_linux.h",
        ]
        defines += [ "WEBRTC_ENABLE_LINUX_ALSA" ]
        libs = [ "dl" ]
        if (rtc_use_x11) {
          libs += [ "X11" ]
          defines += [ "WEBRTC_USE_X11" ]
        }
        if (rtc_include_pulse_audio) {
          defines += [ "WEBRTC_ENABLE_LINUX_PULSE" ]
        }
        sources += [
          "linux/audio_device_pulse_linux.cc",
          "linux/audio_device_pulse_linux.h",
          "linux/audio_mixer_manager_pulse_linux.cc",
          "linux/audio_mixer_manager_pulse_linux.h",
          "linux/pulseaudiosymboltable_linux.cc",
          "linux/pulseaudiosymboltable_linux.h",
        ]
      }
      if (is_mac) {
        sources += [
          "mac/audio_device_mac.cc",
          "mac/audio_device_mac.h",
          "mac/audio_mixer_manager_mac.cc",
          "mac/audio_mixer_manager_mac.h",
        ]
        deps += [
          ":audio_device_impl_frameworks",
          "../third_party/portaudio:mac_portaudio",
        ]
      }
      if (is_win) {
        sources += [
          "win/audio_device_core_win.cc",
          "win/audio_device_core_win.h",
        ]
        libs = [
          # Required for the built-in WASAPI AEC.
          "dmoguids.lib",
          "wmcodecdspuuid.lib",
          "amstrmid.lib",
          "msdmo.lib",
          "oleaut32.lib",
        ]
        deps += [
          "../../rtc_base:win32",
          "../../rtc_base/win:scoped_com_initializer",
        ]
      }
      configs += [ ":audio_device_warnings_config" ]
    }
  } else {
    defines = [ "WEBRTC_DUMMY_AUDIO_BUILD" ]
  }

  if (!build_with_chromium) {
    deps += [ ":file_audio_device" ]

    # TODO(titovartem): remove after downstream is fixed
    sources += [ "dummy/file_audio_device_factory.h" ]
  }
}

if (is_mac) {
  rtc_source_set("audio_device_impl_frameworks") {
    visibility = [ ":*" ]
    frameworks = [
      # Needed for CoreGraphics:
      "ApplicationServices.framework",

      "AudioToolbox.framework",
      "CoreAudio.framework",

      # Needed for CGEventSourceKeyState in audio_device_mac.cc:
      "CoreGraphics.framework",
    ]
  }
}

rtc_source_set("mock_audio_device") {
  visibility = [ "*" ]
  testonly = true
  sources = [
    "include/mock_audio_device.h",
    "include/mock_audio_transport.h",
    "mock_audio_device_buffer.h",
  ]
  deps = [
    ":audio_device",
    ":audio_device_buffer",
    ":audio_device_impl",
    "../../api:make_ref_counted",
    "../../api/audio:audio_device",
    "../../test:test_support",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

if (rtc_include_tests && !build_with_chromium) {
  rtc_library("audio_device_unittests") {
    testonly = true

    sources = [
      "fine_audio_buffer_unittest.cc",
      "include/test_audio_device_unittest.cc",
      "test_audio_device_impl_test.cc",
    ]
    deps = [
      ":audio_device",
      ":audio_device_buffer",
      ":audio_device_generic",
      ":audio_device_impl",
      ":mock_audio_device",
      ":test_audio_device_module",
      "../../api:array_view",
      "../../api:scoped_refptr",
      "../../api:sequence_checker",
      "../../api/audio:audio_device",
      "../../api/task_queue",
      "../../api/task_queue:default_task_queue_factory",
      "../../api/units:time_delta",
      "../../api/units:timestamp",
      "../../common_audio",
      "../../rtc_base:buffer",
      "../../rtc_base:checks",
      "../../rtc_base:logging",
      "../../rtc_base:macromagic",
      "../../rtc_base:race_checker",
      "../../rtc_base:rtc_event",
      "../../rtc_base:safe_conversions",
      "../../rtc_base:timeutils",
      "../../rtc_base/synchronization:mutex",
      "../../system_wrappers",
      "../../test:fileutils",
      "../../test:test_support",
      "../../test/time_controller",
      "//third_party/abseil-cpp/absl/types:optional",
    ]
    if (is_linux || is_chromeos || is_mac || is_win) {
      sources += [ "audio_device_unittest.cc" ]
    }
    if (is_win) {
      sources += [ "win/core_audio_utility_win_unittest.cc" ]
      deps += [
        ":audio_device_module_from_input_and_output",
        ":windows_core_audio_utility",
        "../../rtc_base/win:scoped_com_initializer",
        "../../rtc_base/win:windows_version",
      ]
    }
    if (is_android) {
      deps += [
        "../../sdk/android:internal_jni",
        "../../sdk/android:libjingle_peerconnection_java",
        "../../sdk/android:native_api_jni",
        "../../sdk/android:native_test_jni_onload",
        "../utility",
      ]
    }
    if (!rtc_include_internal_audio_device) {
      defines = [ "WEBRTC_DUMMY_AUDIO_BUILD" ]
    }
  }
}
