| # 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", |
| "CoreFoundation.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" ] |
| public_deps = [] |
| 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", |
| ] |
| public_deps += [ "//ui/gfx/x" ] |
| 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" ] |
| } |