# 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.cc",
    "audio_receive_stream.h",
    "audio_send_stream.h",
    "audio_state.cc",
    "audio_state.h",
    "call.h",
    "call_config.cc",
    "call_config.h",
    "flexfec_receive_stream.cc",
    "flexfec_receive_stream.h",
    "packet_receiver.h",
    "syncable.cc",
    "syncable.h",
  ]
  if (!build_with_mozilla) {
    sources += [ "audio_send_stream.cc" ]
  }
  deps = [
    ":rtp_interfaces",
    ":video_stream_api",
    "..:webrtc_common",
    "../api:fec_controller_api",
    "../api:libjingle_peerconnection_api",
    "../api:transport_api",
    "../api/audio:audio_mixer_api",
    "../api/audio_codecs:audio_codecs_api",
    "../api/transport:network_control",
    "../modules/audio_device:audio_device",
    "../modules/audio_processing:audio_processing",
    "../modules/audio_processing:audio_processing_statistics",
    "../rtc_base:audio_format_to_string",
    "../rtc_base:rtc_base",
    "../rtc_base:rtc_base_approved",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

# 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 = [
    "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:libjingle_peerconnection_api",
    "../api/transport:bitrate_settings",
    "../logging:rtc_event_log_api",
    "../modules/rtp_rtcp:rtp_rtcp_format",
    "../rtc_base:rtc_base_approved",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

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",
    "../modules/rtp_rtcp",
    "../modules/rtp_rtcp:rtp_rtcp_format",
    "../rtc_base:checks",
    "../rtc_base:rtc_base_approved",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_source_set("rtp_sender") {
  sources = [
    "rtp_payload_params.cc",
    "rtp_payload_params.h",
    "rtp_transport_controller_send.cc",
    "rtp_transport_controller_send.h",
    "rtp_video_sender.cc",
    "rtp_video_sender.h",
    "rtp_video_sender_interface.h",
  ]
  deps = [
    ":bitrate_configurator",
    ":rtp_interfaces",
    "..:webrtc_common",
    "../api:transport_api",
    "../api/transport:network_control",
    "../api/video_codecs:video_codecs_api",
    "../logging:rtc_event_log_api",
    "../modules/congestion_controller",
    "../modules/congestion_controller/rtp:congestion_controller",
    "../modules/pacing",
    "../modules/rtp_rtcp:rtp_rtcp",
    "../modules/rtp_rtcp:rtp_rtcp_format",
    "../modules/rtp_rtcp:rtp_video_header",
    "../modules/utility",
    "../modules/video_coding:video_codec_interface",
    "../rtc_base:checks",
    "../rtc_base:rate_limiter",
    "../rtc_base:rtc_base",
    "../rtc_base:rtc_base_approved",
    "../rtc_base:rtc_task_queue",
    "../system_wrappers:field_trial_api",
    "//third_party/abseil-cpp/absl/memory",
  ]
}

rtc_source_set("bitrate_configurator") {
  sources = [
    "rtp_bitrate_configurator.cc",
    "rtp_bitrate_configurator.h",
  ]
  deps = [
    ":rtp_interfaces",
    "../api:libjingle_peerconnection_api",
    "../api/transport:bitrate_settings",
    "../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",
  ]
}

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

  deps = [
    ":bitrate_allocator",
    ":call_interfaces",
    ":fake_network",
    ":rtp_interfaces",
    ":rtp_receiver",
    ":rtp_sender",
    ":simulated_network",
    ":video_stream_api",
    "..:webrtc_common",
    "../api:callfactory_api",
    "../api:simulated_network_api",
    "../api:transport_api",
    "../api/transport:network_control",
    "../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:safe_minmax",
    "../rtc_base:sequenced_task_checker",
    "../rtc_base/synchronization:rw_lock_wrapper",
    "../system_wrappers",
    "../system_wrappers:field_trial_api",
    "../system_wrappers:metrics_api",
    "../video",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_source_set("video_stream_api") {
  sources = [
    "video_receive_stream.cc",
    "video_receive_stream.h",
    "video_send_stream.cc",
    "video_send_stream.h",
  ]
  deps = [
    ":rtp_interfaces",
    "../:webrtc_common",
    "../api:libjingle_peerconnection_api",
    "../api:transport_api",
    "../api/video:video_frame",
    "../api/video:video_stream_encoder",
    "../api/video_codecs:video_codecs_api",
    "../common_video:common_video",
    "../modules/rtp_rtcp:rtp_rtcp_format",
    "../rtc_base:checks",
    "../rtc_base:rtc_base_approved",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_source_set("simulated_network") {
  sources = [
    "simulated_network.cc",
    "simulated_network.h",
  ]
  deps = [
    "../api:simulated_network_api",
    "../rtc_base:rtc_base_approved",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_source_set("simulated_packet_receiver") {
  sources = [
    "simulated_packet_receiver.h",
  ]
  deps = [
    ":call_interfaces",
    "../api:simulated_network_api",
    "../modules:module_api",
  ]
}

rtc_source_set("fake_network") {
  sources = [
    "fake_network_pipe.cc",
    "fake_network_pipe.h",
  ]
  deps = [
    ":call_interfaces",
    ":simulated_network",
    ":simulated_packet_receiver",
    "..:webrtc_common",
    "../api:simulated_network_api",
    "../api:transport_api",
    "../modules:module_api",
    "../rtc_base:rtc_base_approved",
    "../rtc_base:sequenced_task_checker",
    "../system_wrappers",
    "//third_party/abseil-cpp/absl/memory",
  ]
}

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",
      "receive_time_calculator_unittest.cc",
      "rtcp_demuxer_unittest.cc",
      "rtp_bitrate_configurator_unittest.cc",
      "rtp_demuxer_unittest.cc",
      "rtp_payload_params_unittest.cc",
      "rtp_rtcp_demuxer_helper_unittest.cc",
      "rtp_video_sender_unittest.cc",
      "rtx_receive_stream_unittest.cc",
    ]
    deps = [
      ":bitrate_allocator",
      ":bitrate_configurator",
      ":call",
      ":call_interfaces",
      ":mock_rtp_interfaces",
      ":rtp_interfaces",
      ":rtp_receiver",
      ":rtp_sender",
      ":simulated_network",
      "..: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",
      "../modules/video_coding:video_codec_interface",
      "../rtc_base:checks",
      "../rtc_base:rate_limiter",
      "../rtc_base:rtc_base_approved",
      "../system_wrappers",
      "../test:audio_codec_mocks",
      "../test:direct_transport",
      "../test:fake_video_codecs",
      "../test:field_trial",
      "../test:test_common",
      "../test:test_support",
      "../test:video_test_common",
      "../video:video",
      "//testing/gmock",
      "//testing/gtest",
      "//third_party/abseil-cpp/absl/memory",
    ]
    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",
      ":simulated_network",
      ":video_stream_api",
      "..:webrtc_common",
      "../api:simulated_network_api",
      "../api/audio_codecs:builtin_audio_encoder_factory",
      "../api/video:video_bitrate_allocation",
      "../api/video_codecs:video_codecs_api",
      "../logging:rtc_event_log_api",
      "../modules/audio_coding",
      "../modules/audio_device",
      "../modules/audio_device:audio_device_impl",
      "../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_video_codecs",
      "../test:field_trial",
      "../test:fileutils",
      "../test:perf_test",
      "../test:test_common",
      "../test:test_support",
      "../test:video_test_common",
      "../video",
      "//testing/gtest",
      "//third_party/abseil-cpp/absl/memory",
    ]
    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",
      "../api:libjingle_peerconnection_api",
      "../modules/congestion_controller",
      "../modules/pacing",
      "../rtc_base:rate_limiter",
      "../rtc_base:rtc_base",
      "../test:test_support",
    ]
  }
  rtc_source_set("mock_bitrate_allocator") {
    testonly = true

    sources = [
      "test/mock_bitrate_allocator.h",
    ]
    deps = [
      ":bitrate_allocator",
      "//test:test_support",
    ]
  }
  rtc_source_set("mock_call_interfaces") {
    testonly = true

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

  rtc_test("fake_network_unittests") {
    deps = [
      ":call_interfaces",
      ":fake_network",
      ":simulated_network",
      "../modules/rtp_rtcp",
      "../rtc_base:rtc_base_approved",
      "../system_wrappers",
      "../test:test_common",
      "../test:test_main",
      "//testing/gtest",
    ]
    sources = [
      "test/fake_network_pipe_unittest.cc",
    ]
  }
}
