Configure render delay constant via constructor of VCMTiming. Remove set_render_delay method. Bug: b/493549134 Change-Id: If9bfbfcda8dda745130faa2c6ff29e14099cb9a4 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/476000 Reviewed-by: Rasmus Brandt <brandtr@webrtc.org> Commit-Queue: Åsa Persson <asapersson@webrtc.org> Cr-Commit-Position: refs/heads/main@{#47882}
diff --git a/call/call.cc b/call/call.cc index 15b8d57..57b582a 100644 --- a/call/call.cc +++ b/call/call.cc
@@ -1040,6 +1040,8 @@ env_.event_log().Log(std::make_unique<RtcEventVideoReceiveStreamConfig>( CreateRtcLogStreamConfig(configuration))); + TimeDelta render_delay = TimeDelta::Millis(configuration.render_delay_ms); + // TODO(bugs.webrtc.org/11993): Move the registration between `receive_stream` // and `video_receiver_controller_` out of VideoReceiveStream2 construction // and set it up asynchronously on the network thread (the registration and @@ -1049,7 +1051,8 @@ 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()), + std::make_unique<VCMTiming>(&env_.clock(), env_.field_trials(), + render_delay), &nack_periodic_processor_, decode_sync_.get()); // TODO(bugs.webrtc.org/11993): Set this up asynchronously on the network // thread.
diff --git a/modules/video_coding/generic_decoder_unittest.cc b/modules/video_coding/generic_decoder_unittest.cc index 2a36bbc..ae09726 100644 --- a/modules/video_coding/generic_decoder_unittest.cc +++ b/modules/video_coding/generic_decoder_unittest.cc
@@ -95,7 +95,9 @@ : time_controller_(Timestamp::Zero()), clock_(time_controller_.GetClock()), field_trials_(CreateTestFieldTrials()), - timing_(time_controller_.GetClock(), field_trials_), + timing_(time_controller_.GetClock(), + field_trials_, + /*render_delay=*/TimeDelta::Millis(10)), decoder_(time_controller_.GetTaskQueueFactory()), vcm_callback_(&timing_, time_controller_.GetClock(),
diff --git a/modules/video_coding/timing/timing.cc b/modules/video_coding/timing/timing.cc index 2d9204b..ae35a70 100644 --- a/modules/video_coding/timing/timing.cc +++ b/modules/video_coding/timing/timing.cc
@@ -75,12 +75,15 @@ max_playout_delay <= kLowLatencyStreamMaxPlayoutDelayThreshold; } -VCMTiming::VCMTiming(Clock* clock, const FieldTrialsView& field_trials) +VCMTiming::VCMTiming(Clock* clock, + const FieldTrialsView& field_trials, + TimeDelta render_delay) : clock_(clock), ts_extrapolator_( std::make_unique<TimestampExtrapolator>(clock_->CurrentTime(), field_trials)), - decode_time_filter_(std::make_unique<DecodeTimePercentileFilter>()) {} + decode_time_filter_(std::make_unique<DecodeTimePercentileFilter>()), + timings_({.render_delay = render_delay}) {} void VCMTiming::Reset() { MutexLock lock(&mutex_); @@ -89,11 +92,6 @@ timings_.Reset(); } -void VCMTiming::set_render_delay(TimeDelta render_delay) { - MutexLock lock(&mutex_); - timings_.render_delay = render_delay; -} - TimeDelta VCMTiming::min_playout_delay() const { MutexLock lock(&mutex_); return timings_.min_playout_delay;
diff --git a/modules/video_coding/timing/timing.h b/modules/video_coding/timing/timing.h index 64bfa61..8ae1e82 100644 --- a/modules/video_coding/timing/timing.h +++ b/modules/video_coding/timing/timing.h
@@ -64,15 +64,14 @@ TimeDelta current_delay = TimeDelta::Zero(); }; - VCMTiming(Clock* clock, const FieldTrialsView& field_trials); + VCMTiming(Clock* clock, + const FieldTrialsView& field_trials, + TimeDelta render_delay); virtual ~VCMTiming() = default; // Resets the timing to the initial state. void Reset(); - // Sets the amount of time needed to render an image. Defaults to 10 ms. - void set_render_delay(TimeDelta render_delay); - // Sets the minimum time the video must be delayed on the receiver to // get the desired jitter buffer level. void SetMinimumDelay(TimeDelta minimum_delay);
diff --git a/modules/video_coding/timing/timing_unittest.cc b/modules/video_coding/timing/timing_unittest.cc index bbdd224..c2a5201 100644 --- a/modules/video_coding/timing/timing_unittest.cc +++ b/modules/video_coding/timing/timing_unittest.cc
@@ -98,7 +98,7 @@ constexpr auto kStartTime = Timestamp::Millis(1337); FieldTrials field_trials = CreateTestFieldTrials(); SimulatedClock clock(kStartTime); - VCMTiming timing(&clock, field_trials); + VCMTiming timing(&clock, field_trials, kRenderDelay); // Provoke a wrap-around. The fifth frame will have wrapped at 25 fps. constexpr uint32_t kRtpTicksPerFrame = k90kHz / k25Fps; @@ -120,7 +120,7 @@ TEST(VCMTimingTest, UseLowLatencyRenderer) { FieldTrials field_trials = CreateTestFieldTrials(); SimulatedClock clock(0); - VCMTiming timing(&clock, field_trials); + VCMTiming timing(&clock, field_trials, kRenderDelay); // Default is false. EXPECT_FALSE(timing.RenderParameters().use_low_latency_rendering); // False if min playout delay > 0. @@ -145,7 +145,7 @@ TEST(VCMTimingTest, UpdateCurrentDelayCapsWhenOffByMicroseconds) { FieldTrials field_trials = CreateTestFieldTrials(); SimulatedClock clock(0); - VCMTiming timing(&clock, field_trials); + VCMTiming timing(&clock, field_trials, kRenderDelay); // Set larger initial current delay. timing.set_min_playout_delay(TimeDelta::Millis(200)); @@ -155,8 +155,7 @@ // rounding, and should reset to the target delay. timing.set_min_playout_delay(TimeDelta::Millis(50)); Timestamp decode_time = Timestamp::Millis(1337); - Timestamp render_time = - decode_time + TimeDelta::Millis(10) + TimeDelta::Micros(37); + Timestamp render_time = decode_time + kRenderDelay + TimeDelta::Micros(37); timing.UpdateCurrentDelay(render_time, decode_time); EXPECT_EQ(timing.GetTimings().current_delay, timing.TargetVideoDelay()); @@ -167,7 +166,7 @@ TEST(VCMTimingTest, StopDecodeTimerClearsOldEstimates) { FieldTrials field_trials = CreateTestFieldTrials(); SimulatedClock clock(0); - VCMTiming timing(&clock, field_trials); + VCMTiming timing(&clock, field_trials, kRenderDelay); UpdateDecodeTimer(timing, clock, kDecodeTime); EXPECT_EQ(timing.GetTimings().estimated_max_decode_time, kDecodeTime); @@ -182,7 +181,7 @@ TEST(VCMTimingTest, GetMinPlayoutDelay) { FieldTrials field_trials = CreateTestFieldTrials(); SimulatedClock clock(0); - VCMTiming timing(&clock, field_trials); + VCMTiming timing(&clock, field_trials, kRenderDelay); timing.set_min_playout_delay(TimeDelta::Millis(123)); EXPECT_EQ(timing.min_playout_delay(), TimeDelta::Millis(123)); @@ -191,14 +190,13 @@ TEST(VCMTimingTest, InitialVideoDelayTimings) { FieldTrials field_trials = CreateTestFieldTrials(); SimulatedClock clock(0); - VCMTiming timing(&clock, field_trials); + VCMTiming timing(&clock, field_trials, kRenderDelay); VCMTiming::VideoDelayTimings timings = timing.GetTimings(); EXPECT_EQ(timings.num_decoded_frames, 0u); EXPECT_EQ(timings.minimum_delay, TimeDelta::Zero()); EXPECT_EQ(timings.estimated_max_decode_time, TimeDelta::Zero()); - EXPECT_EQ(timings.render_delay, - VCMTiming::VideoDelayTimings::kDefaultRenderDelay); + EXPECT_EQ(timings.render_delay, kRenderDelay); EXPECT_EQ(timings.min_playout_delay, TimeDelta::Zero()); EXPECT_EQ(timings.stats_target_delay, TimeDelta::Zero()); EXPECT_EQ(timings.current_delay, TimeDelta::Zero()); @@ -208,11 +206,9 @@ TEST(VCMTimingTest, GetTimings) { FieldTrials field_trials = CreateTestFieldTrials(); SimulatedClock clock(33); - VCMTiming timing(&clock, field_trials); + VCMTiming timing(&clock, field_trials, /*render_delay=*/TimeDelta::Millis(7)); // Setup. - TimeDelta render_delay = TimeDelta::Millis(11); - timing.set_render_delay(render_delay); TimeDelta min_playout_delay = TimeDelta::Millis(50); TimeDelta max_playout_delay = TimeDelta::Millis(500); timing.set_playout_delay({min_playout_delay, max_playout_delay}); @@ -236,7 +232,7 @@ EXPECT_GT(timings.num_decoded_frames, 0u); EXPECT_EQ(timings.minimum_delay, minimum_delay); EXPECT_EQ(timings.estimated_max_decode_time, kDecodeTime); - EXPECT_EQ(timings.render_delay, render_delay); + EXPECT_EQ(timings.render_delay, TimeDelta::Millis(7)); EXPECT_EQ(timings.min_playout_delay, min_playout_delay); EXPECT_EQ(timings.max_playout_delay, max_playout_delay); EXPECT_EQ(timings.stats_target_delay, minimum_delay); @@ -247,9 +243,8 @@ TEST(VCMTimingTest, Reset) { FieldTrials field_trials = CreateTestFieldTrials(); SimulatedClock clock(Timestamp::Millis(33)); - VCMTiming timing(&clock, field_trials); + VCMTiming timing(&clock, field_trials, /*render_delay=*/TimeDelta::Millis(7)); - timing.set_render_delay(TimeDelta::Millis(11)); TimeDelta min_playout_delay = TimeDelta::Millis(50); TimeDelta max_playout_delay = TimeDelta::Millis(500); timing.set_playout_delay({min_playout_delay, max_playout_delay}); @@ -283,7 +278,7 @@ TEST(VCMTimingTest, GetTimingsBeforeAndAfterValidRtpTimestamp) { SimulatedClock clock(33); FieldTrials field_trials = CreateTestFieldTrials(); - VCMTiming timing(&clock, field_trials); + VCMTiming timing(&clock, field_trials, kRenderDelay); // Setup. TimeDelta min_playout_delay = TimeDelta::Millis(50); @@ -324,7 +319,7 @@ TEST(VCMTimingTest, RenderTimeAccountsForCurrentDelay) { FieldTrials field_trials = CreateTestFieldTrials(); SimulatedClock clock(Timestamp::Millis(88)); - VCMTiming timing(&clock, field_trials); + VCMTiming timing(&clock, field_trials, kRenderDelay); timing.set_playout_delay({TimeDelta::Millis(100), TimeDelta::Millis(200)}); timing.OnCompleteTemporalUnit(/*rtp_timestamp=*/0, clock.CurrentTime()); @@ -338,7 +333,7 @@ TEST(VCMTimingTest, RenderTimeRespectsMinPlayoutDelay) { FieldTrials field_trials = CreateTestFieldTrials(); SimulatedClock clock(Timestamp::Millis(88)); - VCMTiming timing(&clock, field_trials); + VCMTiming timing(&clock, field_trials, kRenderDelay); timing.set_playout_delay({TimeDelta::Millis(100), TimeDelta::Millis(200)}); timing.OnCompleteTemporalUnit(/*rtp_timestamp=*/0, clock.CurrentTime()); @@ -352,7 +347,7 @@ TEST(VCMTimingTest, RenderTimeRespectsMaxPlayoutDelay) { FieldTrials field_trials = CreateTestFieldTrials(); SimulatedClock clock(Timestamp::Millis(88)); - VCMTiming timing(&clock, field_trials); + VCMTiming timing(&clock, field_trials, kRenderDelay); timing.set_playout_delay({TimeDelta::Millis(100), TimeDelta::Millis(200)}); timing.OnCompleteTemporalUnit(/*rtp_timestamp=*/0, clock.CurrentTime()); @@ -366,9 +361,8 @@ TEST(VCMTimingTest, IncreasesCurrentDelayWhenFrameIsLate) { FieldTrials field_trials = CreateTestFieldTrials(); SimulatedClock clock(0); - VCMTiming timing(&clock, field_trials); + VCMTiming timing(&clock, field_trials, kRenderDelay); timing.SetMinimumDelay(kMinimumDelay); - timing.set_render_delay(kRenderDelay); // Current delay is initialized to minimum delay. EXPECT_EQ(timing.GetTimings().current_delay, kMinimumDelay); @@ -386,9 +380,8 @@ TEST(VCMTimingTest, CapsCurrentDelayIncreaseToTarget) { FieldTrials field_trials = CreateTestFieldTrials(); SimulatedClock clock(0); - VCMTiming timing(&clock, field_trials); + VCMTiming timing(&clock, field_trials, kRenderDelay); timing.SetMinimumDelay(kMinimumDelay); - timing.set_render_delay(kRenderDelay); // Current delay is initialized to minimum delay. EXPECT_EQ(timing.GetTimings().current_delay, kMinimumDelay); @@ -406,9 +399,8 @@ TEST(VCMTimingTest, KeepsCurrentDelayWhenFrameIsEarly) { FieldTrials field_trials = CreateTestFieldTrials(); SimulatedClock clock(0); - VCMTiming timing(&clock, field_trials); + VCMTiming timing(&clock, field_trials, kRenderDelay); timing.SetMinimumDelay(kMinimumDelay); - timing.set_render_delay(kRenderDelay); // Current delay is initialized to minimum delay. EXPECT_EQ(timing.GetTimings().current_delay, kMinimumDelay); @@ -426,9 +418,8 @@ TEST(VCMTimingTest, IncreasesCurrentDelayWhenFrameIsLateWithDecodeTime) { FieldTrials field_trials = CreateTestFieldTrials(); SimulatedClock clock(0); - VCMTiming timing(&clock, field_trials); + VCMTiming timing(&clock, field_trials, kRenderDelay); timing.SetMinimumDelay(kMinimumDelay); - timing.set_render_delay(kRenderDelay); UpdateDecodeTimer(timing, clock, kDecodeTime); // Current delay is initialized to minimum delay. @@ -448,9 +439,8 @@ TEST(VCMTimingTest, DecreasesCurrentDelayToTarget) { FieldTrials field_trials = CreateTestFieldTrials(); SimulatedClock clock(0); - VCMTiming timing(&clock, field_trials); + VCMTiming timing(&clock, field_trials, kRenderDelay); timing.SetMinimumDelay(kMinimumDelay); - timing.set_render_delay(kRenderDelay); // Current delay should be increased to target for late frame. timing.UpdateCurrentDelay(clock.CurrentTime(), @@ -471,9 +461,8 @@ TEST(VCMTimingTest, MinPlayoutDelayUpdatesTargetDelay) { FieldTrials field_trials = CreateTestFieldTrials(); SimulatedClock clock(0); - VCMTiming timing(&clock, field_trials); + VCMTiming timing(&clock, field_trials, kRenderDelay); timing.SetMinimumDelay(kMinimumDelay); - timing.set_render_delay(kRenderDelay); const TimeDelta kMinPlayout = kMinimumDelay + kRenderDelay + TimeDelta::Millis(50);
diff --git a/modules/video_coding/video_receiver2_unittest.cc b/modules/video_coding/video_receiver2_unittest.cc index 59e7a3cd..e9c6291 100644 --- a/modules/video_coding/video_receiver2_unittest.cc +++ b/modules/video_coding/video_receiver2_unittest.cc
@@ -17,6 +17,7 @@ #include "api/field_trials.h" #include "api/test/mock_video_decoder.h" +#include "api/units/time_delta.h" #include "api/units/timestamp.h" #include "api/video/encoded_frame.h" #include "api/video/video_codec_type.h" @@ -88,7 +89,8 @@ FieldTrials field_trials_ = CreateTestFieldTrials(); SimulatedClock clock_{Timestamp::Millis(1337)}; - VCMTiming timing_{&clock_, field_trials_}; + VCMTiming timing_{&clock_, field_trials_, + /*render_time=*/TimeDelta::Millis(10)}; NiceMock<MockVCMReceiveCallback> receive_callback_; VideoReceiver2 receiver_{&clock_, &timing_, field_trials_, /*corruption_score_calculator=*/nullptr};
diff --git a/video/frame_decode_timing_unittest.cc b/video/frame_decode_timing_unittest.cc index 1e75f44..45cb844 100644 --- a/video/frame_decode_timing_unittest.cc +++ b/video/frame_decode_timing_unittest.cc
@@ -54,9 +54,8 @@ FrameDecodeTimingTest() : field_trials_(CreateTestFieldTrials()), clock_(Timestamp::Millis(1000)), - timing_(&clock_, field_trials_), + timing_(&clock_, field_trials_, /*render_delay=*/TimeDelta::Zero()), frame_decode_scheduler_(&clock_, &timing_, field_trials_) { - timing_.set_render_delay(TimeDelta::Zero()); timing_.OnCompleteTemporalUnit(kNextRtp, clock_.CurrentTime()); } @@ -141,7 +140,7 @@ constexpr Timestamp kZeroRenderTime = Timestamp::Zero(); SimulatedClock clock(kStartTimeUs); FieldTrials field_trials = CreateTestFieldTrials(); - VCMTiming timing(&clock, field_trials); + VCMTiming timing(&clock, field_trials, kRenderDelay); timing.set_playout_delay({TimeDelta::Zero(), TimeDelta::Zero()}); FrameDecodeTiming decode_timing(&clock, &timing, field_trials); @@ -180,7 +179,7 @@ constexpr TimeDelta kTimeDelta = 1 / Frequency::Hertz(60); constexpr Timestamp kZeroRenderTime = Timestamp::Zero(); SimulatedClock clock(kStartTimeUs); - VCMTiming timing(&clock, field_trials); + VCMTiming timing(&clock, field_trials, kRenderDelay); FrameDecodeTiming decode_timing(&clock, &timing, field_trials); // MaxWaitingTime() returns zero for evenly spaced video frames. @@ -230,7 +229,7 @@ constexpr int64_t kStartTimeUs = 3.15e13; // About one year in us. const TimeDelta kTimeDelta = TimeDelta::Millis(1000.0 / 60.0); SimulatedClock clock(kStartTimeUs); - VCMTiming timing(&clock, field_trials); + VCMTiming timing(&clock, field_trials, kRenderDelay); FrameDecodeTiming decode_timing(&clock, &timing, field_trials); clock.AdvanceTime(kTimeDelta); @@ -263,7 +262,7 @@ const TimeDelta kTimeDelta = TimeDelta::Millis(1000.0 / 60.0); constexpr Timestamp kZeroRenderTime = Timestamp::Zero(); SimulatedClock clock(kStartTimeUs); - VCMTiming timing(&clock, field_trials); + VCMTiming timing(&clock, field_trials, kRenderDelay); FrameDecodeTiming decode_timing(&clock, &timing, field_trials); // MaxWaitingTime() returns zero for evenly spaced video frames. @@ -294,8 +293,7 @@ TEST(FrameDecodeTimingMaxWaitingTimeTest, WithVaryingRenderTimes) { FieldTrials field_trials = CreateTestFieldTrials(); SimulatedClock clock(0); - VCMTiming timing(&clock, field_trials); - timing.set_render_delay(kRenderDelay); + VCMTiming timing(&clock, field_trials, kRenderDelay); UpdateDecodeTimer(timing, clock, kDecodeTime); FrameDecodeTiming decode_timing(&clock, &timing, field_trials);
diff --git a/video/timing/simulator/rendering_simulator.cc b/video/timing/simulator/rendering_simulator.cc index 66b1e48..ca59379 100644 --- a/video/timing/simulator/rendering_simulator.cc +++ b/video/timing/simulator/rendering_simulator.cc
@@ -183,12 +183,13 @@ uint32_t rtx_ssrc, RenderingSimulator::Results* absl_nonnull results) : collector_(env, ssrc), - tracker_(env, - RenderingTracker::Config{ - .ssrc = ssrc, - .render_delay = RenderingSimulator::kRenderDelay}, - config.video_timing_factory(env), - &collector_), + tracker_( + env, + RenderingTracker::Config{ + .ssrc = ssrc, + .render_delay = RenderingSimulator::kRenderDelay}, + config.video_timing_factory(env, RenderingSimulator::kRenderDelay), + &collector_), assembler_(env, ssrc, &collector_, &tracker_), receiver_(env, ssrc, rtx_ssrc, &assembler_), results_(*results) {
diff --git a/video/timing/simulator/rendering_simulator.h b/video/timing/simulator/rendering_simulator.h index 79f8766..aab6109 100644 --- a/video/timing/simulator/rendering_simulator.h +++ b/video/timing/simulator/rendering_simulator.h
@@ -42,12 +42,14 @@ public: struct Config { using VideoTimingFactory = - std::function<std::unique_ptr<VCMTiming>(Environment)>; + std::function<std::unique_ptr<VCMTiming>(Environment, TimeDelta)>; std::string name = ""; std::string field_trials_string = ""; - VideoTimingFactory video_timing_factory = [](Environment env) { - return std::make_unique<VCMTiming>(&env.clock(), env.field_trials()); + VideoTimingFactory video_timing_factory = [](Environment env, + TimeDelta render_delay) { + return std::make_unique<VCMTiming>(&env.clock(), env.field_trials(), + render_delay); }; // Whether or not to reset the stream state on newly logged streams with the
diff --git a/video/timing/simulator/rendering_tracker.cc b/video/timing/simulator/rendering_tracker.cc index 9741c5b..0fc6eb3 100644 --- a/video/timing/simulator/rendering_tracker.cc +++ b/video/timing/simulator/rendering_tracker.cc
@@ -85,7 +85,6 @@ RTC_DCHECK(config.render_delay.IsFinite()); // Setup. ResetVideoStreamBufferControllerObserverStats(); - video_timing_->set_render_delay(config_.render_delay); video_stream_buffer_controller_.StartNextDecode(/*keyframe_required=*/true); }
diff --git a/video/timing/simulator/rendering_tracker_unittest.cc b/video/timing/simulator/rendering_tracker_unittest.cc index 81e3f05..404559b 100644 --- a/video/timing/simulator/rendering_tracker_unittest.cc +++ b/video/timing/simulator/rendering_tracker_unittest.cc
@@ -63,10 +63,10 @@ RTC_DCHECK_RUN_ON(queue_ptr_); rendering_tracker_ = std::make_unique<RenderingTracker>( env_, - RenderingTracker::Config{ - .ssrc = EncodedFrameBuilderGenerator::kSsrc, - .render_delay = TimeDelta::Millis(10)}, - std::make_unique<VCMTiming>(&env_.clock(), env_.field_trials()), + RenderingTracker::Config{.ssrc = EncodedFrameBuilderGenerator::kSsrc, + .render_delay = TimeDelta::Millis(10)}, + std::make_unique<VCMTiming>(&env_.clock(), env_.field_trials(), + /*render_delay=*/TimeDelta::Millis(10)), &rendering_tracker_events_); rendering_tracker_->SetDecodedFrameIdCallback(&decoded_frame_id_cb_); });
diff --git a/video/video_receive_stream2.cc b/video/video_receive_stream2.cc index bd17704..7c1b81b 100644 --- a/video/video_receive_stream2.cc +++ b/video/video_receive_stream2.cc
@@ -297,8 +297,6 @@ decoder_payload_types.insert(decoder.payload_type); } - timing_->set_render_delay(TimeDelta::Millis(config_.render_delay_ms)); - if (!config_.rtp.rtx_associated_payload_types.empty()) { rtx_receive_stream_ = std::make_unique<RtxReceiveStream>( env_, &rtp_video_stream_receiver_,
diff --git a/video/video_receive_stream2_unittest.cc b/video/video_receive_stream2_unittest.cc index 63ece66..66c92f9 100644 --- a/video/video_receive_stream2_unittest.cc +++ b/video/video_receive_stream2_unittest.cc
@@ -268,7 +268,8 @@ video_receive_stream_->UnregisterFromTransport(); video_receive_stream_ = nullptr; } - timing_ = new VCMTiming(&env_.clock(), env_.field_trials()); + timing_ = new VCMTiming(&env_.clock(), env_.field_trials(), + TimeDelta::Millis(config_.render_delay_ms)); video_receive_stream_ = std::make_unique<internal::VideoReceiveStream2>( env_, &fake_call_, kDefaultNumCpuCores, &packet_router_, config_.Copy(), &call_stats_, absl::WrapUnique(timing_), &nack_periodic_processor_,
diff --git a/video/video_stream_buffer_controller_unittest.cc b/video/video_stream_buffer_controller_unittest.cc index 9925644..81e49e6 100644 --- a/video/video_stream_buffer_controller_unittest.cc +++ b/video/video_stream_buffer_controller_unittest.cc
@@ -140,7 +140,7 @@ decode_sync_(clock_, &fake_metronome_, time_controller_.GetMainThread()), - timing_(clock_, field_trials_), + timing_(clock_, field_trials_, /*render_delay=*/TimeDelta::Millis(10)), buffer_(std::make_unique<VideoStreamBufferController>( clock_, time_controller_.GetMainThread(),