# 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/jumbo.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.
jumbo_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",
  ]
}

jumbo_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",
  ]
}

jumbo_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",
    ]
  }
}

jumbo_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 += [
      # 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_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/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/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: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))
  # 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",
      "//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 = [
    ":receiver",
  ]
}
