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