| # Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | 
 | # | 
 | # Use of this source code is governed by a BSD-style license | 
 | # that can be found in the LICENSE file in the root of the source | 
 | # tree. An additional intellectual property rights grant can be found | 
 | # in the file PATENTS.  All contributing project authors may | 
 | # be found in the AUTHORS file in the root of the source tree. | 
 |  | 
 | import("../webrtc.gni") | 
 |  | 
 | rtc_library("video_stream_encoder_interface") { | 
 |   sources = [ | 
 |     "video_stream_encoder_interface.h", | 
 |     "video_stream_encoder_observer.h", | 
 |   ] | 
 |   deps = [ | 
 |     "../api:fec_controller_api", | 
 |     "../api:rtc_error", | 
 |     "../api:rtp_parameters", | 
 |     "../api:rtp_sender_interface", | 
 |     "../api:scoped_refptr", | 
 |     "../api/adaptation:resource_adaptation_api", | 
 |     "../api/units:data_rate", | 
 |     "../api/video:video_adaptation", | 
 |     "../api/video:video_bitrate_allocation", | 
 |     "../api/video:video_bitrate_allocator", | 
 |     "../api/video:video_codec_constants", | 
 |     "../api/video:video_frame", | 
 |     "../api/video:video_layers_allocation", | 
 |     "../api/video_codecs:video_codecs_api", | 
 |     "../video/config:encoder_config", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("video") { | 
 |   sources = [ | 
 |     "buffered_frame_decryptor.cc", | 
 |     "buffered_frame_decryptor.h", | 
 |     "call_stats2.cc", | 
 |     "call_stats2.h", | 
 |     "encoder_rtcp_feedback.cc", | 
 |     "encoder_rtcp_feedback.h", | 
 |     "quality_limitation_reason_tracker.cc", | 
 |     "quality_limitation_reason_tracker.h", | 
 |     "receive_statistics_proxy.cc", | 
 |     "receive_statistics_proxy.h", | 
 |     "report_block_stats.cc", | 
 |     "report_block_stats.h", | 
 |     "rtp_streams_synchronizer2.cc", | 
 |     "rtp_streams_synchronizer2.h", | 
 |     "rtp_video_stream_receiver2.cc", | 
 |     "rtp_video_stream_receiver2.h", | 
 |     "send_delay_stats.cc", | 
 |     "send_delay_stats.h", | 
 |     "send_statistics_proxy.cc", | 
 |     "send_statistics_proxy.h", | 
 |     "stats_counter.cc", | 
 |     "stats_counter.h", | 
 |     "stream_synchronization.cc", | 
 |     "stream_synchronization.h", | 
 |     "transport_adapter.cc", | 
 |     "transport_adapter.h", | 
 |     "video_quality_observer2.cc", | 
 |     "video_quality_observer2.h", | 
 |     "video_receive_stream2.cc", | 
 |     "video_receive_stream2.h", | 
 |     "video_send_stream_impl.cc", | 
 |     "video_send_stream_impl.h", | 
 |     "video_stream_decoder2.cc", | 
 |     "video_stream_decoder2.h", | 
 |   ] | 
 |  | 
 |   deps = [ | 
 |     ":decode_synchronizer", | 
 |     ":frame_cadence_adapter", | 
 |     ":frame_decode_scheduler", | 
 |     ":frame_dumping_decoder", | 
 |     ":task_queue_frame_decode_scheduler", | 
 |     ":unique_timestamp_counter", | 
 |     ":video_stream_buffer_controller", | 
 |     ":video_stream_encoder_impl", | 
 |     ":video_stream_encoder_interface", | 
 |     "../api:array_view", | 
 |     "../api:bitrate_allocation", | 
 |     "../api:fec_controller_api", | 
 |     "../api:field_trials_view", | 
 |     "../api:frame_transformer_interface", | 
 |     "../api:make_ref_counted", | 
 |     "../api:rtp_headers", | 
 |     "../api:rtp_packet_info", | 
 |     "../api:rtp_parameters", | 
 |     "../api:rtp_sender_interface", | 
 |     "../api:scoped_refptr", | 
 |     "../api:sequence_checker", | 
 |     "../api:transport_api", | 
 |     "../api/adaptation:resource_adaptation_api", | 
 |     "../api/crypto:frame_decryptor_interface", | 
 |     "../api/crypto:options", | 
 |     "../api/environment", | 
 |     "../api/metronome", | 
 |     "../api/task_queue", | 
 |     "../api/task_queue:pending_task_safety_flag", | 
 |     "../api/transport/rtp:corruption_detection_message", | 
 |     "../api/transport/rtp:dependency_descriptor", | 
 |     "../api/transport/rtp:rtp_source", | 
 |     "../api/units:data_rate", | 
 |     "../api/units:frequency", | 
 |     "../api/units:time_delta", | 
 |     "../api/units:timestamp", | 
 |     "../api/video:encoded_frame", | 
 |     "../api/video:encoded_image", | 
 |     "../api/video:recordable_encoded_frame", | 
 |     "../api/video:render_resolution", | 
 |     "../api/video:video_adaptation", | 
 |     "../api/video:video_bitrate_allocation", | 
 |     "../api/video:video_bitrate_allocator", | 
 |     "../api/video:video_codec_constants", | 
 |     "../api/video:video_frame", | 
 |     "../api/video:video_frame_type", | 
 |     "../api/video:video_layers_allocation", | 
 |     "../api/video:video_rtp_headers", | 
 |     "../api/video:video_stream_encoder", | 
 |     "../api/video_codecs:video_codecs_api", | 
 |     "../call:bitrate_allocator", | 
 |     "../call:call_interfaces", | 
 |     "../call:rtp_interfaces", | 
 |     "../call:rtp_receiver", | 
 |     "../call:rtp_sender", | 
 |     "../call:video_receive_stream_api", | 
 |     "../call:video_send_stream_api", | 
 |     "../common_video", | 
 |     "../common_video:corruption_detection_converters", | 
 |     "../common_video:corruption_score_calculator", | 
 |     "../common_video:frame_counts", | 
 |     "../common_video:frame_instrumentation_data", | 
 |     "../media:media_constants", | 
 |     "../media:rtc_sdp_video_format_utils", | 
 |     "../modules:module_api", | 
 |     "../modules:module_api_public", | 
 |     "../modules/pacing", | 
 |     "../modules/remote_bitrate_estimator", | 
 |     "../modules/rtp_rtcp", | 
 |     "../modules/rtp_rtcp:rtp_rtcp_format", | 
 |     "../modules/rtp_rtcp:rtp_video_header", | 
 |     "../modules/video_coding", | 
 |     "../modules/video_coding:h264_sprop_parameter_sets", | 
 |     "../modules/video_coding:h26x_packet_buffer", | 
 |     "../modules/video_coding:nack_requester", | 
 |     "../modules/video_coding:packet_buffer", | 
 |     "../modules/video_coding:video_codec_interface", | 
 |     "../modules/video_coding:video_coding_utility", | 
 |     "../modules/video_coding:webrtc_vp9_helpers", | 
 |     "../modules/video_coding/timing:timing_module", | 
 |     "../rtc_base:checks", | 
 |     "../rtc_base:copy_on_write_buffer", | 
 |     "../rtc_base:event_tracer", | 
 |     "../rtc_base:histogram_percentile_counter", | 
 |     "../rtc_base:logging", | 
 |     "../rtc_base:macromagic", | 
 |     "../rtc_base:mod_ops", | 
 |     "../rtc_base:moving_max_counter", | 
 |     "../rtc_base:platform_thread", | 
 |     "../rtc_base:rate_statistics", | 
 |     "../rtc_base:rate_tracker", | 
 |     "../rtc_base:rtc_event", | 
 |     "../rtc_base:rtc_numerics", | 
 |     "../rtc_base:safe_conversions", | 
 |     "../rtc_base:sample_counter", | 
 |     "../rtc_base:stringutils", | 
 |     "../rtc_base:threading", | 
 |     "../rtc_base:timeutils", | 
 |     "../rtc_base/experiments:alr_experiment", | 
 |     "../rtc_base/experiments:field_trial_parser", | 
 |     "../rtc_base/experiments:keyframe_interval_settings_experiment", | 
 |     "../rtc_base/experiments:min_video_bitrate_experiment", | 
 |     "../rtc_base/experiments:normalize_simulcast_size_experiment", | 
 |     "../rtc_base/experiments:rate_control_settings", | 
 |     "../rtc_base/synchronization:mutex", | 
 |     "../rtc_base/system:file_wrapper", | 
 |     "../rtc_base/system:no_unique_address", | 
 |     "../rtc_base/task_utils:repeating_task", | 
 |     "../system_wrappers", | 
 |     "../system_wrappers:field_trial", | 
 |     "../system_wrappers:metrics", | 
 |     "../video/config:encoder_config", | 
 |     "../video/corruption_detection:frame_instrumentation_evaluation", | 
 |     "adaptation:video_adaptation", | 
 |     "render:incoming_video_stream", | 
 |     "//third_party/abseil-cpp/absl/algorithm:container", | 
 |     "//third_party/abseil-cpp/absl/memory", | 
 |     "//third_party/abseil-cpp/absl/strings", | 
 |   ] | 
 |  | 
 |   if (!build_with_mozilla) { | 
 |     deps += [ "../media:rtc_media_base" ] | 
 |   } | 
 | } | 
 |  | 
 | rtc_library("frame_dumping_decoder") { | 
 |   visibility = [ "*" ] | 
 |  | 
 |   sources = [ | 
 |     "frame_dumping_decoder.cc", | 
 |     "frame_dumping_decoder.h", | 
 |   ] | 
 |  | 
 |   deps = [ | 
 |     "../api/video:encoded_frame", | 
 |     "../api/video:encoded_image", | 
 |     "../api/video_codecs:video_codecs_api", | 
 |     "../modules/video_coding", | 
 |     "../modules/video_coding:video_codec_interface", | 
 |     "../modules/video_coding:video_coding_utility", | 
 |     "../rtc_base/system:file_wrapper", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("frame_dumping_encoder") { | 
 |   visibility = [ "*" ] | 
 |  | 
 |   sources = [ | 
 |     "frame_dumping_encoder.cc", | 
 |     "frame_dumping_encoder.h", | 
 |   ] | 
 |  | 
 |   deps = [ | 
 |     "../api:field_trials_view", | 
 |     "../api:sequence_checker", | 
 |     "../api/video:encoded_frame", | 
 |     "../api/video:encoded_image", | 
 |     "../api/video:video_frame", | 
 |     "../api/video_codecs:video_codecs_api", | 
 |     "../modules/video_coding", | 
 |     "../modules/video_coding:video_codec_interface", | 
 |     "../modules/video_coding:video_coding_utility", | 
 |     "../rtc_base:stringutils", | 
 |     "../rtc_base:timeutils", | 
 |     "../rtc_base/system:file_wrapper", | 
 |     "//third_party/abseil-cpp/absl/algorithm:container", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("frame_cadence_adapter") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "frame_cadence_adapter.cc", | 
 |     "frame_cadence_adapter.h", | 
 |   ] | 
 |  | 
 |   deps = [ | 
 |     "../api:field_trials_view", | 
 |     "../api:sequence_checker", | 
 |     "../api/metronome", | 
 |     "../api/task_queue", | 
 |     "../api/task_queue:pending_task_safety_flag", | 
 |     "../api/units:time_delta", | 
 |     "../api/units:timestamp", | 
 |     "../api/video:video_frame", | 
 |     "../rtc_base:checks", | 
 |     "../rtc_base:event_tracer", | 
 |     "../rtc_base:logging", | 
 |     "../rtc_base:macromagic", | 
 |     "../rtc_base:race_checker", | 
 |     "../rtc_base:rate_statistics", | 
 |     "../rtc_base:timeutils", | 
 |     "../rtc_base/synchronization:mutex", | 
 |     "../rtc_base/system:no_unique_address", | 
 |     "../rtc_base/system:unused", | 
 |     "../rtc_base/task_utils:repeating_task", | 
 |     "../system_wrappers", | 
 |     "../system_wrappers:field_trial", | 
 |     "../system_wrappers:metrics", | 
 |     "//third_party/abseil-cpp/absl/algorithm:container", | 
 |     "//third_party/abseil-cpp/absl/base:core_headers", | 
 |     "//third_party/abseil-cpp/absl/cleanup", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("video_stream_buffer_controller") { | 
 |   sources = [ | 
 |     "video_stream_buffer_controller.cc", | 
 |     "video_stream_buffer_controller.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":decode_synchronizer", | 
 |     ":frame_decode_scheduler", | 
 |     ":frame_decode_timing", | 
 |     ":task_queue_frame_decode_scheduler", | 
 |     ":video_receive_stream_timeout_tracker", | 
 |     "../api:field_trials_view", | 
 |     "../api:sequence_checker", | 
 |     "../api/metronome", | 
 |     "../api/task_queue", | 
 |     "../api/units:data_size", | 
 |     "../api/units:time_delta", | 
 |     "../api/units:timestamp", | 
 |     "../api/video:encoded_frame", | 
 |     "../api/video:frame_buffer", | 
 |     "../api/video:video_rtp_headers", | 
 |     "../modules/video_coding", | 
 |     "../modules/video_coding:frame_helpers", | 
 |     "../modules/video_coding:video_codec_interface", | 
 |     "../modules/video_coding/timing:inter_frame_delay_variation_calculator", | 
 |     "../modules/video_coding/timing:jitter_estimator", | 
 |     "../modules/video_coding/timing:timing_module", | 
 |     "../rtc_base:checks", | 
 |     "../rtc_base:logging", | 
 |     "../rtc_base:macromagic", | 
 |     "../system_wrappers", | 
 |     "../system_wrappers:field_trial", | 
 |     "//third_party/abseil-cpp/absl/base:core_headers", | 
 |     "//third_party/abseil-cpp/absl/functional:bind_front", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_source_set("frame_decode_scheduler") { | 
 |   sources = [ "frame_decode_scheduler.h" ] | 
 |   deps = [ | 
 |     ":frame_decode_timing", | 
 |     "../api/units:timestamp", | 
 |     "//third_party/abseil-cpp/absl/functional:any_invocable", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("task_queue_frame_decode_scheduler") { | 
 |   sources = [ | 
 |     "task_queue_frame_decode_scheduler.cc", | 
 |     "task_queue_frame_decode_scheduler.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":frame_decode_scheduler", | 
 |     ":frame_decode_timing", | 
 |     "../api:sequence_checker", | 
 |     "../api/task_queue", | 
 |     "../api/task_queue:pending_task_safety_flag", | 
 |     "../api/units:timestamp", | 
 |     "../rtc_base:checks", | 
 |     "../system_wrappers", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("frame_decode_timing") { | 
 |   sources = [ | 
 |     "frame_decode_timing.cc", | 
 |     "frame_decode_timing.h", | 
 |   ] | 
 |   deps = [ | 
 |     "../api/task_queue", | 
 |     "../api/task_queue:pending_task_safety_flag", | 
 |     "../api/units:time_delta", | 
 |     "../modules/video_coding/timing:timing_module", | 
 |     "../rtc_base:logging", | 
 |     "../system_wrappers", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("video_receive_stream_timeout_tracker") { | 
 |   sources = [ | 
 |     "video_receive_stream_timeout_tracker.cc", | 
 |     "video_receive_stream_timeout_tracker.h", | 
 |   ] | 
 |   deps = [ | 
 |     "../api/task_queue", | 
 |     "../api/units:time_delta", | 
 |     "../api/units:timestamp", | 
 |     "../rtc_base:logging", | 
 |     "../rtc_base/task_utils:repeating_task", | 
 |     "../system_wrappers", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("decode_synchronizer") { | 
 |   sources = [ | 
 |     "decode_synchronizer.cc", | 
 |     "decode_synchronizer.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":frame_decode_scheduler", | 
 |     ":frame_decode_timing", | 
 |     "../api:sequence_checker", | 
 |     "../api/metronome", | 
 |     "../api/task_queue", | 
 |     "../api/units:time_delta", | 
 |     "../api/units:timestamp", | 
 |     "../rtc_base:checks", | 
 |     "../rtc_base:event_tracer", | 
 |     "../rtc_base:logging", | 
 |     "../rtc_base:macromagic", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("video_stream_encoder_impl") { | 
 |   visibility = [ "*" ] | 
 |  | 
 |   # visibility = [ "../api/video:video_stream_encoder_create" ] | 
 |   sources = [ | 
 |     "alignment_adjuster.cc", | 
 |     "alignment_adjuster.h", | 
 |     "encoder_bitrate_adjuster.cc", | 
 |     "encoder_bitrate_adjuster.h", | 
 |     "encoder_overshoot_detector.cc", | 
 |     "encoder_overshoot_detector.h", | 
 |     "frame_encode_metadata_writer.cc", | 
 |     "frame_encode_metadata_writer.h", | 
 |     "quality_convergence_controller.cc", | 
 |     "quality_convergence_controller.h", | 
 |     "quality_convergence_monitor.cc", | 
 |     "quality_convergence_monitor.h", | 
 |     "rate_utilization_tracker.cc", | 
 |     "rate_utilization_tracker.h", | 
 |     "video_source_sink_controller.cc", | 
 |     "video_source_sink_controller.h", | 
 |     "video_stream_encoder.cc", | 
 |     "video_stream_encoder.h", | 
 |   ] | 
 |  | 
 |   deps = [ | 
 |     ":frame_cadence_adapter", | 
 |     ":frame_dumping_encoder", | 
 |     ":video_stream_encoder_interface", | 
 |     "../api:fec_controller_api", | 
 |     "../api:field_trials_view", | 
 |     "../api:make_ref_counted", | 
 |     "../api:rtc_error", | 
 |     "../api:rtp_parameters", | 
 |     "../api:rtp_sender_interface", | 
 |     "../api:scoped_refptr", | 
 |     "../api:sequence_checker", | 
 |     "../api/adaptation:resource_adaptation_api", | 
 |     "../api/environment", | 
 |     "../api/task_queue:pending_task_safety_flag", | 
 |     "../api/task_queue:task_queue", | 
 |     "../api/units:data_rate", | 
 |     "../api/units:data_size", | 
 |     "../api/units:time_delta", | 
 |     "../api/units:timestamp", | 
 |     "../api/video:encoded_image", | 
 |     "../api/video:render_resolution", | 
 |     "../api/video:video_adaptation", | 
 |     "../api/video:video_bitrate_allocation", | 
 |     "../api/video:video_bitrate_allocator", | 
 |     "../api/video:video_bitrate_allocator_factory", | 
 |     "../api/video:video_codec_constants", | 
 |     "../api/video:video_frame", | 
 |     "../api/video:video_frame_type", | 
 |     "../api/video:video_layers_allocation", | 
 |     "../api/video:video_rtp_headers", | 
 |     "../api/video:video_stream_encoder", | 
 |     "../api/video_codecs:scalability_mode", | 
 |     "../api/video_codecs:video_codecs_api", | 
 |     "../call/adaptation:resource_adaptation", | 
 |     "../common_video", | 
 |     "../common_video:frame_instrumentation_data", | 
 |     "../media:media_channel", | 
 |     "../modules:module_api_public", | 
 |     "../modules/video_coding", | 
 |     "../modules/video_coding:codec_globals_headers", | 
 |     "../modules/video_coding:video_codec_interface", | 
 |     "../modules/video_coding:video_coding_utility", | 
 |     "../modules/video_coding:webrtc_vp9_helpers", | 
 |     "../modules/video_coding/svc:scalability_mode_util", | 
 |     "../modules/video_coding/svc:scalability_structures", | 
 |     "../modules/video_coding/svc:svc_rate_allocator", | 
 |     "../rtc_base:checks", | 
 |     "../rtc_base:criticalsection", | 
 |     "../rtc_base:event_tracer", | 
 |     "../rtc_base:logging", | 
 |     "../rtc_base:macromagic", | 
 |     "../rtc_base:race_checker", | 
 |     "../rtc_base:rate_statistics", | 
 |     "../rtc_base:refcount", | 
 |     "../rtc_base:rtc_event", | 
 |     "../rtc_base:rtc_numerics", | 
 |     "../rtc_base:safe_conversions", | 
 |     "../rtc_base:stringutils", | 
 |     "../rtc_base:timeutils", | 
 |     "../rtc_base/experiments:balanced_degradation_settings", | 
 |     "../rtc_base/experiments:encoder_info_settings", | 
 |     "../rtc_base/experiments:field_trial_parser", | 
 |     "../rtc_base/experiments:quality_scaler_settings", | 
 |     "../rtc_base/experiments:quality_scaling_experiment", | 
 |     "../rtc_base/experiments:rate_control_settings", | 
 |     "../rtc_base/synchronization:mutex", | 
 |     "../rtc_base/system:no_unique_address", | 
 |     "../rtc_base/task_utils:repeating_task", | 
 |     "../system_wrappers", | 
 |     "../system_wrappers:metrics", | 
 |     "adaptation:video_adaptation", | 
 |     "config:encoder_config", | 
 |     "config:streams_config", | 
 |     "corruption_detection:frame_instrumentation_generator", | 
 |     "//third_party/abseil-cpp/absl/algorithm:container", | 
 |     "//third_party/abseil-cpp/absl/cleanup", | 
 |     "//third_party/abseil-cpp/absl/container:inlined_vector", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("unique_timestamp_counter") { | 
 |   sources = [ | 
 |     "unique_timestamp_counter.cc", | 
 |     "unique_timestamp_counter.h", | 
 |   ] | 
 | } | 
 |  | 
 | if (rtc_include_tests) { | 
 |   rtc_library("video_mocks") { | 
 |     testonly = true | 
 |     sources = [ "test/mock_video_stream_encoder.h" ] | 
 |     deps = [ | 
 |       ":video_stream_encoder_interface", | 
 |       "../api/video:video_stream_encoder", | 
 |       "../test:test_support", | 
 |     ] | 
 |   } | 
 |   if (!build_with_chromium) { | 
 |     rtc_library("video_quality_test") { | 
 |       testonly = true | 
 |  | 
 |       # Only targets in this file and api/ can depend on this. | 
 |       visibility = [ | 
 |         ":*", | 
 |         "../api:create_video_quality_test_fixture_api", | 
 |       ] | 
 |       sources = [ | 
 |         "video_analyzer.cc", | 
 |         "video_analyzer.h", | 
 |         "video_quality_test.cc", | 
 |         "video_quality_test.h", | 
 |       ] | 
 |       deps = [ | 
 |         ":frame_dumping_decoder", | 
 |         "..//test/network:simulated_network", | 
 |         "../api:array_view", | 
 |         "../api:create_frame_generator", | 
 |         "../api:fec_controller_api", | 
 |         "../api:field_trials_view", | 
 |         "../api:frame_generator_api", | 
 |         "../api:libjingle_peerconnection_api", | 
 |         "../api:make_ref_counted", | 
 |         "../api:rtc_event_log_output_file", | 
 |         "../api:rtp_parameters", | 
 |         "../api:scoped_refptr", | 
 |         "../api:simulated_network_api", | 
 |         "../api:test_dependency_factory", | 
 |         "../api:transport_api", | 
 |         "../api:video_quality_test_fixture_api", | 
 |         "../api/audio:audio_device", | 
 |         "../api/audio:builtin_audio_processing_builder", | 
 |         "../api/environment", | 
 |         "../api/numerics", | 
 |         "../api/rtc_event_log", | 
 |         "../api/rtc_event_log:rtc_event_log_factory", | 
 |         "../api/task_queue", | 
 |         "../api/task_queue:default_task_queue_factory", | 
 |         "../api/test/metrics:global_metrics_logger_and_exporter", | 
 |         "../api/test/metrics:metric", | 
 |         "../api/units:time_delta", | 
 |         "../api/video:builtin_video_bitrate_allocator_factory", | 
 |         "../api/video:encoded_image", | 
 |         "../api/video:video_bitrate_allocation", | 
 |         "../api/video:video_bitrate_allocator_factory", | 
 |         "../api/video:video_codec_constants", | 
 |         "../api/video:video_frame", | 
 |         "../api/video:video_frame_type", | 
 |         "../api/video:video_rtp_headers", | 
 |         "../api/video_codecs:video_codecs_api", | 
 |         "../call:call_interfaces", | 
 |         "../call:fake_network", | 
 |         "../call:video_receive_stream_api", | 
 |         "../call:video_send_stream_api", | 
 |         "../common_video", | 
 |         "../media:media_constants", | 
 |         "../media:rtc_audio_video", | 
 |         "../media:rtc_internal_video_codecs", | 
 |         "../media:rtc_simulcast_encoder_adapter", | 
 |         "../modules/audio_device:audio_device_module_from_input_and_output", | 
 |         "../modules/audio_device:test_audio_device_module", | 
 |         "../modules/audio_device:windows_core_audio_utility", | 
 |         "../modules/audio_mixer:audio_mixer_impl", | 
 |         "../modules/rtp_rtcp", | 
 |         "../modules/rtp_rtcp:rtp_rtcp_format", | 
 |         "../modules/video_coding", | 
 |         "../modules/video_coding:codec_globals_headers", | 
 |         "../modules/video_coding:video_coding_utility", | 
 |         "../modules/video_coding:webrtc_h264", | 
 |         "../modules/video_coding:webrtc_vp8", | 
 |         "../modules/video_coding:webrtc_vp9", | 
 |         "../rtc_base:checks", | 
 |         "../rtc_base:copy_on_write_buffer", | 
 |         "../rtc_base:logging", | 
 |         "../rtc_base:macromagic", | 
 |         "../rtc_base:platform_thread", | 
 |         "../rtc_base:rtc_base_tests_utils", | 
 |         "../rtc_base:rtc_event", | 
 |         "../rtc_base:rtc_numerics", | 
 |         "../rtc_base:safe_conversions", | 
 |         "../rtc_base:stringutils", | 
 |         "../rtc_base:task_queue_for_test", | 
 |         "../rtc_base:timeutils", | 
 |         "../rtc_base/synchronization:mutex", | 
 |         "../rtc_base/system:file_wrapper", | 
 |         "../rtc_base/task_utils:repeating_task", | 
 |         "../system_wrappers", | 
 |         "../test:direct_transport", | 
 |         "../test:fake_video_codecs", | 
 |         "../test:fileutils", | 
 |         "../test:frame_generator_capturer", | 
 |         "../test:platform_video_capturer", | 
 |         "../test:rtp_test_utils", | 
 |         "../test:test_common", | 
 |         "../test:test_flags", | 
 |         "../test:test_renderer", | 
 |         "../test:test_support", | 
 |         "../test:test_support_test_artifacts", | 
 |         "../test:video_frame_writer", | 
 |         "../test:video_test_common", | 
 |         "../test:video_test_constants", | 
 |         "config:encoder_config", | 
 |         "config:streams_config", | 
 |         "//third_party/abseil-cpp/absl/algorithm:container", | 
 |         "//third_party/abseil-cpp/absl/flags:flag", | 
 |         "//third_party/abseil-cpp/absl/flags:parse", | 
 |         "//third_party/abseil-cpp/absl/strings:string_view", | 
 |       ] | 
 |  | 
 |       if (is_mac || is_ios) { | 
 |         deps += [ "../test:video_test_mac" ] | 
 |       } | 
 |       if (is_win) { | 
 |         deps += [ "../rtc_base/win:scoped_com_initializer" ] | 
 |       } | 
 |     } | 
 |  | 
 |     rtc_library("video_full_stack_tests") { | 
 |       testonly = true | 
 |  | 
 |       sources = [ "full_stack_tests.cc" ] | 
 |       deps = [ | 
 |         ":video_quality_test", | 
 |         "../api:simulated_network_api", | 
 |         "../api:test_dependency_factory", | 
 |         "../api:video_quality_test_fixture_api", | 
 |         "../api/units:data_rate", | 
 |         "../api/video_codecs:video_codecs_api", | 
 |         "../modules/pacing", | 
 |         "../modules/video_coding:webrtc_vp9", | 
 |         "../rtc_base/experiments:alr_experiment", | 
 |         "../system_wrappers:field_trial", | 
 |         "../test:field_trial", | 
 |         "../test:fileutils", | 
 |         "../test:test_common", | 
 |         "../test:test_support", | 
 |         "../video/config:encoder_config", | 
 |         "//testing/gtest", | 
 |         "//third_party/abseil-cpp/absl/flags:flag", | 
 |         "//third_party/abseil-cpp/absl/flags:parse", | 
 |       ] | 
 |     } | 
 |  | 
 |     rtc_library("video_pc_full_stack_tests") { | 
 |       testonly = true | 
 |  | 
 |       sources = [ "pc_full_stack_tests.cc" ] | 
 |       deps = [ | 
 |         "..//test/network:simulated_network", | 
 |         "../api:create_network_emulation_manager", | 
 |         "../api:create_peer_connection_quality_test_frame_generator", | 
 |         "../api:create_peerconnection_quality_test_fixture", | 
 |         "../api:frame_generator_api", | 
 |         "../api:media_stream_interface", | 
 |         "../api:network_emulation_manager_api", | 
 |         "../api:peer_connection_quality_test_fixture_api", | 
 |         "../api:simulated_network_api", | 
 |         "../api:time_controller", | 
 |         "../api/test/metrics:global_metrics_logger_and_exporter", | 
 |         "../api/test/pclf:media_configuration", | 
 |         "../api/test/pclf:media_quality_test_params", | 
 |         "../api/test/pclf:peer_configurer", | 
 |         "../api/video_codecs:video_codecs_api", | 
 |         "../media:media_constants", | 
 |         "../modules/video_coding:webrtc_vp9", | 
 |         "../system_wrappers:field_trial", | 
 |         "../test:field_trial", | 
 |         "../test:fileutils", | 
 |         "../test:test_support", | 
 |         "../test/pc/e2e:network_quality_metrics_reporter", | 
 |       ] | 
 |     } | 
 |  | 
 |     rtc_library("video_loopback_lib") { | 
 |       testonly = true | 
 |       sources = [ | 
 |         "video_loopback.cc", | 
 |         "video_loopback.h", | 
 |       ] | 
 |       deps = [ | 
 |         ":video_quality_test", | 
 |         "../api:libjingle_peerconnection_api", | 
 |         "../api:simulated_network_api", | 
 |         "../api:video_quality_test_fixture_api", | 
 |         "../api/transport:bitrate_settings", | 
 |         "../api/units:data_rate", | 
 |         "../api/video_codecs:video_codecs_api", | 
 |         "../rtc_base:checks", | 
 |         "../rtc_base:logging", | 
 |         "../system_wrappers:field_trial", | 
 |         "../test:field_trial", | 
 |         "../test:run_test", | 
 |         "../test:run_test_interface", | 
 |         "../test:test_common", | 
 |         "../test:test_flags", | 
 |         "../test:test_renderer", | 
 |         "../test:test_support", | 
 |         "//testing/gtest", | 
 |         "//third_party/abseil-cpp/absl/flags:flag", | 
 |         "//third_party/abseil-cpp/absl/flags:parse", | 
 |       ] | 
 |     } | 
 |  | 
 |     if (is_mac) { | 
 |       mac_app_bundle("video_loopback") { | 
 |         testonly = true | 
 |         sources = [ "video_loopback_main.mm" ] | 
 |         info_plist = "../test/mac/Info.plist" | 
 |         deps = [ ":video_loopback_lib" ] | 
 |       } | 
 |     } else { | 
 |       rtc_executable("video_loopback") { | 
 |         testonly = true | 
 |         sources = [ "video_loopback_main.cc" ] | 
 |         deps = [ ":video_loopback_lib" ] | 
 |       } | 
 |     } | 
 |  | 
 |     rtc_executable("screenshare_loopback") { | 
 |       testonly = true | 
 |       sources = [ "screenshare_loopback.cc" ] | 
 |  | 
 |       deps = [ | 
 |         ":video_quality_test", | 
 |         "../api:libjingle_peerconnection_api", | 
 |         "../api:simulated_network_api", | 
 |         "../api:video_quality_test_fixture_api", | 
 |         "../api/transport:bitrate_settings", | 
 |         "../api/units:data_rate", | 
 |         "../api/video_codecs:video_codecs_api", | 
 |         "../rtc_base:checks", | 
 |         "../rtc_base:logging", | 
 |         "../rtc_base:stringutils", | 
 |         "../system_wrappers:field_trial", | 
 |         "../test:field_trial", | 
 |         "../test:run_test", | 
 |         "../test:run_test_interface", | 
 |         "../test:test_common", | 
 |         "../test:test_flags", | 
 |         "../test:test_renderer", | 
 |         "../test:test_support", | 
 |         "//third_party/abseil-cpp/absl/flags:flag", | 
 |         "//third_party/abseil-cpp/absl/flags:parse", | 
 |       ] | 
 |     } | 
 |  | 
 |     rtc_executable("sv_loopback") { | 
 |       testonly = true | 
 |       sources = [ "sv_loopback.cc" ] | 
 |       deps = [ | 
 |         ":video_quality_test", | 
 |         "../api:libjingle_peerconnection_api", | 
 |         "../api:simulated_network_api", | 
 |         "../api:video_quality_test_fixture_api", | 
 |         "../api/transport:bitrate_settings", | 
 |         "../api/units:data_rate", | 
 |         "../api/video_codecs:video_codecs_api", | 
 |         "../rtc_base:checks", | 
 |         "../rtc_base:logging", | 
 |         "../rtc_base:stringutils", | 
 |         "../system_wrappers:field_trial", | 
 |         "../test:field_trial", | 
 |         "../test:run_test", | 
 |         "../test:run_test_interface", | 
 |         "../test:test_common", | 
 |         "../test:test_flags", | 
 |         "../test:test_renderer", | 
 |         "../test:test_support", | 
 |         "//testing/gtest", | 
 |         "//third_party/abseil-cpp/absl/flags:flag", | 
 |         "//third_party/abseil-cpp/absl/flags:parse", | 
 |       ] | 
 |     } | 
 |   } | 
 |  | 
 |   # TODO(pbos): Rename test suite. | 
 |   rtc_library("video_tests") { | 
 |     testonly = true | 
 |  | 
 |     defines = [] | 
 |     sources = [ | 
 |       "alignment_adjuster_unittest.cc", | 
 |       "buffered_frame_decryptor_unittest.cc", | 
 |       "call_stats2_unittest.cc", | 
 |       "cpu_scaling_tests.cc", | 
 |       "decode_synchronizer_unittest.cc", | 
 |       "encoder_bitrate_adjuster_unittest.cc", | 
 |       "encoder_overshoot_detector_unittest.cc", | 
 |       "encoder_rtcp_feedback_unittest.cc", | 
 |       "end_to_end_tests/bandwidth_tests.cc", | 
 |       "end_to_end_tests/call_operation_tests.cc", | 
 |       "end_to_end_tests/codec_tests.cc", | 
 |       "end_to_end_tests/config_tests.cc", | 
 |       "end_to_end_tests/corruption_detection_tests.cc", | 
 |       "end_to_end_tests/extended_reports_tests.cc", | 
 |       "end_to_end_tests/fec_tests.cc", | 
 |       "end_to_end_tests/frame_encryption_tests.cc", | 
 |       "end_to_end_tests/histogram_tests.cc", | 
 |       "end_to_end_tests/multi_codec_receive_tests.cc", | 
 |       "end_to_end_tests/multi_stream_tester.cc", | 
 |       "end_to_end_tests/multi_stream_tester.h", | 
 |       "end_to_end_tests/multi_stream_tests.cc", | 
 |       "end_to_end_tests/network_state_tests.cc", | 
 |       "end_to_end_tests/resolution_bitrate_limits_tests.cc", | 
 |       "end_to_end_tests/retransmission_tests.cc", | 
 |       "end_to_end_tests/rtp_rtcp_tests.cc", | 
 |       "end_to_end_tests/ssrc_tests.cc", | 
 |       "end_to_end_tests/stats_tests.cc", | 
 |       "end_to_end_tests/transport_feedback_tests.cc", | 
 |       "frame_cadence_adapter_unittest.cc", | 
 |       "frame_decode_timing_unittest.cc", | 
 |       "frame_encode_metadata_writer_unittest.cc", | 
 |       "picture_id_tests.cc", | 
 |       "quality_convergence_controller_unittest.cc", | 
 |       "quality_convergence_monitor_unittest.cc", | 
 |       "quality_limitation_reason_tracker_unittest.cc", | 
 |       "quality_scaling_tests.cc", | 
 |       "rate_utilization_tracker_unittest.cc", | 
 |       "receive_statistics_proxy_unittest.cc", | 
 |       "report_block_stats_unittest.cc", | 
 |       "rtp_video_stream_receiver2_unittest.cc", | 
 |       "send_delay_stats_unittest.cc", | 
 |       "send_statistics_proxy_unittest.cc", | 
 |       "stats_counter_unittest.cc", | 
 |       "stream_synchronization_unittest.cc", | 
 |       "task_queue_frame_decode_scheduler_unittest.cc", | 
 |       "unique_timestamp_counter_unittest.cc", | 
 |       "video_receive_stream2_unittest.cc", | 
 |       "video_receive_stream_timeout_tracker_unittest.cc", | 
 |       "video_send_stream_impl_unittest.cc", | 
 |       "video_send_stream_tests.cc", | 
 |       "video_source_sink_controller_unittest.cc", | 
 |       "video_stream_buffer_controller_unittest.cc", | 
 |       "video_stream_encoder_unittest.cc", | 
 |     ] | 
 |     deps = [ | 
 |       ":decode_synchronizer", | 
 |       ":frame_cadence_adapter", | 
 |       ":frame_decode_scheduler", | 
 |       ":frame_decode_timing", | 
 |       ":task_queue_frame_decode_scheduler", | 
 |       ":unique_timestamp_counter", | 
 |       ":video", | 
 |       ":video_mocks", | 
 |       ":video_receive_stream_timeout_tracker", | 
 |       ":video_stream_buffer_controller", | 
 |       ":video_stream_encoder_impl", | 
 |       ":video_stream_encoder_interface", | 
 |       "../api:array_view", | 
 |       "../api:bitrate_allocation", | 
 |       "../api:create_frame_generator", | 
 |       "../api:fake_frame_decryptor", | 
 |       "../api:fake_frame_encryptor", | 
 |       "../api:fec_controller_api", | 
 |       "../api:field_trials_view", | 
 |       "../api:frame_generator_api", | 
 |       "../api:frame_transformer_interface", | 
 |       "../api:location", | 
 |       "../api:make_ref_counted", | 
 |       "../api:mock_fec_controller_override", | 
 |       "../api:mock_frame_decryptor", | 
 |       "../api:mock_frame_transformer", | 
 |       "../api:mock_video_codec_factory", | 
 |       "../api:mock_video_decoder", | 
 |       "../api:mock_video_encoder", | 
 |       "../api:rtc_error_matchers", | 
 |       "../api:rtp_headers", | 
 |       "../api:rtp_packet_info", | 
 |       "../api:rtp_parameters", | 
 |       "../api:scoped_refptr", | 
 |       "../api:sequence_checker", | 
 |       "../api:simulated_network_api", | 
 |       "../api:time_controller", | 
 |       "../api:video_track_source_constraints", | 
 |       "../api/adaptation:resource_adaptation_api", | 
 |       "../api/crypto:options", | 
 |       "../api/environment", | 
 |       "../api/environment:environment_factory", | 
 |       "../api/metronome/test:fake_metronome", | 
 |       "../api/rtc_event_log", | 
 |       "../api/task_queue", | 
 |       "../api/task_queue:default_task_queue_factory", | 
 |       "../api/task_queue:pending_task_safety_flag", | 
 |       "../api/test/metrics:global_metrics_logger_and_exporter", | 
 |       "../api/test/metrics:metric", | 
 |       "../api/test/video:function_video_factory", | 
 |       "../api/transport:bitrate_settings", | 
 |       "../api/transport/rtp:corruption_detection_message", | 
 |       "../api/transport/rtp:dependency_descriptor", | 
 |       "../api/transport/rtp:rtp_source", | 
 |       "../api/units:data_rate", | 
 |       "../api/units:data_size", | 
 |       "../api/units:frequency", | 
 |       "../api/units:time_delta", | 
 |       "../api/units:timestamp", | 
 |       "../api/video:builtin_video_bitrate_allocator_factory", | 
 |       "../api/video:encoded_frame", | 
 |       "../api/video:encoded_image", | 
 |       "../api/video:recordable_encoded_frame", | 
 |       "../api/video:render_resolution", | 
 |       "../api/video:resolution", | 
 |       "../api/video:video_adaptation", | 
 |       "../api/video:video_bitrate_allocation", | 
 |       "../api/video:video_bitrate_allocator", | 
 |       "../api/video:video_bitrate_allocator_factory", | 
 |       "../api/video:video_codec_constants", | 
 |       "../api/video:video_frame", | 
 |       "../api/video:video_frame_type", | 
 |       "../api/video:video_layers_allocation", | 
 |       "../api/video:video_rtp_headers", | 
 |       "../api/video:video_stream_encoder", | 
 |       "../api/video/test:video_frame_matchers", | 
 |       "../api/video_codecs:scalability_mode", | 
 |       "../api/video_codecs:video_codecs_api", | 
 |       "../api/video_codecs:vp8_temporal_layers_factory", | 
 |       "../call:bitrate_allocator", | 
 |       "../call:call_interfaces", | 
 |       "../call:fake_network", | 
 |       "../call:mock_bitrate_allocator", | 
 |       "../call:mock_rtp_interfaces", | 
 |       "../call:rtp_interfaces", | 
 |       "../call:rtp_receiver", | 
 |       "../call:rtp_sender", | 
 |       "../call:simulated_packet_receiver", | 
 |       "../call:video_receive_stream_api", | 
 |       "../call:video_send_stream_api", | 
 |       "../call/adaptation:resource_adaptation", | 
 |       "../call/adaptation:resource_adaptation_test_utilities", | 
 |       "../common_video", | 
 |       "../common_video:frame_instrumentation_data", | 
 |       "../common_video/test:utilities", | 
 |       "../media:codec", | 
 |       "../media:media_constants", | 
 |       "../media:rtc_audio_video", | 
 |       "../media:rtc_internal_video_codecs", | 
 |       "../media:rtc_media_tests_utils", | 
 |       "../media:rtc_simulcast_encoder_adapter", | 
 |       "../modules:module_api", | 
 |       "../modules:module_api_public", | 
 |       "../modules/pacing", | 
 |       "../modules/rtp_rtcp", | 
 |       "../modules/rtp_rtcp:rtp_rtcp_format", | 
 |       "../modules/rtp_rtcp:rtp_rtcp_format", | 
 |       "../modules/rtp_rtcp:rtp_video_header", | 
 |       "../modules/video_coding", | 
 |       "../modules/video_coding:codec_globals_headers", | 
 |       "../modules/video_coding:encoded_frame", | 
 |       "../modules/video_coding:nack_requester", | 
 |       "../modules/video_coding:packet_buffer", | 
 |       "../modules/video_coding:video_codec_interface", | 
 |       "../modules/video_coding:video_coding_utility", | 
 |       "../modules/video_coding:webrtc_h264", | 
 |       "../modules/video_coding:webrtc_vp8", | 
 |       "../modules/video_coding:webrtc_vp9", | 
 |       "../modules/video_coding:webrtc_vp9_helpers", | 
 |       "../modules/video_coding/codecs/av1:libaom_av1_encoder", | 
 |       "../modules/video_coding/svc:scalability_mode_util", | 
 |       "../modules/video_coding/svc:scalability_structures", | 
 |       "../modules/video_coding/svc:scalable_video_controller", | 
 |       "../modules/video_coding/timing:timing_module", | 
 |       "../rtc_base:byte_buffer", | 
 |       "../rtc_base:checks", | 
 |       "../rtc_base:copy_on_write_buffer", | 
 |       "../rtc_base:gunit_helpers", | 
 |       "../rtc_base:logging", | 
 |       "../rtc_base:macromagic", | 
 |       "../rtc_base:network_route", | 
 |       "../rtc_base:rate_limiter", | 
 |       "../rtc_base:rate_statistics", | 
 |       "../rtc_base:refcount", | 
 |       "../rtc_base:rtc_base_tests_utils", | 
 |       "../rtc_base:rtc_event", | 
 |       "../rtc_base:rtc_numerics", | 
 |       "../rtc_base:safe_conversions", | 
 |       "../rtc_base:stringutils", | 
 |       "../rtc_base:task_queue_for_test", | 
 |       "../rtc_base:threading", | 
 |       "../rtc_base:timeutils", | 
 |       "../rtc_base:unique_id_generator", | 
 |       "../rtc_base/containers:flat_map", | 
 |       "../rtc_base/experiments:alr_experiment", | 
 |       "../rtc_base/experiments:encoder_info_settings", | 
 |       "../rtc_base/experiments:rate_control_settings", | 
 |       "../rtc_base/synchronization:mutex", | 
 |       "../system_wrappers", | 
 |       "../system_wrappers:metrics", | 
 |       "../test:direct_transport", | 
 |       "../test:encoder_settings", | 
 |       "../test:explicit_key_value_config", | 
 |       "../test:fake_encoded_frame", | 
 |       "../test:fake_video_codecs", | 
 |       "../test:field_trial", | 
 |       "../test:frame_generator_capturer", | 
 |       "../test:frame_utils", | 
 |       "../test:mock_transport", | 
 |       "../test:null_transport", | 
 |       "../test:rtp_test_utils", | 
 |       "../test:run_loop", | 
 |       "../test:scoped_key_value_config", | 
 |       "../test:test_common", | 
 |       "../test:test_support", | 
 |       "../test:video_test_common", | 
 |       "../test:video_test_constants", | 
 |       "../test:wait_until", | 
 |       "../test/network:simulated_network", | 
 |       "../test/time_controller", | 
 |       "adaptation:video_adaptation", | 
 |       "config:encoder_config", | 
 |       "config:streams_config", | 
 |       "config:video_config_tests", | 
 |       "corruption_detection:corruption_detection_tests", | 
 |       "corruption_detection/evaluation:corruption_detection_eval_tests", | 
 |       "//third_party/abseil-cpp/absl/algorithm:container", | 
 |       "//third_party/abseil-cpp/absl/container:inlined_vector", | 
 |       "//third_party/abseil-cpp/absl/functional:any_invocable", | 
 |       "//third_party/abseil-cpp/absl/memory", | 
 |       "//third_party/abseil-cpp/absl/strings", | 
 |     ] | 
 |     if (!build_with_mozilla) { | 
 |       deps += [ "../media:rtc_media_base" ] | 
 |     } | 
 |   } | 
 | } |