xref: /aosp_15_r20/external/webrtc/modules/desktop_capture/desktop_frame_rotation.h (revision d9f758449e529ab9291ac668be2861e7a55c2422)
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