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

  deps = [
    ":common",
    ":net",
    "//base",
    "//media",
    "//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",
    "//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",
    ":receiver",
    ":sender",
    "//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") {
  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/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_packet_pipe_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: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 += [ "//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: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/config:exe_and_shlib_deps",
      "//build/win:default_exe_manifest",
      "//media:test_support",
      "//net",
      "//ui/gfx/geometry",
    ]

    if (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/config:exe_and_shlib_deps",
      "//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/config:exe_and_shlib_deps",
      "//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/config:exe_and_shlib_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:exe_and_shlib_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:exe_and_shlib_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
  configs -= [ "//build/config/compiler:thin_archive" ]
  deps = [
    ":sender",
  ]
}

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