# Copyright (c) 2015 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")

rtc_source_set("call_interfaces") {
  sources = [
    "audio_receive_stream.h",
    "audio_send_stream.h",
    "audio_state.h",
    "call.h",
    "flexfec_receive_stream.h",
    "syncable.cc",
    "syncable.h",
  ]
  if (!build_with_mozilla) {
    sources += [ "audio_send_stream.cc" ]
  }
  deps = [
    ":rtp_interfaces",
    ":video_stream_api",
    "..:webrtc_common",
    "../:typedefs",
    "../api:fec_controller_api",
    "../api:libjingle_peerconnection_api",
    "../api:optional",
    "../api:transport_api",
    "../api/audio:audio_mixer_api",
    "../api/audio_codecs:audio_codecs_api",
    "../modules/audio_processing:audio_processing_statistics",
    "../rtc_base:rtc_base",
    "../rtc_base:rtc_base_approved",
  ]
}

# TODO(nisse): These RTP targets should be moved elsewhere
# when interfaces have stabilized. See also TODO for |mock_rtp_interfaces|.
rtc_source_set("rtp_interfaces") {
  sources = [
    "bitrate_constraints.cc",
    "bitrate_constraints.h",
    "rtcp_packet_sink_interface.h",
    "rtp_config.cc",
    "rtp_config.h",
    "rtp_packet_sink_interface.h",
    "rtp_stream_receiver_controller_interface.h",
    "rtp_transport_controller_send_interface.h",
  ]
  deps = [
    "../api:array_view",
    "../api:optional",
    "../rtc_base:rtc_base_approved",
  ]
}

rtc_source_set("rtp_receiver") {
  visibility = [ "*" ]
  sources = [
    "rtcp_demuxer.cc",
    "rtcp_demuxer.h",
    "rtp_demuxer.cc",
    "rtp_demuxer.h",
    "rtp_rtcp_demuxer_helper.cc",
    "rtp_rtcp_demuxer_helper.h",
    "rtp_stream_receiver_controller.cc",
    "rtp_stream_receiver_controller.h",
    "rtx_receive_stream.cc",
    "rtx_receive_stream.h",
    "ssrc_binding_observer.h",
  ]
  deps = [
    ":rtp_interfaces",
    "..:webrtc_common",
    "../api:array_view",
    "../api:libjingle_peerconnection_api",
    "../api:optional",
    "../modules/rtp_rtcp",
    "../modules/rtp_rtcp:rtp_rtcp_format",
    "../rtc_base:checks",
    "../rtc_base:rtc_base_approved",
  ]
}

rtc_source_set("rtp_sender") {
  sources = [
    "rtp_transport_controller_send.cc",
    "rtp_transport_controller_send.h",
  ]
  deps = [
    ":bitrate_configurator",
    ":rtp_interfaces",
    "..:webrtc_common",
    "../modules/congestion_controller",
    "../modules/pacing",
    "../modules/utility",
    "../rtc_base:rtc_base",
    "../rtc_base:rtc_base_approved",
  ]
}

rtc_source_set("bitrate_configurator") {
  sources = [
    "rtp_bitrate_configurator.cc",
    "rtp_bitrate_configurator.h",
  ]
  deps = [
    ":rtp_interfaces",
    "../rtc_base:checks",
    "../rtc_base:rtc_base_approved",
  ]
}

rtc_source_set("bitrate_allocator") {
  sources = [
    "bitrate_allocator.cc",
    "bitrate_allocator.h",
  ]
  deps = [
    "../modules/bitrate_controller",
    "../rtc_base:checks",
    "../rtc_base:rtc_base_approved",
    "../rtc_base:sequenced_task_checker",
    "../system_wrappers",
    "../system_wrappers:field_trial_api",
    "../system_wrappers:metrics_api",
  ]
  if (!build_with_chromium && is_clang) {
    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
    suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
  }
}

rtc_static_library("call") {
  sources = [
    "call.cc",
    "callfactory.cc",
    "callfactory.h",
    "flexfec_receive_stream_impl.cc",
    "flexfec_receive_stream_impl.h",
  ]

  if (!build_with_chromium && is_clang) {
    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
    suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
  }

  deps = [
    ":bitrate_allocator",
    ":call_interfaces",
    ":rtp_interfaces",
    ":rtp_receiver",
    ":rtp_sender",
    ":video_stream_api",
    "..:webrtc_common",
    "../api:callfactory_api",
    "../api:optional",
    "../api:transport_api",
    "../audio",
    "../logging:rtc_event_audio",
    "../logging:rtc_event_log_api",
    "../logging:rtc_event_rtp_rtcp",
    "../logging:rtc_event_video",
    "../logging:rtc_stream_config",
    "../modules/bitrate_controller",
    "../modules/congestion_controller",
    "../modules/pacing",
    "../modules/rtp_rtcp",
    "../modules/rtp_rtcp:rtp_rtcp_format",
    "../modules/utility",
    "../modules/video_coding:video_coding",
    "../rtc_base:checks",
    "../rtc_base:rate_limiter",
    "../rtc_base:rtc_base_approved",
    "../rtc_base:rtc_task_queue",
    "../rtc_base:sequenced_task_checker",
    "../system_wrappers",
    "../system_wrappers:metrics_api",
    "../video",
  ]
}

rtc_source_set("video_stream_api") {
  sources = [
    "video_config.cc",
    "video_config.h",
    "video_receive_stream.cc",
    "video_receive_stream.h",
    "video_send_stream.cc",
    "video_send_stream.h",
  ]
  deps = [
    ":rtp_interfaces",
    "../:typedefs",
    "../:webrtc_common",
    "../api:libjingle_peerconnection_api",
    "../api:optional",
    "../api:transport_api",
    "../api:video_frame_api",
    "../common_video:common_video",
    "../modules/rtp_rtcp:rtp_rtcp_format",
    "../rtc_base:checks",
    "../rtc_base:rtc_base_approved",
  ]
}

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

    sources = [
      "bitrate_allocator_unittest.cc",
      "bitrate_estimator_tests.cc",
      "call_unittest.cc",
      "flexfec_receive_stream_unittest.cc",
      "rtcp_demuxer_unittest.cc",
      "rtp_bitrate_configurator_unittest.cc",
      "rtp_demuxer_unittest.cc",
      "rtp_rtcp_demuxer_helper_unittest.cc",
      "rtx_receive_stream_unittest.cc",
    ]
    deps = [
      ":bitrate_allocator",
      ":bitrate_configurator",
      ":call",
      ":call_interfaces",
      ":mock_rtp_interfaces",
      ":rtp_interfaces",
      ":rtp_receiver",
      ":rtp_sender",
      "..:webrtc_common",
      "../api:array_view",
      "../api:libjingle_peerconnection_api",
      "../api:mock_audio_mixer",
      "../api/audio_codecs:builtin_audio_decoder_factory",
      "../audio:audio",
      "../logging:rtc_event_log_api",
      "../logging:rtc_event_log_impl_base",
      "../modules/audio_device:mock_audio_device",
      "../modules/audio_mixer",
      "../modules/audio_mixer:audio_mixer_impl",
      "../modules/audio_processing:mocks",
      "../modules/bitrate_controller",
      "../modules/congestion_controller",
      "../modules/pacing",
      "../modules/pacing:mock_paced_sender",
      "../modules/rtp_rtcp",
      "../modules/rtp_rtcp:mock_rtp_rtcp",
      "../modules/rtp_rtcp:rtp_rtcp_format",
      "../modules/utility:mock_process_thread",
      "../rtc_base:checks",
      "../rtc_base:rtc_base_approved",
      "../system_wrappers",
      "../test:audio_codec_mocks",
      "../test:direct_transport",
      "../test:test_common",
      "../test:test_support",
      "../test:video_test_common",
      "//testing/gtest",
    ]
    if (!build_with_chromium && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }
  }

  rtc_source_set("call_perf_tests") {
    testonly = true

    sources = [
      "call_perf_tests.cc",
      "rampup_tests.cc",
      "rampup_tests.h",
    ]
    deps = [
      ":call_interfaces",
      ":video_stream_api",
      "..:webrtc_common",
      "../api/audio_codecs:builtin_audio_encoder_factory",
      "../logging:rtc_event_log_api",
      "../modules/audio_coding",
      "../modules/audio_mixer:audio_mixer_impl",
      "../modules/rtp_rtcp",
      "../rtc_base:checks",
      "../rtc_base:rtc_base_approved",
      "../system_wrappers",
      "../system_wrappers:metrics_default",
      "../system_wrappers:runtime_enabled_features_default",
      "../test:direct_transport",
      "../test:fake_audio_device",
      "../test:field_trial",
      "../test:perf_test",
      "../test:test_common",
      "../test:test_support",
      "../test:video_test_common",
      "../video",
      "//testing/gtest",
    ]
    if (!build_with_chromium && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }
  }

  # TODO(eladalon): This should be moved, as with the TODO for |rtp_interfaces|.
  rtc_source_set("mock_rtp_interfaces") {
    testonly = true

    sources = [
      "test/mock_rtp_packet_sink_interface.h",
      "test/mock_rtp_transport_controller_send.h",
    ]
    deps = [
      ":rtp_interfaces",
      "../modules/congestion_controller",
      "../modules/pacing",
      "../rtc_base:rate_limiter",
      "../rtc_base:rtc_base",
      "../test:test_support",
    ]
  }

  rtc_source_set("mock_call_interfaces") {
    testonly = true

    sources = [
      "test/mock_audio_send_stream.h",
    ]
    deps = [
      ":call_interfaces",
      "//test:test_support",
    ]
  }
}
