Do not crop DesktopFrame if the size won't change
CreateCroppedDesktopFrame() does not need to create a CroppedDesktopFrame if the
size won't change.
Bug: webrtc:8039
Change-Id: Ie6789a4b473b69bced94c4a25a68f1da6bb3510e
Reviewed-on: https://chromium-review.googlesource.com/587808
Commit-Queue: Zijie He <zijiehe@chromium.org>
Reviewed-by: Jamie Walch <jamiewalch@chromium.org>
Cr-Commit-Position: refs/heads/master@{#19163}
diff --git a/webrtc/modules/desktop_capture/cropped_desktop_frame.cc b/webrtc/modules/desktop_capture/cropped_desktop_frame.cc
index 9d4d123..5aa1449 100644
--- a/webrtc/modules/desktop_capture/cropped_desktop_frame.cc
+++ b/webrtc/modules/desktop_capture/cropped_desktop_frame.cc
@@ -12,6 +12,7 @@
#include "webrtc/modules/desktop_capture/cropped_desktop_frame.h"
+#include "webrtc/rtc_base/checks.h"
#include "webrtc/rtc_base/constructormagic.h"
namespace webrtc {
@@ -31,8 +32,15 @@
std::unique_ptr<DesktopFrame> CreateCroppedDesktopFrame(
std::unique_ptr<DesktopFrame> frame,
const DesktopRect& rect) {
- if (!DesktopRect::MakeSize(frame->size()).ContainsRect(rect))
+ RTC_DCHECK(frame);
+
+ if (!DesktopRect::MakeSize(frame->size()).ContainsRect(rect)) {
return nullptr;
+ }
+
+ if (frame->size().equals(rect.size())) {
+ return frame;
+ }
return std::unique_ptr<DesktopFrame>(
new CroppedDesktopFrame(std::move(frame), rect));
diff --git a/webrtc/modules/desktop_capture/cropped_desktop_frame.h b/webrtc/modules/desktop_capture/cropped_desktop_frame.h
index 42ae587..107fe7f 100644
--- a/webrtc/modules/desktop_capture/cropped_desktop_frame.h
+++ b/webrtc/modules/desktop_capture/cropped_desktop_frame.h
@@ -15,6 +15,10 @@
namespace webrtc {
+// Creates a DesktopFrame to contain only the area of |rect| in the original
+// |frame|.
+// |frame| should not be nullptr. |rect| is in |frame| coordinate, i.e.
+// |frame|->top_left() does not impact the area of |rect|.
// Returns nullptr frame if |rect| is not contained by the bounds of |frame|.
std::unique_ptr<DesktopFrame> CreateCroppedDesktopFrame(
std::unique_ptr<DesktopFrame> frame,