Make VideoJitterTimingFactory injectable through PeerConnectionFactoryDependencies. Bug: b/493549134 Change-Id: Ida2c39fdc425eb5de195e11e45fc465695f5d471 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/484960 Reviewed-by: Rasmus Brandt <brandtr@webrtc.org> Reviewed-by: Per Kjellander <perkj@webrtc.org> Commit-Queue: Åsa Persson <asapersson@webrtc.org> Cr-Commit-Position: refs/heads/main@{#48084}
diff --git a/api/BUILD.gn b/api/BUILD.gn index 2030900..ac60d88 100644 --- a/api/BUILD.gn +++ b/api/BUILD.gn
@@ -491,6 +491,7 @@ "transport:sctp_transport_factory_interface", "units:time_delta", "video:video_bitrate_allocator_factory", + "video/timing:video_jitter_timing_factory", "video_codecs:video_codecs_api", "//third_party/abseil-cpp/absl/base:core_headers", "//third_party/abseil-cpp/absl/strings:string_view",
diff --git a/api/peer_connection_interface.h b/api/peer_connection_interface.h index e1ba0a6..c662758 100644 --- a/api/peer_connection_interface.h +++ b/api/peer_connection_interface.h
@@ -122,6 +122,7 @@ #include "api/transport/network_control.h" #include "api/transport/sctp_transport_factory_interface.h" #include "api/turn_customizer.h" +#include "api/video/timing/video_jitter_timing_factory.h" #include "api/video/video_bitrate_allocator_factory.h" #include "api/video_codecs/video_decoder_factory.h" #include "api/video_codecs/video_encoder_factory.h" @@ -1460,6 +1461,9 @@ // called without a `port_allocator`, and the above `network_manager' is null. std::unique_ptr<NetworkMonitorFactory> network_monitor_factory; std::unique_ptr<NetEqFactory> neteq_factory; + // Factory for creating VideoJitterTiming instances, used to track and + // manage video frame timing for rendering. + std::unique_ptr<VideoJitterTimingFactory> video_jitter_timing_factory; std::unique_ptr<SctpTransportFactoryInterface> sctp_factory; // Metronome used for decoding, must be called on the worker thread. std::unique_ptr<Metronome> decode_metronome;
diff --git a/call/BUILD.gn b/call/BUILD.gn index 743bc44..7c65219 100644 --- a/call/BUILD.gn +++ b/call/BUILD.gn
@@ -69,6 +69,7 @@ "../api/units:time_delta", "../api/units:timestamp", "../api/video:video_stream_encoder", + "../api/video/timing:video_jitter_timing_factory", "../modules/async_audio_processing", "../modules/congestion_controller/rtp:congestion_controller_feedback_stats", "../modules/rtp_rtcp", @@ -329,6 +330,8 @@ "../api/units:time_delta", "../api/units:timestamp", "../api/video:video_stream_encoder", + "../api/video/timing:video_jitter_timing_factory", + "../api/video/timing:video_jitter_timing_interface", "../audio", "../logging:rtc_event_audio", "../logging:rtc_event_rtp_rtcp",
diff --git a/call/call.cc b/call/call.cc index 93faed95..dd50675 100644 --- a/call/call.cc +++ b/call/call.cc
@@ -44,6 +44,8 @@ #include "api/units/data_size.h" #include "api/units/time_delta.h" #include "api/units/timestamp.h" +#include "api/video/timing/video_jitter_timing_factory.h" +#include "api/video/timing/video_jitter_timing_interface.h" #include "api/video/video_stream_encoder_settings.h" #include "audio/audio_receive_stream.h" #include "audio/audio_send_stream.h" @@ -149,6 +151,15 @@ return rtclog_config; } +std::unique_ptr<VideoJitterTimingInterface> MaybeCreateVideoJitterTiming( + const Environment& env, + VideoJitterTimingFactory* video_timing_factory) { + if (video_timing_factory) { + return video_timing_factory->Create(env); + } + return nullptr; // DefaultVideoJitterTiming will be used. +} + } // namespace namespace internal { @@ -1042,8 +1053,10 @@ VideoReceiveStream2* receive_stream = new VideoReceiveStream2( env_, this, num_cpu_cores_, transport_send_->packet_router(), std::move(configuration), call_stats_.get(), - std::make_unique<VCMTiming>(&env_.clock(), env_.field_trials(), - render_delay), + std::make_unique<VCMTiming>( + &env_.clock(), env_.field_trials(), render_delay, + MaybeCreateVideoJitterTiming(env_, + config_.video_jitter_timing_factory)), &nack_periodic_processor_, decode_sync_.get()); // TODO(bugs.webrtc.org/11993): Set this up asynchronously on the network // thread.
diff --git a/call/call_config.h b/call/call_config.h index aefa35f..4a67c7e 100644 --- a/call/call_config.h +++ b/call/call_config.h
@@ -24,6 +24,7 @@ #include "api/transport/bitrate_settings.h" #include "api/transport/network_control.h" #include "api/units/time_delta.h" +#include "api/video/timing/video_jitter_timing_factory.h" #include "call/audio_state.h" #include "call/rtp_transport_config.h" @@ -90,6 +91,8 @@ // NetEq factory to use for this call. NetEqFactory* neteq_factory = nullptr; + VideoJitterTimingFactory* video_jitter_timing_factory = nullptr; + TaskQueueBase* network_task_queue_ = nullptr; TaskQueueBase* worker_task_queue = nullptr;
diff --git a/pc/BUILD.gn b/pc/BUILD.gn index edacdda..c5eacce 100644 --- a/pc/BUILD.gn +++ b/pc/BUILD.gn
@@ -1655,6 +1655,7 @@ "../api/transport:network_control", "../api/transport:sctp_transport_factory_interface", "../api/units:data_rate", + "../api/video/timing:video_jitter_timing_factory", "../call:call_interfaces", "../media:codec", "../media:media_engine",
diff --git a/pc/peer_connection_factory.cc b/pc/peer_connection_factory.cc index 5c7c50e..c63b6b0 100644 --- a/pc/peer_connection_factory.cc +++ b/pc/peer_connection_factory.cc
@@ -109,6 +109,8 @@ injected_network_controller_factory_( std::move(dependencies->network_controller_factory)), neteq_factory_(std::move(dependencies->neteq_factory)), + video_jitter_timing_factory_( + std::move(dependencies->video_jitter_timing_factory)), decode_metronome_(std::move(dependencies->decode_metronome)), encode_metronome_(std::move(dependencies->encode_metronome)) {} @@ -396,6 +398,7 @@ call_config.network_state_predictor_factory = network_state_predictor_factory_.get(); call_config.neteq_factory = neteq_factory_.get(); + call_config.video_jitter_timing_factory = video_jitter_timing_factory_.get(); if (field_trials().IsEnabled("WebRTC-Bwe-InjectedCongestionController")) { RTC_LOG(LS_INFO) << "Using pcf injected network controller factory";
diff --git a/pc/peer_connection_factory.h b/pc/peer_connection_factory.h index 723baab..983106c 100644 --- a/pc/peer_connection_factory.h +++ b/pc/peer_connection_factory.h
@@ -36,6 +36,7 @@ #include "api/sequence_checker.h" #include "api/transport/network_control.h" #include "api/transport/sctp_transport_factory_interface.h" +#include "api/video/timing/video_jitter_timing_factory.h" #include "call/call.h" #include "media/base/media_engine.h" #include "pc/codec_vendor.h" @@ -139,6 +140,7 @@ std::unique_ptr<NetworkControllerFactoryInterface> injected_network_controller_factory_; std::unique_ptr<NetEqFactory> neteq_factory_; + std::unique_ptr<VideoJitterTimingFactory> video_jitter_timing_factory_; std::unique_ptr<Metronome> decode_metronome_ RTC_GUARDED_BY(signaling_thread()); std::unique_ptr<Metronome> encode_metronome_