From db9be7f1940d83474f4e9a3f16c5912938d56303 Mon Sep 17 00:00:00 2001 From: Salman Malik Date: Wed, 15 Mar 2023 12:58:59 +0000 Subject: [PATCH] x_server_pixel_buffer: Use CopyPixelsFrom instead of memcpy `CopyPixelsFrom` uses libyuv underneath and has handrolled implementation for copying with AVX. Bug: chromium:1424776 Change-Id: I4fafeba97fcc1d2200a10070837672175a1dfc50 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/297800 Reviewed-by: Alexander Cooper Commit-Queue: Alexander Cooper Auto-Submit: Salman Malik Cr-Commit-Position: refs/heads/main@{#39567} --- .../linux/x11/x_server_pixel_buffer.cc | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/modules/desktop_capture/linux/x11/x_server_pixel_buffer.cc b/modules/desktop_capture/linux/x11/x_server_pixel_buffer.cc index fd6fc7daf4..e0b334dab1 100644 --- a/modules/desktop_capture/linux/x11/x_server_pixel_buffer.cc +++ b/modules/desktop_capture/linux/x11/x_server_pixel_buffer.cc @@ -69,20 +69,11 @@ void FastBlit(XImage* x_image, RTC_DCHECK_LE(frame->top_left().x(), rect.left()); RTC_DCHECK_LE(frame->top_left().y(), rect.top()); - int src_stride = x_image->bytes_per_line; - int dst_x = rect.left() - frame->top_left().x(); - int dst_y = rect.top() - frame->top_left().y(); - - uint8_t* dst_pos = frame->data() + frame->stride() * dst_y; - dst_pos += dst_x * DesktopFrame::kBytesPerPixel; - - int height = rect.height(); - int row_bytes = rect.width() * DesktopFrame::kBytesPerPixel; - for (int y = 0; y < height; ++y) { - memcpy(dst_pos, src_pos, row_bytes); - src_pos += src_stride; - dst_pos += frame->stride(); - } + frame->CopyPixelsFrom( + src_pos, x_image->bytes_per_line, + DesktopRect::MakeXYWH(rect.left() - frame->top_left().x(), + rect.top() - frame->top_left().y(), rect.width(), + rect.height())); } void SlowBlit(XImage* x_image,