diff --git a/modules/desktop_capture/desktop_frame.cc b/modules/desktop_capture/desktop_frame.cc index 6e24fab4b5..a215e413c7 100644 --- a/modules/desktop_capture/desktop_frame.cc +++ b/modules/desktop_capture/desktop_frame.cc @@ -13,6 +13,7 @@ #include #include +#include #include #include @@ -23,6 +24,15 @@ 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, @@ -147,7 +157,7 @@ void DesktopFrame::MoveFrameInfoFrom(DesktopFrame* other) { BasicDesktopFrame::BasicDesktopFrame(DesktopSize size) : DesktopFrame(size, kBytesPerPixel * size.width(), - new uint8_t[kBytesPerPixel * size.width() * size.height()](), + new uint8_t[CalculateDataSizeFor(size)](), nullptr) {} BasicDesktopFrame::~BasicDesktopFrame() { @@ -157,9 +167,9 @@ BasicDesktopFrame::~BasicDesktopFrame() { // static DesktopFrame* BasicDesktopFrame::CopyOf(const DesktopFrame& frame) { DesktopFrame* result = new BasicDesktopFrame(frame.size()); - libyuv::CopyPlane(frame.data(), frame.stride(), result->data(), - result->stride(), frame.size().width() * kBytesPerPixel, - frame.size().height()); + // 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())); result->CopyFrameInfoFrom(frame); return result; }