# 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/features.gni")
import("//build/config/ui.gni")
import("//testing/test.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_deserializer.cc",
    "logging/log_deserializer.h",
    "logging/log_event_dispatcher.cc",
    "logging/log_event_dispatcher.h",
    "logging/log_serializer.cc",
    "logging/log_serializer.h",
    "logging/logging_defines.cc",
    "logging/logging_defines.h",
    "logging/proto/proto_utils.cc",
    "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_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/udp_transport.cc",
    "net/udp_transport.h",
  ]

  deps = [
    ":common",
  ]

  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/vp8_encoder.cc",
    "sender/vp8_encoder.h",
    "sender/vp8_quantizer_parser.cc",
    "sender/vp8_quantizer_parser.h",
  ]

  deps = [
    ":common",
    ":net",
    "//media",
    "//media:media_features",
    "//media:shared_memory_support",
    "//third_party/libvpx",
    "//third_party/opus",
    "//ui/gfx/geometry",
  ]

  libs = []

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

    libs += [
      "AudioToolbox.framework",
      "CoreVideo.framework",
    ]
  }
}

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

  deps = [
    ":common",
    ":net",
    "//media",
    "//media:shared_memory_support",
    "//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/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",
    ":receiver",
    "//base/test:test_support",
    "//media:test_support",
    "//media/base:test_support",
    "//testing/gtest",
    "//third_party/libyuv",
    "//third_party/mt19937ar",
    "//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") {
  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/serialize_deserialize_test.cc",
    "logging/simple_event_subscriber_unittest.cc",
    "logging/stats_event_subscriber_unittest.cc",
    "net/cast_transport_impl_unittest.cc",
    "net/mock_cast_transport.cc",
    "net/mock_cast_transport.h",
    "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/cast_message_builder_unittest.cc",
    "net/rtp/frame_buffer_unittest.cc",
    "net/rtp/framer_unittest.cc",
    "net/rtp/mock_rtp_payload_feedback.cc",
    "net/rtp/mock_rtp_payload_feedback.h",
    "net/rtp/packet_storage_unittest.cc",
    "net/rtp/receiver_stats_unittest.cc",
    "net/rtp/rtp_packet_builder.cc",
    "net/rtp/rtp_packetizer_unittest.cc",
    "net/rtp/rtp_parser_unittest.cc",
    "net/udp_transport_unittest.cc",
    "receiver/audio_decoder_unittest.cc",
    "receiver/frame_receiver_unittest.cc",
    "receiver/video_decoder_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/vp8_quantizer_parser_unittest.cc",
    "test/end2end_unittest.cc",
    "test/utility/audio_utility_unittest.cc",
    "test/utility/barcode_unittest.cc",
  ]

  deps = [
    ":common",
    ":receiver",
    ":sender",
    ":test_support",
    "//base/test:run_all_unittests",
    "//testing/gmock",
    "//testing/gtest",
  ]

  if (is_android) {
    deps += [ "//testing/android/native_test:native_test_native_code" ]
  }

  if (is_ios || is_mac) {
    sources += [ "sender/h264_vt_encoder_unittest.cc" ]

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

if (is_win || is_mac || (is_linux && !is_chromeos)) {
  # 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_receiver_app",
      ":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",
      ":receiver",
      ":sender",
      ":test_support",
      "//net",
      "//testing/gtest",
    ]
  }

  executable("cast_receiver_app") {
    testonly = true
    sources = [
      "test/receiver.cc",
    ]
    deps = [
      ":common",
      ":net",
      ":receiver",
      ":test_support",
      "//build/win:default_exe_manifest",
    ]

    if (is_linux && !is_chromeos && use_x11) {
      sources += [
        "test/linux_output_window.cc",
        "test/linux_output_window.h",
      ]
      configs += [
        "//build/config/linux:x11",
        "//build/config/linux:xext",
      ]
      deps += [ "//third_party/libyuv" ]
    }
  }

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

  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_support",
      "//build/win:default_exe_manifest",
    ]
  }

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

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

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

if (is_linux && !is_chromeos) {
  test("tap_proxy") {
    sources = [
      "test/utility/tap_proxy.cc",
    ]

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

# 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
  deps = [
    ":sender",
  ]
}

static_library("cast_receiver") {
  complete_static_lib = true
  deps = [
    ":receiver",
  ]
}
