commit | 2264e7aaccfe5ca21bf7fc24967bf7d1157dcb54 | [log] [tgz] |
---|---|---|
author | henrika <henrika@webrtc.org> | Thu May 25 14:38:52 2023 |
committer | WebRTC LUCI CQ <webrtc-scoped@luci-project-accounts.iam.gserviceaccount.com> | Thu May 25 16:46:47 2023 |
tree | 9fb4526e87ba84a7eb3497007faae329ae5cc399 | |
parent | 40a0fa95c84db183ca80a6c68e16add30272bf6a [diff] |
Fixes distortion in WGC screen capture path This is a partial revert of the previously landed CL in https://webrtc-review.googlesource.com/c/src/+/301200. I noticed when I used `getDisplayMedia` on my private Windows laptop in combination with WGC that the captured screen was distorted and did only contain tilted (~35 degrees) lines in all sorts of colors. The issue only happened for one particular screen resolution 3000 x 2000 and 200% scale. Changing to 100% scale instead resolved the issue. I tried many other resolutions but could only trigger for the one above with 200% scaling. Next, I bisected and found [1] which led to [2] which contains my own change in https://webrtc-review.googlesource.com/c/src/+/301200. The only part that could affect the video frame was the part which did `CopyPixelsFrom` so I reverted that part and it solved the issue on my private Windows laptop. I did not dig deeper into why this particular resolution triggered the distortion but deiced to revert to avoid more reports. [1] https://chromium.googlesource.com/chromium/src/+log/b4c2a7fcf591a52c7d07de92808047bf4e2da77d..ff848b7a4337fd22f5c52464bbec164e17b27fa3 [2] https://chromium.googlesource.com/chromium/src/+/a9a2957dbcfd9e2e670fa9a5241269888a0f55d2 Bug: chromium:1428592 Change-Id: I328e77840cd3ca6871254cdf06500bdc616b0c36 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/306600 Commit-Queue: Alexander Cooper <alcooper@chromium.org> Reviewed-by: Alexander Cooper <alcooper@chromium.org> Cr-Commit-Position: refs/heads/main@{#40147}
diff --git a/modules/desktop_capture/win/wgc_capture_session.cc b/modules/desktop_capture/win/wgc_capture_session.cc index 64247d2..f439e21 100644 --- a/modules/desktop_capture/win/wgc_capture_session.cc +++ b/modules/desktop_capture/win/wgc_capture_session.cc
@@ -430,8 +430,12 @@ // Make a copy of the data pointed to by `map_info.pData` to the preallocated // `current_frame` so we are free to unmap our texture. uint8_t* src_data = static_cast<uint8_t*>(map_info.pData); - current_frame->CopyPixelsFrom(src_data, current_frame->stride(), - DesktopRect::MakeSize(current_frame->size())); + uint8_t* dst_data = current_frame->data(); + for (int i = 0; i < image_height; i++) { + memcpy(dst_data, src_data, current_frame->stride()); + dst_data += current_frame->stride(); + src_data += map_info.RowPitch; + } d3d_context->Unmap(mapped_texture_.Get(), 0);