# Copyright 2018 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//media/media_options.gni")
import("//media/webrtc/audio_processing.gni")
import("//third_party/webrtc/webrtc.gni")

config("audio_processing_build_flag") {
  if (audio_processing_in_audio_service_supported) {
    defines = [ "AUDIO_PROCESSING_IN_AUDIO_SERVICE" ]
  }
}

component("webrtc") {
  output_name = "media_webrtc"

  sources = [
    "audio_delay_stats_reporter.cc",
    "audio_delay_stats_reporter.h",
    "echo_information.cc",
    "echo_information.h",
    "webrtc_switches.cc",
    "webrtc_switches.h",
  ]

  defines = [ "IS_MEDIA_WEBRTC_IMPL" ]

  deps = [
    "//base",
    "//third_party/webrtc/modules/audio_processing",
    "//third_party/webrtc/modules/audio_processing:api",
    "//third_party/webrtc/modules/audio_processing:audio_processing_statistics",
    "//third_party/webrtc_overrides:init_webrtc",
  ]

  if (audio_processing_in_audio_service_supported) {
    # Only build this on platforms where it's supported and used.
    sources += [
      "audio_processor.cc",
      "audio_processor.h",
      "audio_processor_controls.h",
    ]

    deps += [
      "//media",
      "//third_party/webrtc/api:libjingle_peerconnection_api",
      "//third_party/webrtc/api/audio:aec3_factory",
      "//third_party/webrtc/modules/audio_processing/aec_dump:aec_dump",
      "//third_party/webrtc/rtc_base:rtc_task_queue",
    ]

    public_configs = [ ":audio_processing_build_flag" ]
  }
}

source_set("unit_tests") {
  testonly = true
  if (audio_processing_in_audio_service_supported) {
    deps = [
      "//base",
      "//base/test:test_support",
      "//media:test_support",
      "//media/webrtc",
      "//testing/gmock",
      "//testing/gtest",
      "//third_party/webrtc/modules/audio_processing",
      "//third_party/webrtc_overrides:init_webrtc",
    ]
    sources = [
      "audio_processor_unittest.cc",
    ]
  }
}
