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] b4c2a7fcf5..ff848b7a43

[2] a9a2957dbc

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}
This commit is contained in:
henrika 2023-05-25 16:38:52 +02:00 committed by WebRTC LUCI CQ
parent 40a0fa95c8
commit 2264e7aacc

View File

@ -430,8 +430,12 @@ HRESULT WgcCaptureSession::ProcessFrame() {
// 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);