Simple, mergable fix to avoid a libyuv CopyPlane crash

Bug: chromium:1330019
Change-Id: I1a22967dff3231c1522fb94de38b309f441d468e
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/265442
Reviewed-by: Frank Barchard <fbarchard@google.com>
Reviewed-by: Alexander Cooper <alcooper@chromium.org>
Commit-Queue: Joe Downing <joedow@google.com>
Cr-Commit-Position: refs/heads/main@{#37158}
This commit is contained in:
Joe Downing
2022-06-08 15:57:43 -07:00
committed by WebRTC LUCI CQ
parent d70186367c
commit f4a6928117

View File

@ -45,10 +45,14 @@ void DesktopFrame::CopyPixelsFrom(const uint8_t* src_buffer,
RTC_CHECK(DesktopRect::MakeSize(size()).ContainsRect(dest_rect));
uint8_t* dest = GetFrameDataAtPos(dest_rect.top_left());
// TODO(crbug.com/1330019): Temporary workaround for a known libyuv crash when
// the height or width is 0. Remove this once this change has been merged.
if (dest_rect.width() && dest_rect.height()) {
libyuv::CopyPlane(src_buffer, src_stride, dest, stride(),
DesktopFrame::kBytesPerPixel * dest_rect.width(),
dest_rect.height());
}
}
void DesktopFrame::CopyPixelsFrom(const DesktopFrame& src_frame,
const DesktopVector& src_pos,
@ -157,9 +161,13 @@ BasicDesktopFrame::~BasicDesktopFrame() {
// static
DesktopFrame* BasicDesktopFrame::CopyOf(const DesktopFrame& frame) {
DesktopFrame* result = new BasicDesktopFrame(frame.size());
// TODO(crbug.com/1330019): Temporary workaround for a known libyuv crash when
// the height or width is 0. Remove this once this change has been merged.
if (frame.size().width() && frame.size().height()) {
libyuv::CopyPlane(frame.data(), frame.stride(), result->data(),
result->stride(), frame.size().width() * kBytesPerPixel,
frame.size().height());
}
result->CopyFrameInfoFrom(frame);
return result;
}