# 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_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/udp_transport.cc",
    "net/udp_transport.h",
  ]

  deps = [
    ":common",
    "//base",
    "//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/vp8_encoder.cc",
    "sender/vp8_encoder.h",
    "sender/vp8_quantizer_parser.cc",
    "sender/vp8_quantizer_parser.h",
  ]

  deps = [
    ":common",
    ":net",
    "//base",
    "//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",
      "CoreMedia.framework",
      "CoreVideo.framework",
      "VideoToolbox.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",
    "//base",
    "//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",
    ":sender",
    "//base/test:test_support",
    "//media:test_support",
    "//media/base:test_support",
    "//net",
    "//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_packet_builder.h",
    "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",
    ":net",
    ":receiver",
    ":sender",
    ":test_support",
    "//base",
    "//base/test:run_all_unittests",
    "//base/test:test_support",
    "//media",
    "//media/base:test_support",
    "//net",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/opus",
  ]

  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",
      "//base",
      "//base/test:test_support",
      "//media",
      "//media/base:test_support",
      "//net",
      "//testing/gtest",
      "//ui/gfx/geometry",
    ]
  }

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

    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",
      "//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",
      ":receiver",
      ":sender",
      ":test_support",
      "//base",
      "//base/test:test_support",
      "//build/win:default_exe_manifest",
      "//media",
      "//media/base:test_support",
    ]
  }

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

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