# Copyright 2014 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/android/config.gni")
import("//build/config/chromeos/ui_mode.gni")
import("//build/config/features.gni")
import("//build/config/ui.gni")
import("//testing/test.gni")
import("//third_party/libaom/options.gni")
import("//third_party/protobuf/proto_library.gni")

proto_library("logging_proto") {
  sources = [ "logging/proto/raw_events.proto" ]
}

# Common code shared by all cast components.
source_set("common") {
  sources = [
    "cast_config.cc",
    "cast_config.h",
    "cast_environment.cc",
    "cast_environment.h",
    "common/clock_drift_smoother.cc",
    "common/clock_drift_smoother.h",
    "common/expanded_value_base.h",
    "common/frame_id.cc",
    "common/frame_id.h",
    "common/rtp_time.cc",
    "common/rtp_time.h",
    "common/transport_encryption_handler.cc",
    "common/transport_encryption_handler.h",
    "constants.h",
    "logging/encoding_event_subscriber.cc",
    "logging/encoding_event_subscriber.h",
    "logging/log_event_dispatcher.cc",
    "logging/log_event_dispatcher.h",
    "logging/logging_defines.cc",
    "logging/logging_defines.h",
    "logging/proto/proto_utils.cc",
    "logging/proto/proto_utils.h",
    "logging/raw_event_subscriber.h",
    "logging/raw_event_subscriber_bundle.cc",
    "logging/raw_event_subscriber_bundle.h",
    "logging/receiver_time_offset_estimator.h",
    "logging/receiver_time_offset_estimator_impl.cc",
    "logging/receiver_time_offset_estimator_impl.h",
    "logging/simple_event_subscriber.cc",
    "logging/simple_event_subscriber.h",
    "logging/stats_event_subscriber.cc",
    "logging/stats_event_subscriber.h",
  ]

  deps = [
    ":logging_proto",
    "//base",
    "//crypto",
    "//net",
    "//third_party/zlib",
  ]

  public_deps = [
    # The generated headers reference headers within protobuf_lite, so
    # dependencies must be able to find those headers too.
    ":logging_proto",
  ]
}

source_set("net") {
  sources = [
    "net/cast_transport.h",
    "net/cast_transport_config.cc",
    "net/cast_transport_config.h",
    "net/cast_transport_defines.h",
    "net/cast_transport_impl.cc",
    "net/cast_transport_impl.h",
    "net/pacing/paced_sender.cc",
    "net/pacing/paced_sender.h",
    "net/rtcp/receiver_rtcp_event_subscriber.cc",
    "net/rtcp/receiver_rtcp_event_subscriber.h",
    "net/rtcp/receiver_rtcp_session.cc",
    "net/rtcp/receiver_rtcp_session.h",
    "net/rtcp/rtcp_builder.cc",
    "net/rtcp/rtcp_builder.h",
    "net/rtcp/rtcp_defines.cc",
    "net/rtcp/rtcp_defines.h",
    "net/rtcp/rtcp_utility.cc",
    "net/rtcp/rtcp_utility.h",
    "net/rtcp/sender_rtcp_session.cc",
    "net/rtcp/sender_rtcp_session.h",
    "net/rtp/packet_storage.cc",
    "net/rtp/packet_storage.h",
    "net/rtp/rtp_defines.cc",
    "net/rtp/rtp_defines.h",
    "net/rtp/rtp_packetizer.cc",
    "net/rtp/rtp_packetizer.h",
    "net/rtp/rtp_parser.cc",
    "net/rtp/rtp_parser.h",
    "net/rtp/rtp_sender.cc",
    "net/rtp/rtp_sender.h",
    "net/transport_util.cc",
    "net/transport_util.h",
    "net/udp_packet_pipe.cc",
    "net/udp_packet_pipe.h",
    "net/udp_transport_impl.cc",
    "net/udp_transport_impl.h",
    "net/udp_transport_interface.h",
  ]

  deps = [
    ":common",
    "//base",
    "//media/mojo/common",
    "//mojo/public/cpp/system",
    "//net",
  ]

  public_deps = [ ":common" ]
}

source_set("sender") {
  sources = [
    "cast_sender.h",
    "cast_sender_impl.cc",
    "cast_sender_impl.h",
    "sender/audio_encoder.cc",
    "sender/audio_encoder.h",
    "sender/audio_sender.cc",
    "sender/audio_sender.h",
    "sender/congestion_control.cc",
    "sender/congestion_control.h",
    "sender/external_video_encoder.cc",
    "sender/external_video_encoder.h",
    "sender/fake_software_video_encoder.cc",
    "sender/fake_software_video_encoder.h",
    "sender/frame_sender.cc",
    "sender/frame_sender.h",
    "sender/performance_metrics_overlay.cc",
    "sender/performance_metrics_overlay.h",
    "sender/sender_encoded_frame.cc",
    "sender/sender_encoded_frame.h",
    "sender/size_adaptable_video_encoder_base.cc",
    "sender/size_adaptable_video_encoder_base.h",
    "sender/software_video_encoder.h",
    "sender/video_encoder.cc",
    "sender/video_encoder.h",
    "sender/video_encoder_impl.cc",
    "sender/video_encoder_impl.h",
    "sender/video_frame_factory.h",
    "sender/video_sender.cc",
    "sender/video_sender.h",
    "sender/vpx_encoder.cc",
    "sender/vpx_encoder.h",
    "sender/vpx_quantizer_parser.cc",
    "sender/vpx_quantizer_parser.h",
  ]

  deps = [
    ":common",
    ":net",
    "//base",
    "//media",
    "//media/capture:capture_base",
    "//third_party/libaom:libaom_buildflags",
    "//third_party/libvpx",
    "//third_party/opus",
    "//ui/gfx/geometry",
  ]

  # iOS and OS X encoders
  if (is_apple) {
    sources += [
      "sender/h264_vt_encoder.cc",
      "sender/h264_vt_encoder.h",
    ]

    frameworks = [
      "AudioToolbox.framework",
      "CoreFoundation.framework",
      "CoreMedia.framework",
      "CoreVideo.framework",
      "VideoToolbox.framework",
    ]
  }

  if (enable_libaom) {
    sources += [
      "sender/av1_encoder.cc",
      "sender/av1_encoder.h",
    ]

    deps += [ "//third_party/libaom" ]
  }
}

source_set("test_receiver") {
  sources = [
    "test/receiver/audio_decoder.cc",
    "test/receiver/audio_decoder.h",
    "test/receiver/cast_message_builder.cc",
    "test/receiver/cast_message_builder.h",
    "test/receiver/cast_receiver.h",
    "test/receiver/cast_receiver_impl.cc",
    "test/receiver/cast_receiver_impl.h",
    "test/receiver/frame_buffer.cc",
    "test/receiver/frame_buffer.h",
    "test/receiver/frame_receiver.cc",
    "test/receiver/frame_receiver.h",
    "test/receiver/framer.cc",
    "test/receiver/framer.h",
    "test/receiver/receiver_stats.cc",
    "test/receiver/receiver_stats.h",
    "test/receiver/video_decoder.cc",
    "test/receiver/video_decoder.h",
  ]

  deps = [
    ":common",
    ":net",
    "//base",
    "//media",
    "//third_party/libvpx",
    "//third_party/libyuv",
    "//third_party/opus",
    "//ui/gfx/geometry",
  ]
}

static_library("test_support") {
  testonly = true
  sources = [
    "test/fake_receiver_time_offset_estimator.cc",
    "test/fake_receiver_time_offset_estimator.h",
    "test/loopback_transport.cc",
    "test/loopback_transport.h",
    "test/mock_cast_transport.cc",
    "test/mock_cast_transport.h",
    "test/skewed_single_thread_task_runner.cc",
    "test/skewed_single_thread_task_runner.h",
    "test/skewed_tick_clock.cc",
    "test/skewed_tick_clock.h",
    "test/utility/audio_utility.cc",
    "test/utility/audio_utility.h",
    "test/utility/barcode.cc",
    "test/utility/barcode.h",
    "test/utility/default_config.cc",
    "test/utility/default_config.h",
    "test/utility/in_process_receiver.cc",
    "test/utility/in_process_receiver.h",
    "test/utility/input_builder.cc",
    "test/utility/input_builder.h",
    "test/utility/net_utility.cc",
    "test/utility/net_utility.h",
    "test/utility/standalone_cast_environment.cc",
    "test/utility/standalone_cast_environment.h",
    "test/utility/test_util.cc",
    "test/utility/test_util.h",
    "test/utility/udp_proxy.cc",
    "test/utility/udp_proxy.h",
    "test/utility/video_utility.cc",
    "test/utility/video_utility.h",
  ]

  deps = [
    ":net",
    ":sender",
    ":test_receiver",
    "//base/test:test_support",
    "//media",
    "//net",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/libyuv",
    "//ui/gfx:test_support",
  ]

  # FFMPEG software video decoders are not available on Android and/or
  # Chromecast content_shell builds.
  #
  # TODO(miu): There *are* hardware decoder APIs available via FFMPEG, and we
  # should use those for the Android receiver.  See media's BUILD.gn for usage
  # details.  http://crbug.com/558714
  if (!is_android && !is_chromecast) {
    sources += [
      "test/fake_media_source.cc",
      "test/fake_media_source.h",
    ]
    deps += [ "//third_party/ffmpeg" ]
  }
}

test("cast_unittests") {
  use_xvfb = use_xvfb_in_this_config

  sources = [
    "common/expanded_value_base_unittest.cc",
    "common/rtp_time_unittest.cc",
    "logging/encoding_event_subscriber_unittest.cc",
    "logging/receiver_time_offset_estimator_impl_unittest.cc",
    "logging/simple_event_subscriber_unittest.cc",
    "logging/stats_event_subscriber_unittest.cc",
    "net/cast_transport_impl_unittest.cc",
    "net/pacing/mock_paced_packet_sender.cc",
    "net/pacing/mock_paced_packet_sender.h",
    "net/pacing/paced_sender_unittest.cc",
    "net/rtcp/receiver_rtcp_event_subscriber_unittest.cc",
    "net/rtcp/rtcp_builder_unittest.cc",
    "net/rtcp/rtcp_unittest.cc",
    "net/rtcp/rtcp_utility_unittest.cc",

    # TODO(miu): The following two are test utility modules.  Rename/move the
    # files.
    "net/rtcp/test_rtcp_packet_builder.cc",
    "net/rtcp/test_rtcp_packet_builder.h",
    "net/rtp/mock_rtp_payload_feedback.cc",
    "net/rtp/mock_rtp_payload_feedback.h",
    "net/rtp/packet_storage_unittest.cc",
    "net/rtp/rtp_packet_builder.cc",
    "net/rtp/rtp_packet_builder.h",
    "net/rtp/rtp_packetizer_unittest.cc",
    "net/rtp/rtp_parser_unittest.cc",
    "net/udp_packet_pipe_unittest.cc",
    "net/udp_transport_unittest.cc",
    "sender/audio_encoder_unittest.cc",
    "sender/audio_sender_unittest.cc",
    "sender/congestion_control_unittest.cc",
    "sender/external_video_encoder_unittest.cc",
    "sender/fake_video_encode_accelerator_factory.cc",
    "sender/fake_video_encode_accelerator_factory.h",
    "sender/video_encoder_unittest.cc",
    "sender/video_sender_unittest.cc",
    "sender/vpx_quantizer_parser_unittest.cc",
    "test/end2end_unittest.cc",
    "test/receiver/audio_decoder_unittest.cc",
    "test/receiver/cast_message_builder_unittest.cc",
    "test/receiver/frame_buffer_unittest.cc",
    "test/receiver/frame_receiver_unittest.cc",
    "test/receiver/framer_unittest.cc",
    "test/receiver/receiver_stats_unittest.cc",
    "test/receiver/video_decoder_unittest.cc",
    "test/utility/audio_utility_unittest.cc",
    "test/utility/barcode_unittest.cc",
  ]

  deps = [
    ":common",
    ":net",
    ":sender",
    ":test_receiver",
    ":test_support",
    "//base",
    "//base:cfi_buildflags",
    "//base/test:test_support",
    "//media:test_support",
    "//media/test:run_all_unittests",
    "//mojo/public/cpp/bindings",
    "//net",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/opus",
  ]

  if (is_android) {
    deps += [
      # The test needs the java dependencies to add the java classes for their
      # native counterparts to the test apk.
      "//media/base/android:media_java",
      "//testing/android/native_test:native_test_native_code",
    ]
  }

  if (is_apple) {
    sources += [ "sender/h264_vt_encoder_unittest.cc" ]

    deps += [ "//third_party/ffmpeg" ]
  }
}

if (is_win || is_mac || is_linux || is_chromeos_lacros) {
  # This is a target for the collection of cast development tools.  They are
  # not built/linked into the Chromium browser.
  group("testing_tools") {
    testonly = true
    deps = [
      ":cast_benchmarks",
      ":cast_sender_app",
      ":cast_simulator",
      ":generate_barcode_video",
      ":generate_timecode_audio",
      ":udp_proxy",
    ]
  }

  test("cast_benchmarks") {
    testonly = true
    sources = [ "test/cast_benchmarks.cc" ]
    deps = [
      ":common",
      ":net",
      ":sender",
      ":test_receiver",
      ":test_support",
      "//base",
      "//base/test:test_support",
      "//media:test_support",
      "//net",
      "//testing/gtest",
      "//ui/gfx/geometry",
    ]
  }

  executable("cast_sender_app") {
    testonly = true
    sources = [ "test/sender.cc" ]
    deps = [
      ":common",
      ":net",
      ":sender",
      ":test_support",
      "//base",
      "//build/win:default_exe_manifest",
      "//media",
    ]
  }

  proto_library("network_simulation_model_proto") {
    visibility = [ ":cast_simulator" ]
    sources = [ "test/proto/network_simulation_model.proto" ]
  }

  executable("cast_simulator") {
    testonly = true
    sources = [ "test/simulator.cc" ]
    deps = [
      ":common",
      ":net",
      ":network_simulation_model_proto",
      ":sender",
      ":test_receiver",
      ":test_support",
      "//base",
      "//base/test:test_support",
      "//build/win:default_exe_manifest",
      "//media:test_support",
    ]
  }

  executable("generate_barcode_video") {
    testonly = true
    sources = [ "test/utility/generate_barcode_video.cc" ]
    deps = [
      ":test_support",
      "//base",
      "//build/win:default_exe_manifest",
      "//media",
    ]
  }

  executable("generate_timecode_audio") {
    testonly = true
    sources = [ "test/utility/generate_timecode_audio.cc" ]
    deps = [
      ":test_support",
      "//base",
      "//build/win:default_exe_manifest",
      "//media",
    ]
  }

  executable("udp_proxy") {
    testonly = true
    sources = [ "test/utility/udp_proxy_main.cc" ]
    deps = [
      ":test_support",
      "//base",
      "//build/win:default_exe_manifest",
      "//net",
    ]
  }
} else {  # !(is_win || is_mac || is_linux || is_chromeos_lacros)
  # The testing tools are only built for the desktop platforms.
  group("testing_tools") {
  }
}

if (is_linux || is_chromeos_lacros) {
  test("tap_proxy") {
    sources = [ "test/utility/tap_proxy.cc" ]

    deps = [
      ":test_support",
      "//base",
      "//base/test:test_support",
      "//media",
      "//net",
    ]
  }
}

# Projects external to Chromium can build cast_sender and/or cast_receiver to
# produce libraries to link with their applications.  Chromium targets should
# not reference these.

static_library("cast_sender") {
  complete_static_lib = true
  configs -= [ "//build/config/compiler:thin_archive" ]
  deps = [ ":sender" ]
}

static_library("cast_receiver") {
  complete_static_lib = true
  configs -= [ "//build/config/compiler:thin_archive" ]
  deps = [ ":test_receiver" ]
}
