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_RGBA_COLOR_H_ 12 #define MODULES_DESKTOP_CAPTURE_RGBA_COLOR_H_ 13 14 #include <stdint.h> 15 16 #include "modules/desktop_capture/desktop_frame.h" 17 18 namespace webrtc { 19 20 // A four-byte structure to store a color in BGRA format. This structure also 21 // provides functions to be created from uint8_t array, say, 22 // DesktopFrame::data(). It always uses BGRA order for internal storage to match 23 // DesktopFrame::data(). 24 struct RgbaColor final { 25 // Creates a color with BGRA channels. 26 RgbaColor(uint8_t blue, uint8_t green, uint8_t red, uint8_t alpha); 27 28 // Creates a color with BGR channels, and set alpha channel to 255 (opaque). 29 RgbaColor(uint8_t blue, uint8_t green, uint8_t red); 30 31 // Creates a color from four-byte in BGRA order, i.e. DesktopFrame::data(). 32 explicit RgbaColor(const uint8_t* bgra); 33 34 // Creates a color from BGRA channels in a uint format. Consumers should make 35 // sure the memory order of the uint32_t is always BGRA from left to right, no 36 // matter the system endian. This function creates an equivalent RgbaColor 37 // instance from the ToUInt32() result of another RgbaColor instance. 38 explicit RgbaColor(uint32_t bgra); 39 40 // Returns true if |this| and |right| is the same color. 41 bool operator==(const RgbaColor& right) const; 42 43 // Returns true if |this| and |right| are different colors. 44 bool operator!=(const RgbaColor& right) const; 45 46 uint32_t ToUInt32() const; 47 48 uint8_t blue; 49 uint8_t green; 50 uint8_t red; 51 uint8_t alpha; 52 }; 53 static_assert( 54 DesktopFrame::kBytesPerPixel == sizeof(RgbaColor), 55 "A pixel in DesktopFrame should be safe to be represented by a RgbaColor"); 56 57 } // namespace webrtc 58 59 #endif // MODULES_DESKTOP_CAPTURE_RGBA_COLOR_H_ 60