From c949016e1335fcd6babc7cb7611607ef0b373e11 Mon Sep 17 00:00:00 2001 From: Jeroen Dhollander Date: Tue, 7 Jun 2022 10:33:38 +0000 Subject: [PATCH] Revert "Fix memory corruption in BasicDesktopFrame::CopyTo" This reverts commit 0ba10283fb3cbdf1cedea79d84e4bc3b720da6a1. Reason for revert: This workaround is no longer needed, as the libyuv team has already fixed the underlying issue (in b/234824290) Original change's description: > Fix memory corruption in BasicDesktopFrame::CopyTo > > This memory corruption happens inside libyuv::CopyPlane() > on platforms that support AVX. I opened b/234824290 so the libyuv team > can investigate and fix this, but in the mean time we need to get this > fixed asap as this is causing crashes on both M102 (which is released to > stable) and M103 (which has this issue marked as beta blocking). > > Fixed: b/234824290 > Fixed: chromium:1330019 > Test: Manually reproduced on zork board > Change-Id: I6bfd1e089020dfb23d974d3912d45c01a4e5ce26 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/265041 > Auto-Submit: Jeroen Dhollander > Commit-Queue: Alexander Cooper > Reviewed-by: Alexander Cooper > Cr-Commit-Position: refs/heads/main@{#37121} Fixed: b/234824290 Fixed: chromium:1330019 Change-Id: Iafc0eac651fbc7a7fce5092306b12c4377248839 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/265165 Auto-Submit: Jeroen Dhollander Reviewed-by: Alexander Cooper Commit-Queue: Alexander Cooper Reviewed-by: Frank Barchard Cr-Commit-Position: refs/heads/main@{#37142} --- modules/desktop_capture/desktop_frame.cc | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/modules/desktop_capture/desktop_frame.cc b/modules/desktop_capture/desktop_frame.cc index a215e413c7..6e24fab4b5 100644 --- a/modules/desktop_capture/desktop_frame.cc +++ b/modules/desktop_capture/desktop_frame.cc @@ -13,7 +13,6 @@ #include #include -#include #include #include @@ -24,15 +23,6 @@ namespace webrtc { -namespace { - -// Calculate the size of the data buffer size used to store a BasicDesktopFrame. -int CalculateDataSizeFor(const DesktopSize& size) { - return DesktopFrame::kBytesPerPixel * size.width() * size.height(); -} - -} // namespace - DesktopFrame::DesktopFrame(DesktopSize size, int stride, uint8_t* data, @@ -157,7 +147,7 @@ void DesktopFrame::MoveFrameInfoFrom(DesktopFrame* other) { BasicDesktopFrame::BasicDesktopFrame(DesktopSize size) : DesktopFrame(size, kBytesPerPixel * size.width(), - new uint8_t[CalculateDataSizeFor(size)](), + new uint8_t[kBytesPerPixel * size.width() * size.height()](), nullptr) {} BasicDesktopFrame::~BasicDesktopFrame() { @@ -167,9 +157,9 @@ BasicDesktopFrame::~BasicDesktopFrame() { // static DesktopFrame* BasicDesktopFrame::CopyOf(const DesktopFrame& frame) { DesktopFrame* result = new BasicDesktopFrame(frame.size()); - // TODO(b/234824290): Using memcpy until libyuv::CopyPlane() is fixed to no - // longer introduce memory corruption on platforms that support AVX. - memcpy(result->data(), frame.data(), CalculateDataSizeFor(result->size())); + libyuv::CopyPlane(frame.data(), frame.stride(), result->data(), + result->stride(), frame.size().width() * kBytesPerPixel, + frame.size().height()); result->CopyFrameInfoFrom(frame); return result; }