From a6bccab358f534a4f5b378e75f817de0d414ff59 Mon Sep 17 00:00:00 2001 From: Jeremy Leconte Date: Mon, 20 Jan 2025 11:08:39 +0100 Subject: [PATCH] [DVQA] Dont try to render a 'superfluous' frame. Change-Id: I3427cecab30b1705e5fbec110494f58cb1c599b5 Bug: None Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/374861 Commit-Queue: Jeremy Leconte Reviewed-by: Artem Titov Reviewed-by: Mirko Bonadei Cr-Commit-Position: refs/heads/main@{#43778} --- .../pc/e2e/analyzer/video/default_video_quality_analyzer.cc | 6 ++++-- .../video/default_video_quality_analyzer_frame_in_flight.h | 3 +-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/test/pc/e2e/analyzer/video/default_video_quality_analyzer.cc b/test/pc/e2e/analyzer/video/default_video_quality_analyzer.cc index 5b1d558914..a325334371 100644 --- a/test/pc/e2e/analyzer/video/default_video_quality_analyzer.cc +++ b/test/pc/e2e/analyzer/video/default_video_quality_analyzer.cc @@ -503,7 +503,8 @@ void DefaultVideoQualityAnalyzer::OnFrameRendered( auto frame_it = captured_frames_in_flight_.find(frame.id()); if (frame_it == captured_frames_in_flight_.end() || frame_it->second.HasRenderedTime(peer_index) || - frame_it->second.IsDropped(peer_index)) { + frame_it->second.IsDropped(peer_index) || + frame_it->second.IsSuperfluous(peer_index)) { // It means this frame was rendered or dropped before, so we can skip it. // It may happen when we have multiple simulcast streams in one track and // received the same frame from two different streams because SFU can't @@ -514,7 +515,8 @@ void DefaultVideoQualityAnalyzer::OnFrameRendered( if (frame_it != captured_frames_in_flight_.end()) { if (frame_it->second.HasRenderedTime(peer_index)) { reason = kSkipRenderedFrameReasonRendered; - } else if (frame_it->second.IsDropped(peer_index)) { + } else if (frame_it->second.IsDropped(peer_index) || + frame_it->second.IsSuperfluous(peer_index)) { reason = kSkipRenderedFrameReasonDropped; } } diff --git a/test/pc/e2e/analyzer/video/default_video_quality_analyzer_frame_in_flight.h b/test/pc/e2e/analyzer/video/default_video_quality_analyzer_frame_in_flight.h index 287aa6f4bb..c116cf69b2 100644 --- a/test/pc/e2e/analyzer/video/default_video_quality_analyzer_frame_in_flight.h +++ b/test/pc/e2e/analyzer/video/default_video_quality_analyzer_frame_in_flight.h @@ -138,6 +138,7 @@ class FrameInFlight { void MarkSuperfluous(size_t peer) { receiver_stats_[peer].superfluous = true; } + bool IsSuperfluous(size_t peer) const; void SetPrevFrameRenderedTime(size_t peer, webrtc::Timestamp time) { receiver_stats_[peer].prev_frame_rendered_time = time; @@ -150,8 +151,6 @@ class FrameInFlight { FrameStats GetStatsForPeer(size_t peer) const; private: - bool IsSuperfluous(size_t peer) const; - const size_t stream_; // Set of peer's indexes who are expected to receive this frame. This is not // the set of peer's indexes that received the frame. For example, if peer A