[cleanup] Return struct from VCMTiming::GetTimings
Cleans callers having to initialize TimeDeltas.
Change-Id: Ib00a59bedf05fb82c9fde1d9fdd1e341e2132cb8
Bug: None
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/256360
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Commit-Queue: Evan Shrubsole <eshr@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#36292}
diff --git a/modules/video_coding/frame_buffer2.cc b/modules/video_coding/frame_buffer2.cc
index de23981..b4b9c11 100644
--- a/modules/video_coding/frame_buffer2.cc
+++ b/modules/video_coding/frame_buffer2.cc
@@ -596,17 +596,12 @@
if (!stats_callback_)
return;
- TimeDelta max_decode = TimeDelta::Zero();
- TimeDelta current_delay = TimeDelta::Zero();
- TimeDelta target_delay = TimeDelta::Zero();
- TimeDelta jitter_buffer = TimeDelta::Zero();
- TimeDelta min_playout_delay = TimeDelta::Zero();
- TimeDelta render_delay = TimeDelta::Zero();
- if (timing_->GetTimings(&max_decode, ¤t_delay, &target_delay,
- &jitter_buffer, &min_playout_delay, &render_delay)) {
+ auto timings = timing_->GetTimings();
+ if (timings.num_decoded_frames > 0) {
stats_callback_->OnFrameBufferTimingsUpdated(
- max_decode.ms(), current_delay.ms(), target_delay.ms(),
- jitter_buffer.ms(), min_playout_delay.ms(), render_delay.ms());
+ timings.max_decode_duration.ms(), timings.current_delay.ms(),
+ timings.target_delay.ms(), timings.jitter_buffer_delay.ms(),
+ timings.min_playout_delay.ms(), timings.render_delay.ms());
}
}
diff --git a/modules/video_coding/frame_buffer2_unittest.cc b/modules/video_coding/frame_buffer2_unittest.cc
index 4811635..d8ba863 100644
--- a/modules/video_coding/frame_buffer2_unittest.cc
+++ b/modules/video_coding/frame_buffer2_unittest.cc
@@ -65,25 +65,8 @@
return render_time - now - kDecodeTime;
}
- bool GetTimings(TimeDelta* max_decode,
- TimeDelta* current_delay,
- TimeDelta* target_delay,
- TimeDelta* jitter_buffer,
- TimeDelta* min_playout_delay,
- TimeDelta* render_delay) const override {
- return true;
- }
-
TimeDelta GetCurrentJitter() {
- TimeDelta max_decode = TimeDelta::Zero();
- TimeDelta current_delay = TimeDelta::Zero();
- TimeDelta target_delay = TimeDelta::Zero();
- TimeDelta jitter_buffer = TimeDelta::Zero();
- TimeDelta min_playout_delay = TimeDelta::Zero();
- TimeDelta render_delay = TimeDelta::Zero();
- VCMTiming::GetTimings(&max_decode, ¤t_delay, &target_delay,
- &jitter_buffer, &min_playout_delay, &render_delay);
- return jitter_buffer;
+ return VCMTiming::GetTimings().jitter_buffer_delay;
}
private:
@@ -538,6 +521,8 @@
EXPECT_CALL(stats_callback_,
OnCompleteFrame(true, kFrameSize, VideoContentType::UNSPECIFIED));
EXPECT_CALL(stats_callback_, OnFrameBufferTimingsUpdated(_, _, _, _, _, _));
+ // Stats callback requires a previously decoded frame.
+ timing_.StopDecodeTimer(TimeDelta::Millis(1), Timestamp::Zero());
{
std::unique_ptr<FrameObjectFake> frame(new FrameObjectFake());
diff --git a/modules/video_coding/receiver_unittest.cc b/modules/video_coding/receiver_unittest.cc
index 73c88a5..e38f9c5 100644
--- a/modules/video_coding/receiver_unittest.cc
+++ b/modules/video_coding/receiver_unittest.cc
@@ -448,11 +448,9 @@
int64_t arrive_timestamps[kNumFrames];
int64_t render_timestamps[kNumFrames];
- TimeDelta render_delay_ms = TimeDelta::Zero();
- TimeDelta max_decode_ms = TimeDelta::Zero();
- TimeDelta dummy = TimeDelta::Zero();
- timing_.GetTimings(&max_decode_ms, &dummy, &dummy, &dummy, &dummy,
- &render_delay_ms);
+ auto timings = timing_.GetTimings();
+ TimeDelta render_delay = timings.render_delay;
+ TimeDelta max_decode = timings.max_decode_duration;
// Construct test samples.
// render_timestamps are the timestamps stored in the Frame;
@@ -479,9 +477,8 @@
receiver_.FrameForDecoding(kMaxWaitTime, prefer_late_decoding);
int64_t end_time = clock_.TimeInMilliseconds();
if (frame) {
- EXPECT_EQ(
- frame->RenderTimeMs() - max_decode_ms.ms() - render_delay_ms.ms(),
- end_time);
+ EXPECT_EQ(frame->RenderTimeMs() - max_decode.ms() - render_delay.ms(),
+ end_time);
receiver_.ReleaseFrame(frame);
++num_frames_return;
} else {
diff --git a/modules/video_coding/timing.cc b/modules/video_coding/timing.cc
index 89159f6..390a499 100644
--- a/modules/video_coding/timing.cc
+++ b/modules/video_coding/timing.cc
@@ -238,20 +238,15 @@
jitter_delay_ + RequiredDecodeTime() + render_delay_);
}
-bool VCMTiming::GetTimings(TimeDelta* max_decode,
- TimeDelta* current_delay,
- TimeDelta* target_delay,
- TimeDelta* jitter_buffer,
- TimeDelta* min_playout_delay,
- TimeDelta* render_delay) const {
+VCMTiming::VideoDelayTimings VCMTiming::GetTimings() const {
MutexLock lock(&mutex_);
- *max_decode = RequiredDecodeTime();
- *current_delay = current_delay_;
- *target_delay = TargetDelayInternal();
- *jitter_buffer = jitter_delay_;
- *min_playout_delay = min_playout_delay_;
- *render_delay = render_delay_;
- return (num_decoded_frames_ > 0);
+ return VideoDelayTimings{.max_decode_duration = RequiredDecodeTime(),
+ .current_delay = current_delay_,
+ .target_delay = TargetDelayInternal(),
+ .jitter_buffer_delay = jitter_delay_,
+ .min_playout_delay = min_playout_delay_,
+ .render_delay = render_delay_,
+ .num_decoded_frames = num_decoded_frames_};
}
void VCMTiming::SetTimingFrameInfo(const TimingFrameInfo& info) {
diff --git a/modules/video_coding/timing.h b/modules/video_coding/timing.h
index 8ab2f68..af3974a 100644
--- a/modules/video_coding/timing.h
+++ b/modules/video_coding/timing.h
@@ -94,12 +94,16 @@
// Return current timing information. Returns true if the first frame has been
// decoded, false otherwise.
- virtual bool GetTimings(TimeDelta* max_decode,
- TimeDelta* current_delay,
- TimeDelta* target_delay,
- TimeDelta* jitter_buffer,
- TimeDelta* min_playout_delay,
- TimeDelta* render_delay) const;
+ struct VideoDelayTimings {
+ TimeDelta max_decode_duration;
+ TimeDelta current_delay;
+ TimeDelta target_delay;
+ TimeDelta jitter_buffer_delay;
+ TimeDelta min_playout_delay;
+ TimeDelta render_delay;
+ size_t num_decoded_frames;
+ };
+ VideoDelayTimings GetTimings() const;
void SetTimingFrameInfo(const TimingFrameInfo& info);
absl::optional<TimingFrameInfo> GetTimingFrameInfo();