1a3e0fd82Sopenharmony_ci/* 2a3e0fd82Sopenharmony_ci * Copyright (c) 2020-2021 Huawei Device Co., Ltd. 3a3e0fd82Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4a3e0fd82Sopenharmony_ci * you may not use this file except in compliance with the License. 5a3e0fd82Sopenharmony_ci * You may obtain a copy of the License at 6a3e0fd82Sopenharmony_ci * 7a3e0fd82Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8a3e0fd82Sopenharmony_ci * 9a3e0fd82Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10a3e0fd82Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11a3e0fd82Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12a3e0fd82Sopenharmony_ci * See the License for the specific language governing permissions and 13a3e0fd82Sopenharmony_ci * limitations under the License. 14a3e0fd82Sopenharmony_ci */ 15a3e0fd82Sopenharmony_ci 16a3e0fd82Sopenharmony_ci#ifndef GRAPHIC_LITE_SCREEN_DEVICE_H 17a3e0fd82Sopenharmony_ci#define GRAPHIC_LITE_SCREEN_DEVICE_H 18a3e0fd82Sopenharmony_ci 19a3e0fd82Sopenharmony_ci#include "gfx_utils/color.h" 20a3e0fd82Sopenharmony_ci#include "gfx_utils/graphic_assert.h" 21a3e0fd82Sopenharmony_ci#include "gfx_utils/rect.h" 22a3e0fd82Sopenharmony_ci#include "graphic_semaphore.h" 23a3e0fd82Sopenharmony_ci#if ENABLE_WINDOW 24a3e0fd82Sopenharmony_ci#include "gfx_utils/pixel_format_utils.h" 25a3e0fd82Sopenharmony_ci#endif 26a3e0fd82Sopenharmony_ci 27a3e0fd82Sopenharmony_cinamespace OHOS { 28a3e0fd82Sopenharmony_ci#if ENABLE_WINDOW 29a3e0fd82Sopenharmony_cistruct AllocationInfo { 30a3e0fd82Sopenharmony_ci uint8_t* virAddr; 31a3e0fd82Sopenharmony_ci uint8_t* phyAddr; 32a3e0fd82Sopenharmony_ci uint16_t width; 33a3e0fd82Sopenharmony_ci uint16_t height; 34a3e0fd82Sopenharmony_ci uint32_t stride; 35a3e0fd82Sopenharmony_ci ImagePixelFormat pixelFormat; 36a3e0fd82Sopenharmony_ci}; 37a3e0fd82Sopenharmony_ci#endif 38a3e0fd82Sopenharmony_ci 39a3e0fd82Sopenharmony_ci#ifndef TRANSFORMOPTION 40a3e0fd82Sopenharmony_ci#define TRANSFORMOPTION 41a3e0fd82Sopenharmony_cistruct TransformOption { 42a3e0fd82Sopenharmony_ci TransformAlgorithm algorithm; 43a3e0fd82Sopenharmony_ci}; 44a3e0fd82Sopenharmony_ci#endif 45a3e0fd82Sopenharmony_ci 46a3e0fd82Sopenharmony_ci/** @brief A semaphore for display buffer flushing. */ 47a3e0fd82Sopenharmony_ciclass FlushSem : public HeapBase { 48a3e0fd82Sopenharmony_cipublic: 49a3e0fd82Sopenharmony_ci /** 50a3e0fd82Sopenharmony_ci * Constructor 51a3e0fd82Sopenharmony_ci * 52a3e0fd82Sopenharmony_ci * @param [in] isFlushing (Optional) True if is flushing, false if not. 53a3e0fd82Sopenharmony_ci */ 54a3e0fd82Sopenharmony_ci FlushSem(bool isFlushing = false) : sem_(1, 1), isFlushing_(isFlushing) {} 55a3e0fd82Sopenharmony_ci 56a3e0fd82Sopenharmony_ci /** 57a3e0fd82Sopenharmony_ci * @brief Destructor 58a3e0fd82Sopenharmony_ci */ 59a3e0fd82Sopenharmony_ci virtual ~FlushSem() {} 60a3e0fd82Sopenharmony_ci 61a3e0fd82Sopenharmony_ci /** Notifies the buffer is flushing end */ 62a3e0fd82Sopenharmony_ci void Notify() 63a3e0fd82Sopenharmony_ci { 64a3e0fd82Sopenharmony_ci isFlushing_ = false; 65a3e0fd82Sopenharmony_ci sem_.Notify(); 66a3e0fd82Sopenharmony_ci } 67a3e0fd82Sopenharmony_ci 68a3e0fd82Sopenharmony_ci /** Waits the buffer is flushing */ 69a3e0fd82Sopenharmony_ci void Wait() 70a3e0fd82Sopenharmony_ci { 71a3e0fd82Sopenharmony_ci while (isFlushing_) { 72a3e0fd82Sopenharmony_ci sem_.Wait(); 73a3e0fd82Sopenharmony_ci } 74a3e0fd82Sopenharmony_ci } 75a3e0fd82Sopenharmony_ci 76a3e0fd82Sopenharmony_ci /** set the flag as flashing */ 77a3e0fd82Sopenharmony_ci void Flushing() 78a3e0fd82Sopenharmony_ci { 79a3e0fd82Sopenharmony_ci isFlushing_ = true; 80a3e0fd82Sopenharmony_ci } 81a3e0fd82Sopenharmony_ci 82a3e0fd82Sopenharmony_ciprivate: 83a3e0fd82Sopenharmony_ci GraphicSemaphore sem_; 84a3e0fd82Sopenharmony_ci bool isFlushing_; 85a3e0fd82Sopenharmony_ci}; 86a3e0fd82Sopenharmony_ci 87a3e0fd82Sopenharmony_ci/** @brief A display device. */ 88a3e0fd82Sopenharmony_ciclass ScreenDevice : public HeapBase { 89a3e0fd82Sopenharmony_cipublic: 90a3e0fd82Sopenharmony_ci /** 91a3e0fd82Sopenharmony_ci * @brief Constructor 92a3e0fd82Sopenharmony_ci */ 93a3e0fd82Sopenharmony_ci ScreenDevice() {} 94a3e0fd82Sopenharmony_ci 95a3e0fd82Sopenharmony_ci /** 96a3e0fd82Sopenharmony_ci * @brief Destructor 97a3e0fd82Sopenharmony_ci */ 98a3e0fd82Sopenharmony_ci virtual ~ScreenDevice() {} 99a3e0fd82Sopenharmony_ci 100a3e0fd82Sopenharmony_ci virtual void Flush(int16_t x1, int16_t y1, int16_t x2, int16_t y2, const uint8_t* buffer, ColorMode mode) {} 101a3e0fd82Sopenharmony_ci 102a3e0fd82Sopenharmony_ci virtual void Fill(int16_t x1, int16_t y1, int16_t x2, int16_t y2, const ColorType& color) {} 103a3e0fd82Sopenharmony_ci 104a3e0fd82Sopenharmony_ci /** 105a3e0fd82Sopenharmony_ci * @brief Hardware accelerated filling interface implemented by the product platform 106a3e0fd82Sopenharmony_ci * @param fillArea Indicates the area to be filled 107a3e0fd82Sopenharmony_ci * @param color Indicates the color to be filled 108a3e0fd82Sopenharmony_ci * @param opa Indicates the transparency 109a3e0fd82Sopenharmony_ci * @param dst Indicates the start address of destination memory 110a3e0fd82Sopenharmony_ci * @param dstStride Indicates the number of bytes in a single row of destination memory 111a3e0fd82Sopenharmony_ci * @param dstColorMode Indicates the color format of destination memory 112a3e0fd82Sopenharmony_ci * @return Return true on success, false on failure 113a3e0fd82Sopenharmony_ci * @since 5.0 114a3e0fd82Sopenharmony_ci * @version 3.0 115a3e0fd82Sopenharmony_ci */ 116a3e0fd82Sopenharmony_ci virtual bool HardwareFill(const Rect& fillArea, 117a3e0fd82Sopenharmony_ci uint32_t color, 118a3e0fd82Sopenharmony_ci OpacityType opa, 119a3e0fd82Sopenharmony_ci uint8_t* dst, 120a3e0fd82Sopenharmony_ci uint32_t dstStride, 121a3e0fd82Sopenharmony_ci ColorMode dstColorMode) 122a3e0fd82Sopenharmony_ci { 123a3e0fd82Sopenharmony_ci return false; 124a3e0fd82Sopenharmony_ci } 125a3e0fd82Sopenharmony_ci 126a3e0fd82Sopenharmony_ci /** 127a3e0fd82Sopenharmony_ci * @brief Hardware accelerated blending interface implemented by the product platform 128a3e0fd82Sopenharmony_ci * @param src Indicates the start address of source memory 129a3e0fd82Sopenharmony_ci * @param srcRect Indicates the area of the source memory for color blending 130a3e0fd82Sopenharmony_ci * @param srcStride Indicates the number of bytes in a single row of source memory 131a3e0fd82Sopenharmony_ci * @param srcLineNumber Indicates the number of source memory rows 132a3e0fd82Sopenharmony_ci * @param srcColorMode Indicates the source memory color format 133a3e0fd82Sopenharmony_ci * @param color 32-bit XRGB8888 value 134a3e0fd82Sopenharmony_ci * (valid when the source memory is in a format with only alpha information such as A1) 135a3e0fd82Sopenharmony_ci * @param opa Indicates the transparency 136a3e0fd82Sopenharmony_ci * @param dst Indicates the start address of destination memory 137a3e0fd82Sopenharmony_ci * @param dstStride Indicates the number of bytes in a single row of destination memory 138a3e0fd82Sopenharmony_ci * @param dstColorMode Indicates the color format of destination memory 139a3e0fd82Sopenharmony_ci * @param x The x coordinate of the upper left vertex of the destination memory for color blending 140a3e0fd82Sopenharmony_ci * @param y The y coordinate of the upper left vertex of the destination memory for color blending 141a3e0fd82Sopenharmony_ci * @return Return true on success, false on failure 142a3e0fd82Sopenharmony_ci * @since 5.0 143a3e0fd82Sopenharmony_ci * @version 3.0 144a3e0fd82Sopenharmony_ci */ 145a3e0fd82Sopenharmony_ci virtual bool HardwareBlend(const uint8_t* src, 146a3e0fd82Sopenharmony_ci const Rect& srcRect, 147a3e0fd82Sopenharmony_ci uint32_t srcStride, 148a3e0fd82Sopenharmony_ci uint32_t srcLineNumber, 149a3e0fd82Sopenharmony_ci ColorMode srcColorMode, 150a3e0fd82Sopenharmony_ci uint32_t color, 151a3e0fd82Sopenharmony_ci OpacityType opa, 152a3e0fd82Sopenharmony_ci uint8_t* dst, 153a3e0fd82Sopenharmony_ci uint32_t dstStride, 154a3e0fd82Sopenharmony_ci ColorMode dstColorMode, 155a3e0fd82Sopenharmony_ci uint32_t x, 156a3e0fd82Sopenharmony_ci uint32_t y) 157a3e0fd82Sopenharmony_ci { 158a3e0fd82Sopenharmony_ci return false; 159a3e0fd82Sopenharmony_ci } 160a3e0fd82Sopenharmony_ci 161a3e0fd82Sopenharmony_ci /** 162a3e0fd82Sopenharmony_ci * @brief Hardware accelerated transformation interface implemented by the product platform 163a3e0fd82Sopenharmony_ci * @param src Indicates the start address of the source image 164a3e0fd82Sopenharmony_ci * @param srcColorMode Indicates the color format of the source image 165a3e0fd82Sopenharmony_ci * @param srcRect Indicates the position of the source image in the destination memory and its width and height 166a3e0fd82Sopenharmony_ci * @param transformMatrix Indicates the transformation matrix 167a3e0fd82Sopenharmony_ci * @param opa Indicates the transparency 168a3e0fd82Sopenharmony_ci * @param color 32-bit XRGB8888 value 169a3e0fd82Sopenharmony_ci * (valid when the source memory is in a format with only alpha information such as A1) 170a3e0fd82Sopenharmony_ci * @param mask Indicates the masking rectangle, and the content beyond the rectangle is not drawn 171a3e0fd82Sopenharmony_ci * @param dst Indicates the start address of destination memory 172a3e0fd82Sopenharmony_ci * @param dstStride Indicates the number of bytes in a single row of destination memory 173a3e0fd82Sopenharmony_ci * @param dstColorMode Indicates the color format of destination memory 174a3e0fd82Sopenharmony_ci * @param option Indicates the optional setting items for transformation operation 175a3e0fd82Sopenharmony_ci * @return Return true on success, false on failure 176a3e0fd82Sopenharmony_ci * @since 5.0 177a3e0fd82Sopenharmony_ci * @version 3.0 178a3e0fd82Sopenharmony_ci */ 179a3e0fd82Sopenharmony_ci virtual bool HardwareTransform(const uint8_t* src, 180a3e0fd82Sopenharmony_ci ColorMode srcColorMode, 181a3e0fd82Sopenharmony_ci const Rect& srcRect, 182a3e0fd82Sopenharmony_ci const Matrix3<float>& transformMatrix, 183a3e0fd82Sopenharmony_ci OpacityType opa, 184a3e0fd82Sopenharmony_ci uint32_t color, 185a3e0fd82Sopenharmony_ci const Rect& mask, 186a3e0fd82Sopenharmony_ci uint8_t* dst, 187a3e0fd82Sopenharmony_ci uint32_t dstStride, 188a3e0fd82Sopenharmony_ci ColorMode dstColorMode, 189a3e0fd82Sopenharmony_ci const TransformOption& option) 190a3e0fd82Sopenharmony_ci { 191a3e0fd82Sopenharmony_ci return false; 192a3e0fd82Sopenharmony_ci } 193a3e0fd82Sopenharmony_ci 194a3e0fd82Sopenharmony_ci virtual void SnapShot(uint32_t len, 195a3e0fd82Sopenharmony_ci bool justCopy, 196a3e0fd82Sopenharmony_ci uint8_t* dest, 197a3e0fd82Sopenharmony_ci const Rect& rect, 198a3e0fd82Sopenharmony_ci bool justRender) 199a3e0fd82Sopenharmony_ci { 200a3e0fd82Sopenharmony_ci } 201a3e0fd82Sopenharmony_ci 202a3e0fd82Sopenharmony_ci virtual void RenderFinish(const Rect& mask) {} 203a3e0fd82Sopenharmony_ci}; 204a3e0fd82Sopenharmony_ci} // namespace OHOS 205a3e0fd82Sopenharmony_ci#endif // GRAPHIC_LITE_SCREEN_DEVICE_H