1 /*
2  *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef MODULES_DESKTOP_CAPTURE_DESKTOP_FRAME_ROTATION_H_
12 #define MODULES_DESKTOP_CAPTURE_DESKTOP_FRAME_ROTATION_H_
13 
14 #include "modules/desktop_capture/desktop_frame.h"
15 #include "modules/desktop_capture/desktop_geometry.h"
16 
17 namespace webrtc {
18 
19 // Represents the rotation of a DesktopFrame.
20 enum class Rotation {
21   CLOCK_WISE_0,
22   CLOCK_WISE_90,
23   CLOCK_WISE_180,
24   CLOCK_WISE_270,
25 };
26 
27 // Rotates input DesktopFrame |source|, copies pixel in an unrotated rectangle
28 // |source_rect| into the target rectangle of another DesktopFrame |target|.
29 // Target rectangle here is the rotated |source_rect| plus |target_offset|.
30 // |rotation| specifies |source| to |target| rotation. |source_rect| is in
31 // |source| coordinate. |target_offset| is in |target| coordinate.
32 // This function triggers check failure if |source| does not cover the
33 // |source_rect|, or |target| does not cover the rotated |rect|.
34 void RotateDesktopFrame(const DesktopFrame& source,
35                         const DesktopRect& source_rect,
36                         const Rotation& rotation,
37                         const DesktopVector& target_offset,
38                         DesktopFrame* target);
39 
40 // Returns a reverse rotation of |rotation|.
41 Rotation ReverseRotation(Rotation rotation);
42 
43 // Returns a rotated DesktopSize of |size|.
44 DesktopSize RotateSize(DesktopSize size, Rotation rotation);
45 
46 // Returns a rotated DesktopRect of |rect|. The |size| represents the size of
47 // the DesktopFrame which |rect| belongs in.
48 DesktopRect RotateRect(DesktopRect rect, DesktopSize size, Rotation rotation);
49 
50 }  // namespace webrtc
51 
52 #endif  // MODULES_DESKTOP_CAPTURE_DESKTOP_FRAME_ROTATION_H_
53