Fix inconsistent monitor id handling in DxgiDuplicatorController
In all the other functions `monitor_id` is a global id from range [0..total monitor count), but each DxgiAdapterDuplicator always assumes that it gets a local id from range [0..adapter monitor count).
Bug: chromium:395807060
Change-Id: I4bb232ee5d83f09859534f813111446763fe9fc9
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/376840
Commit-Queue: Ilya Nikolaevskiy <ilnik@webrtc.org>
Reviewed-by: Henrik Andreassson <henrika@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#43867}
diff --git a/modules/desktop_capture/win/dxgi_duplicator_controller.cc b/modules/desktop_capture/win/dxgi_duplicator_controller.cc
index 4b26393..cc7d329 100644
--- a/modules/desktop_capture/win/dxgi_duplicator_controller.cc
+++ b/modules/desktop_capture/win/dxgi_duplicator_controller.cc
@@ -384,8 +384,18 @@
int64_t DxgiDuplicatorController::GetNumFramesCaptured(int monitor_id) const {
int64_t min = INT64_MAX;
+ if (monitor_id < 0) {
+ for (const auto& duplicator : duplicators_) {
+ min = std::min(min, duplicator.GetNumFramesCaptured(monitor_id));
+ }
+ return min;
+ }
for (const auto& duplicator : duplicators_) {
- min = std::min(min, duplicator.GetNumFramesCaptured(monitor_id));
+ if (monitor_id >= duplicator.screen_count()) {
+ monitor_id -= duplicator.screen_count();
+ } else {
+ return duplicator.GetNumFramesCaptured(monitor_id);
+ }
}
return min;
}