[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 <jleconte@webrtc.org>
Reviewed-by: Artem Titov <titovartem@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#43778}
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 5b1d558..a325334 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 @@
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 @@
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 287aa6f..c116cf6 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 @@
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 @@
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