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; }