1 /* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef GRAPHIC_ADAPTER_H 17 #define GRAPHIC_ADAPTER_H 18 19 #include <functional> 20 21 namespace OHOS::NWeb { 22 23 enum class VSyncErrorCode { 24 SUCCESS, 25 ERROR, 26 }; 27 28 typedef void (*NWebVSyncCb)(int64_t, void*); 29 30 class VSyncAdapter { 31 public: 32 VSyncAdapter() = default; 33 34 virtual ~VSyncAdapter() = default; 35 36 virtual VSyncErrorCode RequestVsync(void* data, NWebVSyncCb cb) = 0; 37 38 virtual int64_t GetVSyncPeriod() = 0; 39 40 virtual void SetFrameRateLinkerEnable(bool enabled) = 0; 41 42 virtual void SetFramePreferredRate(int32_t preferredRate) = 0; 43 44 virtual void SetOnVsyncCallback(void (*callback)()) = 0; 45 SetOnVsyncEndCallback(void (* onVsyncEndCallback)())46 virtual void SetOnVsyncEndCallback(void (*onVsyncEndCallback)()) {} 47 48 virtual void SetScene(const std::string& sceneName, uint32_t state) = 0; 49 50 virtual void SetDVSyncSwitch(bool dvsyncSwitch) = 0; 51 }; 52 53 // be consistent with rom/foundation/graphic/graphic_2d/interfaces/inner_api/common/graphic_common_c.h:GSError 54 enum GSErrorCode { 55 GSERROR_OK = 0, 56 }; 57 58 // be consistent with rom/drivers/peripheral/display/interfaces/include/display_type.h:PixelFormat 59 enum PixelFormatAdapter { 60 PIXEL_FMT_CLUT8 = 0, /**< CLUT8 format */ 61 PIXEL_FMT_CLUT1, /**< CLUT1 format */ 62 PIXEL_FMT_CLUT4, /**< CLUT4 format */ 63 PIXEL_FMT_RGB_565, /**< RGB565 format */ 64 PIXEL_FMT_RGBA_5658, /**< RGBA5658 format */ 65 PIXEL_FMT_RGBX_4444, /**< RGBX4444 format */ 66 PIXEL_FMT_RGBA_4444, /**< RGBA4444 format */ 67 PIXEL_FMT_RGB_444, /**< RGB444 format */ 68 PIXEL_FMT_RGBX_5551, /**< RGBX5551 format */ 69 PIXEL_FMT_RGBA_5551, /**< RGBA5551 format */ 70 PIXEL_FMT_RGB_555, /**< RGB555 format */ 71 PIXEL_FMT_RGBX_8888, /**< RGBX8888 format */ 72 PIXEL_FMT_RGBA_8888, /**< RGBA8888 format */ 73 PIXEL_FMT_RGB_888, /**< RGB888 format */ 74 PIXEL_FMT_BGR_565, /**< BGR565 format */ 75 PIXEL_FMT_BGRX_4444, /**< BGRX4444 format */ 76 PIXEL_FMT_BGRA_4444, /**< BGRA4444 format */ 77 PIXEL_FMT_BGRX_5551, /**< BGRX5551 format */ 78 PIXEL_FMT_BGRA_5551, /**< BGRA5551 format */ 79 PIXEL_FMT_BGRX_8888, /**< BGRX8888 format */ 80 PIXEL_FMT_BGRA_8888, /**< BGRA8888 format */ 81 PIXEL_FMT_YUV_422_I, /**< YUV422 interleaved format */ 82 PIXEL_FMT_YCBCR_422_SP, /**< YCBCR422 semi-planar format */ 83 PIXEL_FMT_YCRCB_422_SP, /**< YCRCB422 semi-planar format */ 84 PIXEL_FMT_YCBCR_420_SP, /**< YCBCR420 semi-planar format */ 85 PIXEL_FMT_YCRCB_420_SP, /**< YCRCB420 semi-planar format */ 86 PIXEL_FMT_YCBCR_422_P, /**< YCBCR422 planar format */ 87 PIXEL_FMT_YCRCB_422_P, /**< YCRCB422 planar format */ 88 PIXEL_FMT_YCBCR_420_P, /**< YCBCR420 planar format */ 89 PIXEL_FMT_YCRCB_420_P, /**< YCRCB420 planar format */ 90 PIXEL_FMT_YUYV_422_PKG, /**< YUYV422 packed format */ 91 PIXEL_FMT_UYVY_422_PKG, /**< UYVY422 packed format */ 92 PIXEL_FMT_YVYU_422_PKG, /**< YVYU422 packed format */ 93 PIXEL_FMT_VYUY_422_PKG, /**< VYUY422 packed format */ 94 PIXEL_FMT_VENDER_MASK = 0X7FFF0000, /**< vendor mask format */ 95 PIXEL_FMT_BUTT = 0X7FFFFFFF /**< Invalid pixel format */ 96 }; 97 98 enum class ColorGamutAdapter : int32_t { 99 INVALID = -1, /**< Invalid */ 100 NATIVE = 0, /**< Native or default */ 101 STANDARD_BT601 = 1, /**< Standard BT601 */ 102 STANDARD_BT709 = 2, /**< Standard BT709 */ 103 DCI_P3 = 3, /**< DCI P3 */ 104 SRGB = 4, /**< SRGB */ 105 ADOBE_RGB = 5, /**< Adobe RGB */ 106 DISPLAY_P3 = 6, /**< display P3 */ 107 BT2020 = 7, /**< BT2020 */ 108 BT2100_PQ = 8, /**< BT2100 PQ */ 109 BT2100_HLG = 9, /**< BT2100 HLG */ 110 DISPLAY_BT2020 = 10, /**< Display BT2020 */ 111 }; 112 113 enum class TransformTypeAdapter : int32_t { 114 ROTATE_NONE = 0, /**< No rotation */ 115 ROTATE_90, /**< Rotation by 90 degrees */ 116 ROTATE_180, /**< Rotation by 180 degrees */ 117 ROTATE_270, /**< Rotation by 270 degrees */ 118 FLIP_H, /**< Flip horizontally */ 119 FLIP_V, /**< Flip vertically */ 120 FLIP_H_ROT90, /**< Flip horizontally and rotate 90 degrees */ 121 FLIP_V_ROT90, /**< Flip vertically and rotate 90 degrees */ 122 FLIP_H_ROT180, /**< Flip horizontally and rotate 180 degrees */ 123 FLIP_V_ROT180, /**< Flip vertically and rotate 180 degrees */ 124 FLIP_H_ROT270, /**< Flip horizontally and rotate 270 degrees */ 125 FLIP_V_ROT270, /**< Flip vertically and rotate 270 degrees */ 126 ROTATE_BUTT /**< Invalid operation */ 127 }; 128 129 class BufferRequestConfigAdapter { 130 public: 131 BufferRequestConfigAdapter() = default; 132 133 virtual ~BufferRequestConfigAdapter() = default; 134 135 virtual int32_t GetWidth() = 0; 136 137 virtual int32_t GetHeight() = 0; 138 139 virtual int32_t GetStrideAlignment() = 0; 140 141 virtual int32_t GetFormat() = 0; 142 143 virtual uint64_t GetUsage() = 0; 144 145 virtual int32_t GetTimeout() = 0; 146 147 virtual ColorGamutAdapter GetColorGamut() = 0; 148 149 virtual TransformTypeAdapter GetTransformType() = 0; 150 }; 151 152 class BufferFlushConfigAdapter { 153 public: 154 BufferFlushConfigAdapter() = default; 155 156 virtual ~BufferFlushConfigAdapter() = default; 157 158 virtual int32_t GetX() = 0; 159 160 virtual int32_t GetY() = 0; 161 162 virtual int32_t GetW() = 0; 163 164 virtual int32_t GetH() = 0; 165 166 virtual int64_t GetTimestamp() = 0; 167 }; 168 169 class SurfaceBufferAdapter { 170 public: 171 SurfaceBufferAdapter() = default; 172 173 virtual ~SurfaceBufferAdapter() = default; 174 175 virtual int32_t GetFileDescriptor() = 0; 176 177 virtual int32_t GetWidth() = 0; 178 179 virtual int32_t GetHeight() = 0; 180 181 virtual int32_t GetStride() = 0; 182 183 virtual int32_t GetFormat() = 0; 184 185 virtual uint32_t GetSize() = 0; 186 187 virtual void* GetVirAddr() = 0; 188 189 protected: 190 SurfaceBufferAdapter(const SurfaceBufferAdapter&) = delete; 191 192 SurfaceBufferAdapter& operator=(const SurfaceBufferAdapter&) = delete; 193 }; 194 195 class IBufferConsumerListenerAdapter { 196 public: 197 virtual ~IBufferConsumerListenerAdapter() = default; 198 199 virtual void OnBufferAvailable(std::shared_ptr<SurfaceBufferAdapter> buffer) = 0; 200 }; 201 202 class IConsumerSurfaceAdapter { 203 public: 204 IConsumerSurfaceAdapter() = default; 205 206 virtual ~IConsumerSurfaceAdapter() = default; 207 208 virtual int32_t RegisterConsumerListener(std::shared_ptr<IBufferConsumerListenerAdapter> listener) = 0; 209 210 virtual int32_t ReleaseBuffer(std::shared_ptr<SurfaceBufferAdapter> buffer, int32_t fence) = 0; 211 212 virtual int32_t SetUserData(const std::string& key, const std::string& val) = 0; 213 214 virtual int32_t SetQueueSize(uint32_t queueSize) = 0; 215 }; 216 217 using NWebNativeWindow = void*; 218 219 class WindowAdapter { 220 public: 221 WindowAdapter() = default; 222 223 virtual ~WindowAdapter() = default; 224 225 virtual NWebNativeWindow CreateNativeWindowFromSurface(void* pSurface) = 0; 226 227 virtual void DestroyNativeWindow(NWebNativeWindow window) = 0; 228 229 virtual int32_t NativeWindowSetBufferGeometry(NWebNativeWindow window, int32_t width, int32_t height) = 0; 230 231 virtual void NativeWindowSurfaceCleanCache(NWebNativeWindow window) = 0; 232 233 virtual void NativeWindowSurfaceCleanCacheWithPara(NWebNativeWindow window, bool cleanAll) = 0; 234 235 virtual void SetTransformHint(uint32_t rotation, NWebNativeWindow window) = 0; 236 237 virtual void AddNativeWindowRef(NWebNativeWindow window) = 0; 238 239 virtual void NativeWindowUnRef(NWebNativeWindow window) = 0; 240 }; 241 242 class AshmemAdapter { 243 public: 244 static int AshmemCreate(const char* name, size_t size); 245 }; 246 247 typedef void (*OnFrameAvailableCb)(void* ctx); 248 249 class FrameAvailableListener { 250 public: 251 FrameAvailableListener() = default; 252 253 virtual ~FrameAvailableListener() = default; 254 255 virtual void* GetContext() = 0; 256 257 virtual OnFrameAvailableCb GetOnFrameAvailableCb() = 0; 258 }; 259 260 class NativeImageAdapter { 261 public: 262 NativeImageAdapter() = default; 263 264 virtual ~NativeImageAdapter() = default; 265 266 virtual void CreateNativeImage(uint32_t textureId, uint32_t textureTarget) = 0; 267 268 virtual NWebNativeWindow AquireNativeWindowFromNativeImage() = 0; 269 270 virtual int32_t AttachContext(uint32_t textureId) = 0; 271 272 virtual int32_t DetachContext() = 0; 273 274 virtual int32_t UpdateSurfaceImage() = 0; 275 276 virtual int64_t GetTimestamp() = 0; 277 278 virtual int32_t GetTransformMatrix(float matrix[16]) = 0; 279 280 virtual int32_t GetSurfaceId(uint64_t* surfaceId) = 0; 281 282 virtual int32_t SetOnFrameAvailableListener(std::shared_ptr<FrameAvailableListener> listener) = 0; 283 284 virtual int32_t UnsetOnFrameAvailableListener() = 0; 285 286 virtual void DestroyNativeImage() = 0; 287 288 virtual void NewNativeImage() = 0; 289 290 virtual int32_t AcquireNativeWindowBuffer( 291 void** windowBuffer, 292 int* acquireFenceFd) = 0; 293 294 virtual int32_t GetNativeBuffer( 295 void* windowBuffer, 296 void** nativeBuffer) = 0; 297 298 virtual int32_t ReleaseNativeWindowBuffer(void* windowBuffer, int fenceFd) = 0; 299 300 virtual void GetNativeWindowBufferSize( 301 void* windowBuffer, 302 uint32_t* width, 303 uint32_t* height) = 0; 304 }; 305 306 class ProducerSurfaceAdapter { 307 public: 308 ProducerSurfaceAdapter() = default; 309 310 virtual ~ProducerSurfaceAdapter() = default; 311 312 virtual std::shared_ptr<SurfaceBufferAdapter> RequestBuffer( 313 int32_t& fence, std::shared_ptr<BufferRequestConfigAdapter> config) = 0; 314 315 virtual int32_t FlushBuffer(std::shared_ptr<SurfaceBufferAdapter> buffer, int32_t fence, 316 std::shared_ptr<BufferFlushConfigAdapter> config) = 0; 317 }; 318 } // namespace OHOS::NWeb 319 320 #endif // GRAPHIC_ADAPTER_H 321