From 7f0c39115e124da08a583f2e367bf8bc79d2e82d Mon Sep 17 00:00:00 2001 From: Ilya Nikolaevskiy Date: Tue, 11 Feb 2025 12:43:23 +0100 Subject: [PATCH] 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 Reviewed-by: Henrik Andreassson Cr-Commit-Position: refs/heads/main@{#43867} --- .../win/dxgi_duplicator_controller.cc | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/modules/desktop_capture/win/dxgi_duplicator_controller.cc b/modules/desktop_capture/win/dxgi_duplicator_controller.cc index 4b26393181..cc7d329213 100644 --- a/modules/desktop_capture/win/dxgi_duplicator_controller.cc +++ b/modules/desktop_capture/win/dxgi_duplicator_controller.cc @@ -384,8 +384,18 @@ bool DxgiDuplicatorController::DoDuplicateOne(Context* context, 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; }