# Copyright 2017 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("//build/config/chromecast_build.gni")

component("webrtc_component") {
  configs += [ "//third_party/webrtc:common_config" ]
  public_configs = [ "//third_party/webrtc:common_inherited_config" ]
  public_deps = [
    ":init_webrtc",
    ":metrics",
    ":task_queue_factory",
    "//third_party/webrtc/api:callfactory_api",
    "//third_party/webrtc/api:ice_transport_factory",
    "//third_party/webrtc/api:libjingle_logging_api",
    "//third_party/webrtc/api:libjingle_peerconnection_api",
    "//third_party/webrtc/api:media_stream_interface",
    "//third_party/webrtc/api:packet_socket_factory",
    "//third_party/webrtc/api:rtc_error",
    "//third_party/webrtc/api:rtc_stats_api",
    "//third_party/webrtc/api:rtp_parameters",
    "//third_party/webrtc/api:scoped_refptr",
    "//third_party/webrtc/api/audio:aec3_config",
    "//third_party/webrtc/api/audio:aec3_config_json",
    "//third_party/webrtc/api/audio:aec3_factory",
    "//third_party/webrtc/api/audio_codecs:audio_codecs_api",
    "//third_party/webrtc/api/audio_codecs/L16:audio_decoder_L16",
    "//third_party/webrtc/api/audio_codecs/L16:audio_encoder_L16",
    "//third_party/webrtc/api/audio_codecs/g711:audio_decoder_g711",
    "//third_party/webrtc/api/audio_codecs/g711:audio_encoder_g711",
    "//third_party/webrtc/api/audio_codecs/g722:audio_decoder_g722",
    "//third_party/webrtc/api/audio_codecs/g722:audio_encoder_g722",
    "//third_party/webrtc/api/audio_codecs/isac:audio_decoder_isac",
    "//third_party/webrtc/api/audio_codecs/isac:audio_encoder_isac",
    "//third_party/webrtc/api/audio_codecs/opus:audio_decoder_multiopus",
    "//third_party/webrtc/api/audio_codecs/opus:audio_decoder_opus",
    "//third_party/webrtc/api/audio_codecs/opus:audio_encoder_multiopus",
    "//third_party/webrtc/api/audio_codecs/opus:audio_encoder_opus",
    "//third_party/webrtc/api/rtc_event_log:rtc_event_log_factory",
    "//third_party/webrtc/api/video:video_bitrate_allocation",
    "//third_party/webrtc/api/video:video_frame",
    "//third_party/webrtc/api/video:video_frame_i420",
    "//third_party/webrtc/api/video:video_rtp_headers",
    "//third_party/webrtc/api/video_codecs:builtin_video_decoder_factory",
    "//third_party/webrtc/api/video_codecs:rtc_software_fallback_wrappers",
    "//third_party/webrtc/api/video_codecs:video_codecs_api",
    "//third_party/webrtc/common_video",
    "//third_party/webrtc/common_video:common_video",
    "//third_party/webrtc/media:rtc_audio_video",
    "//third_party/webrtc/media:rtc_internal_video_codecs",
    "//third_party/webrtc/media:rtc_media",
    "//third_party/webrtc/media:rtc_media_base",
    "//third_party/webrtc/media:rtc_simulcast_encoder_adapter",
    "//third_party/webrtc/media:rtc_vp9_profile",
    "//third_party/webrtc/modules/audio_device",
    "//third_party/webrtc/modules/audio_device:audio_device_api",
    "//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/modules/audio_processing/aec_dump",
    "//third_party/webrtc/modules/audio_processing/aec_dump:aec_dump",
    "//third_party/webrtc/modules/desktop_capture",
    "//third_party/webrtc/modules/desktop_capture:primitives",
    "//third_party/webrtc/modules/video_coding:video_codec_interface",
    "//third_party/webrtc/modules/video_coding:webrtc_h264",
    "//third_party/webrtc/p2p:libstunprober",
    "//third_party/webrtc/p2p:rtc_p2p",
    "//third_party/webrtc/pc:libjingle_peerconnection",
    "//third_party/webrtc/pc:peerconnection",
    "//third_party/webrtc/pc:rtc_pc",
    "//third_party/webrtc/pc:rtc_pc_base",
    "//third_party/webrtc/rtc_base",
    "//third_party/webrtc/rtc_base:async_resolver_interface",
    "//third_party/webrtc/rtc_base:ip_address",
    "//third_party/webrtc/rtc_base:rtc_base",
    "//third_party/webrtc/rtc_base:rtc_base_approved",
    "//third_party/webrtc/rtc_base:rtc_task_queue",
    "//third_party/webrtc/rtc_base:socket_address",
    "//third_party/webrtc/rtc_base:threading",
    "//third_party/webrtc/rtc_base:timeutils",
    "//third_party/webrtc/rtc_base/third_party/base64",
    "//third_party/webrtc/rtc_base/third_party/sigslot",
    "//third_party/webrtc/rtc_base/third_party/sigslot:sigslot",
    "//third_party/webrtc/stats",
    "//third_party/webrtc/stats:rtc_stats",
    "//third_party/webrtc/stats:rtc_stats_test_utils",
    "//third_party/webrtc/system_wrappers",
  ]
  if (is_chromecast) {
    public_deps += [
      "//third_party/webrtc/api/audio:audio_frame_api",
      "//third_party/webrtc/api/task_queue",
      "//third_party/webrtc/api/video:encoded_image",
      "//third_party/webrtc/media:rtc_h264_profile_id",
      "//third_party/webrtc/media:rtc_media_engine_defaults",
      "//third_party/webrtc/modules/audio_device:audio_device_default",
      "//third_party/webrtc/modules/audio_mixer:audio_mixer_impl",
      "//third_party/webrtc/modules/video_coding:codec_globals_headers",
    ]
  }
  if (is_chromecast || is_nacl) {
    # For chromecast and NaCL, provide a default field trial implementation.
    public_deps += [ "//third_party/webrtc/system_wrappers:field_trial" ]
  } else {
    # Other Chromium flavors get a custom implementation.
    # See the default value of "rtc_exclude_field_trial_default"
    # in https://cs.chromium.org/chromium/src/third_party/webrtc/webrtc.gni
    # for how that is done.
    public_deps += [ ":field_trial" ]
  }
}

source_set("init_webrtc") {
  visibility = [ ":*" ]
  sources = [
    "init_webrtc.cc",
    "init_webrtc.h",
  ]
  configs += [
    "//third_party/webrtc:common_config",
    "//third_party/webrtc:library_impl_config",
  ]
  public_configs = [
    "//third_party/webrtc:common_inherited_config",

    # TODO(mbonadei): Abseil config propagation is needed because
    # WebRTC's BUILD.gn files don't use `public_deps`, there are
    # good reasons for this, but they may disappear in the future.
    # In that case it is ok to remove these two lines.
    "//third_party/abseil-cpp:absl_include_config",
    "//third_party/abseil-cpp:absl_define_config",
  ]
  deps = [
    "//base",
    "//third_party/webrtc/rtc_base",
    "//third_party/webrtc/rtc_base/system:rtc_export",
    "//third_party/webrtc/system_wrappers",
  ]
}

source_set("metrics") {
  # TODO(mbonadei): Migrate WebRTC deps to webrtc_component and uncomment.
  # visibility = [ ":*" ]
  sources = [ "metrics.cc" ]
  deps = [ "//base" ]
}

source_set("field_trial") {
  # TODO(mbonadei): Migrate WebRTC deps to webrtc_component and uncomment.
  # visibility = [ ":*" ]
  sources = [ "field_trial.cc" ]
  deps = [ "//base" ]
}

source_set("task_queue_factory") {
  visibility = [ ":*" ]
  sources = [
    "task_queue_factory.cc",
    "task_queue_factory.h",
  ]
  configs += [ "//third_party/webrtc:library_impl_config" ]
  deps = [
    "//base",
    "//third_party/webrtc/api/task_queue",
    "//third_party/webrtc/rtc_base/system:rtc_export",
  ]
}
