Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(23)

Unified Diff: webrtc/modules/desktop_capture/screen_painter.h

Issue 2268093002: [WebRTC] A real ScreenCapturer test (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/desktop_capture/screen_painter.h
diff --git a/webrtc/modules/desktop_capture/screen_painter.h b/webrtc/modules/desktop_capture/screen_painter.h
new file mode 100644
index 0000000000000000000000000000000000000000..e5807175f8ce10a9ade30f4a2da5be22bc8b1b60
--- /dev/null
+++ b/webrtc/modules/desktop_capture/screen_painter.h
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef WEBRTC_MODULES_DESKTOP_CAPTURE_SCREEN_PAINTER_H_
+#define WEBRTC_MODULES_DESKTOP_CAPTURE_SCREEN_PAINTER_H_
+
+#include <stdint.h>
+
+#include <memory>
+#include <vector>
+
+#include "webrtc/modules/desktop_capture/desktop_frame.h"
+#include "webrtc/modules/desktop_capture/desktop_geometry.h"
+#include "webrtc/modules/desktop_capture/screen_drawer.h"
+
+namespace webrtc {
+
+// A set of platform independent functions to draw various shapes on the screen.
+// This class provides more convenient functions to draw more complex shapes by
+// using a ScreenDrawer for a certain platform. This class is for testing
+// ScreenCapturer* implementations only, and should not be used in production
+// logic.
+class ScreenPainter final {
Jamie 2016/08/23 18:50:54 I suggest removing this class. Other than randomiz
Hzj_jie 2016/08/26 00:06:49 After talked offline with Joe, I will remove rando
Hzj_jie 2016/08/26 02:05:24 Sorry, my bad, I forgot to update this comment.
+ public:
+ // Creates a ScreenPainter for the current platform, returns nullptr if no
+ // ScreenDrawer implementation available.
+ static std::unique_ptr<ScreenPainter> Create();
+
+ ~ScreenPainter();
+
+ // A four bytes structure to store a color in BGRA format, which can be safely
+ // cast into uint8_t* to compare with DesktopFrame::data().
+ struct Color final {
+ // Creates a white Color.
+ static Color White();
Jamie 2016/08/23 18:50:53 I don't think you need this ctor either if you sup
Hzj_jie 2016/08/26 00:06:49 Done.
+
+ // Creates a random Color.
+ static Color Random();
Jamie 2016/08/23 18:50:53 I don't think this file should contain any functio
Hzj_jie 2016/08/26 00:06:49 Done.
+
+ // Returns true if |bgra| four bytes in BGRA order represents a same color
+ // as |this|.
+ bool operator==(const uint8_t* const bgra) const;
+
+ // Returns true if |bgra| four bytes in BGRA order represents a different
+ // color as |this|.
+ bool operator!=(const uint8_t* const bgra) const;
+
+ // Returns true if |this| and |right| is the same color.
+ bool operator==(const Color right) const;
+
+ // Returns true if |this| and |right| are different colors.
+ bool operator!=(const Color right) const;
+
+ // Returns true if the pixels represent by |right| are equal to |left|.
+ static bool PixelsMatch(const std::vector<Color>& left,
+ const uint8_t* right);
+
+ // Converts current Color into its uint format in RGBA order for
+ // ScreenDrawer to draw shapes.
+ uint32_t ToUInt32() const;
+
+ uint8_t bgra[DesktopFrame::kBytesPerPixel];
+ };
+ static_assert(sizeof(Color) == sizeof(Color::bgra) &&
+ sizeof(Color) == DesktopFrame::kBytesPerPixel,
+ "No extra fields should be added to Color structure.");
Jamie 2016/08/23 18:50:53 You won't need this if you get rid of the memset/m
Hzj_jie 2016/08/26 00:06:49 Done.
+
+ // Returns ScreenDrawer::DrawableRegion().
+ DesktopRect DrawableRegion();
+
+ // Draws a rectangle by calling ScreenDrawer::DrawRectangle. |rect| will be
+ // intersected with DrawableRegion(), so if it's out of DrawableRegion(), this
+ // function takes no effect. If part of |rect| is out of DrawableRegion(),
+ // this function draws less area.
+ void DrawRectangle(DesktopRect rect, Color color);
+
+ // Calls ScreenDrawer::WaitForPendingPaintings().
+ void WaitForPendingPaintings();
+
+ // Draws a black (RGBA 0 0 0 0) rectangle to cover entire DrawableRegion().
+ void Clear();
+
+ // Draws a dot at |vect| with color |color|. If |vect| is out of
+ // DrawableRegion(), this function takes no effect.
+ void DrawDot(DesktopVector vect, Color color);
+
+ // Draws a dot with random color at |vect| and returns the color. If |vect| is
+ // out of DrawableRegion(), this function takes no effect, but still returns a
+ // color.
+ Color DrawRandomColorDot(DesktopVector vect);
+
+ // Draws a serial of dots with random colors between |start| and |end|, and
+ // stores the colors in |colors|. Returns the number of dots rendered, which
+ // equals to
+ // std::max(std::abs(end.y() - start.y()), std::abs(end.x() - start.x())).
+ // The dot at |end| is ignored, and if |start| == |end|, this function does
+ // not take effect. If |start| or |end| is out of DrawableRegion(), the
+ // visible dots may be less than the value returned.
+ int DrawColorfulLine(DesktopVector start,
+ DesktopVector end,
+ std::vector<Color>* colors);
+
+ // Draws a colorful horizontal line starting from |start|, with length |len|,
+ // stores the colors in |colors|. If |len| is less than zero, the line will be
+ // drawn to left. If |len| is zero, this function does not take effect. If
+ // |start| or |start|.x() + |len| is out of DrawableRegion(), this function
+ // may draw less dots than |len|.
+ void DrawColorfulHorizontalLine(DesktopVector start,
+ int len,
+ std::vector<Color>* colors);
+
+ // Draws a colorful horizontal line starting from |start|, with length
+ // |colors|.size(). This function draws each dot with one color in |colors|
+ // sequentially.
+ void DrawColorfulHorizontalLine(DesktopVector start,
+ const std::vector<Color>& colors);
+
+ // Draws a random color rectangle at |rect|, returns the color. |rect| will
+ // be intersected with DrawableRegion(), so if it's out of DrawableRegion(),
+ // this function takes no effect. If part of |rect| is out of
+ // DrawableRegion(), this function draws less area.
+ Color DrawRandomColorRectangle(DesktopRect rect);
+
+ // Draws a random color rectangle with random size in the range of |range|,
+ // and sets |color| and |rect| with the color, position and size.
+ void DrawRandomColorRectangleIn(DesktopSize range,
+ Color* color,
+ DesktopRect* rect);
+
+ private:
+ explicit ScreenPainter(std::unique_ptr<ScreenDrawer> drawer);
+
+ std::unique_ptr<ScreenDrawer> drawer_;
+};
+
+} // namespace webrtc
+
+#endif // WEBRTC_MODULES_DESKTOP_CAPTURE_SCREEN_PAINTER_H_

Powered by Google App Engine
This is Rietveld 408576698