[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}
This commit is contained in:
Evan Shrubsole 2022-03-22 10:55:15 +01:00 committed by WebRTC LUCI CQ
parent 6ceb81f62b
commit 92e89d7f77
6 changed files with 36 additions and 66 deletions

View File

@ -596,17 +596,12 @@ void FrameBuffer::UpdateJitterDelay() {
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, &current_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());
}
}

View File

@ -65,25 +65,8 @@ class VCMTimingFake : public VCMTiming {
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, &current_delay, &target_delay,
&jitter_buffer, &min_playout_delay, &render_delay);
return jitter_buffer;
return VCMTiming::GetTimings().jitter_buffer_delay;
}
private:
@ -538,6 +521,8 @@ TEST_F(TestFrameBuffer2, StatsCallback) {
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());

View File

@ -448,11 +448,9 @@ TEST_F(VCMReceiverTimingTest, FrameForDecodingPreferLateDecoding) {
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 @@ TEST_F(VCMReceiverTimingTest, FrameForDecodingPreferLateDecoding) {
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 {

View File

@ -238,20 +238,15 @@ TimeDelta VCMTiming::TargetDelayInternal() const {
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) {

View File

@ -94,12 +94,16 @@ class VCMTiming {
// 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();

View File

@ -405,18 +405,12 @@ class FrameBuffer3Proxy : public FrameBufferProxy {
}
void UpdateJitterDelay() {
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, &current_delay, &target_delay,
&jitter_buffer, &min_playout_delay,
&render_delay)) {
auto timings = timing_->GetTimings();
if (timings.num_decoded_frames) {
stats_proxy_->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());
}
}