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 49 // be consistent with rom/foundation/graphic/graphic_2d/interfaces/inner_api/common/graphic_common_c.h:GSError 50 enum GSErrorCode { 51 GSERROR_OK = 0, 52 }; 53 54 // be consistent with rom/drivers/peripheral/display/interfaces/include/display_type.h:PixelFormat 55 enum PixelFormatAdapter { 56 PIXEL_FMT_CLUT8 = 0, /**< CLUT8 format */ 57 PIXEL_FMT_CLUT1, /**< CLUT1 format */ 58 PIXEL_FMT_CLUT4, /**< CLUT4 format */ 59 PIXEL_FMT_RGB_565, /**< RGB565 format */ 60 PIXEL_FMT_RGBA_5658, /**< RGBA5658 format */ 61 PIXEL_FMT_RGBX_4444, /**< RGBX4444 format */ 62 PIXEL_FMT_RGBA_4444, /**< RGBA4444 format */ 63 PIXEL_FMT_RGB_444, /**< RGB444 format */ 64 PIXEL_FMT_RGBX_5551, /**< RGBX5551 format */ 65 PIXEL_FMT_RGBA_5551, /**< RGBA5551 format */ 66 PIXEL_FMT_RGB_555, /**< RGB555 format */ 67 PIXEL_FMT_RGBX_8888, /**< RGBX8888 format */ 68 PIXEL_FMT_RGBA_8888, /**< RGBA8888 format */ 69 PIXEL_FMT_RGB_888, /**< RGB888 format */ 70 PIXEL_FMT_BGR_565, /**< BGR565 format */ 71 PIXEL_FMT_BGRX_4444, /**< BGRX4444 format */ 72 PIXEL_FMT_BGRA_4444, /**< BGRA4444 format */ 73 PIXEL_FMT_BGRX_5551, /**< BGRX5551 format */ 74 PIXEL_FMT_BGRA_5551, /**< BGRA5551 format */ 75 PIXEL_FMT_BGRX_8888, /**< BGRX8888 format */ 76 PIXEL_FMT_BGRA_8888, /**< BGRA8888 format */ 77 PIXEL_FMT_YUV_422_I, /**< YUV422 interleaved format */ 78 PIXEL_FMT_YCBCR_422_SP, /**< YCBCR422 semi-planar format */ 79 PIXEL_FMT_YCRCB_422_SP, /**< YCRCB422 semi-planar format */ 80 PIXEL_FMT_YCBCR_420_SP, /**< YCBCR420 semi-planar format */ 81 PIXEL_FMT_YCRCB_420_SP, /**< YCRCB420 semi-planar format */ 82 PIXEL_FMT_YCBCR_422_P, /**< YCBCR422 planar format */ 83 PIXEL_FMT_YCRCB_422_P, /**< YCRCB422 planar format */ 84 PIXEL_FMT_YCBCR_420_P, /**< YCBCR420 planar format */ 85 PIXEL_FMT_YCRCB_420_P, /**< YCRCB420 planar format */ 86 PIXEL_FMT_YUYV_422_PKG, /**< YUYV422 packed format */ 87 PIXEL_FMT_UYVY_422_PKG, /**< UYVY422 packed format */ 88 PIXEL_FMT_YVYU_422_PKG, /**< YVYU422 packed format */ 89 PIXEL_FMT_VYUY_422_PKG, /**< VYUY422 packed format */ 90 PIXEL_FMT_VENDER_MASK = 0X7FFF0000, /**< vendor mask format */ 91 PIXEL_FMT_BUTT = 0X7FFFFFFF /**< Invalid pixel format */ 92 }; 93 94 enum class ColorGamutAdapter : int32_t { 95 INVALID = -1, /**< Invalid */ 96 NATIVE = 0, /**< Native or default */ 97 STANDARD_BT601 = 1, /**< Standard BT601 */ 98 STANDARD_BT709 = 2, /**< Standard BT709 */ 99 DCI_P3 = 3, /**< DCI P3 */ 100 SRGB = 4, /**< SRGB */ 101 ADOBE_RGB = 5, /**< Adobe RGB */ 102 DISPLAY_P3 = 6, /**< display P3 */ 103 BT2020 = 7, /**< BT2020 */ 104 BT2100_PQ = 8, /**< BT2100 PQ */ 105 BT2100_HLG = 9, /**< BT2100 HLG */ 106 DISPLAY_BT2020 = 10, /**< Display BT2020 */ 107 }; 108 109 enum class TransformTypeAdapter : int32_t { 110 ROTATE_NONE = 0, /**< No rotation */ 111 ROTATE_90, /**< Rotation by 90 degrees */ 112 ROTATE_180, /**< Rotation by 180 degrees */ 113 ROTATE_270, /**< Rotation by 270 degrees */ 114 FLIP_H, /**< Flip horizontally */ 115 FLIP_V, /**< Flip vertically */ 116 FLIP_H_ROT90, /**< Flip horizontally and rotate 90 degrees */ 117 FLIP_V_ROT90, /**< Flip vertically and rotate 90 degrees */ 118 FLIP_H_ROT180, /**< Flip horizontally and rotate 180 degrees */ 119 FLIP_V_ROT180, /**< Flip vertically and rotate 180 degrees */ 120 FLIP_H_ROT270, /**< Flip horizontally and rotate 270 degrees */ 121 FLIP_V_ROT270, /**< Flip vertically and rotate 270 degrees */ 122 ROTATE_BUTT /**< Invalid operation */ 123 }; 124 125 class BufferRequestConfigAdapter { 126 public: 127 BufferRequestConfigAdapter() = default; 128 129 virtual ~BufferRequestConfigAdapter() = default; 130 131 virtual int32_t GetWidth() = 0; 132 133 virtual int32_t GetHeight() = 0; 134 135 virtual int32_t GetStrideAlignment() = 0; 136 137 virtual int32_t GetFormat() = 0; 138 139 virtual uint64_t GetUsage() = 0; 140 141 virtual int32_t GetTimeout() = 0; 142 143 virtual ColorGamutAdapter GetColorGamut() = 0; 144 145 virtual TransformTypeAdapter GetTransformType() = 0; 146 }; 147 148 class BufferFlushConfigAdapter { 149 public: 150 BufferFlushConfigAdapter() = default; 151 152 virtual ~BufferFlushConfigAdapter() = default; 153 154 virtual int32_t GetX() = 0; 155 156 virtual int32_t GetY() = 0; 157 158 virtual int32_t GetW() = 0; 159 160 virtual int32_t GetH() = 0; 161 162 virtual int64_t GetTimestamp() = 0; 163 }; 164 165 class SurfaceBufferAdapter { 166 public: 167 SurfaceBufferAdapter() = default; 168 169 virtual ~SurfaceBufferAdapter() = default; 170 171 virtual int32_t GetFileDescriptor() = 0; 172 173 virtual int32_t GetWidth() = 0; 174 175 virtual int32_t GetHeight() = 0; 176 177 virtual int32_t GetStride() = 0; 178 179 virtual int32_t GetFormat() = 0; 180 181 virtual uint32_t GetSize() = 0; 182 183 virtual void* GetVirAddr() = 0; 184 185 protected: 186 SurfaceBufferAdapter(const SurfaceBufferAdapter&) = delete; 187 188 SurfaceBufferAdapter& operator=(const SurfaceBufferAdapter&) = delete; 189 }; 190 191 class IBufferConsumerListenerAdapter { 192 public: 193 virtual ~IBufferConsumerListenerAdapter() = default; 194 195 virtual void OnBufferAvailable(std::shared_ptr<SurfaceBufferAdapter> buffer) = 0; 196 }; 197 198 class IConsumerSurfaceAdapter { 199 public: 200 IConsumerSurfaceAdapter() = default; 201 202 virtual ~IConsumerSurfaceAdapter() = default; 203 204 virtual int32_t RegisterConsumerListener(std::shared_ptr<IBufferConsumerListenerAdapter> listener) = 0; 205 206 virtual int32_t ReleaseBuffer(std::shared_ptr<SurfaceBufferAdapter> buffer, int32_t fence) = 0; 207 208 virtual int32_t SetUserData(const std::string& key, const std::string& val) = 0; 209 210 virtual int32_t SetQueueSize(uint32_t queueSize) = 0; 211 }; 212 213 using NWebNativeWindow = void*; 214 215 class WindowAdapter { 216 public: 217 WindowAdapter() = default; 218 219 virtual ~WindowAdapter() = default; 220 221 virtual NWebNativeWindow CreateNativeWindowFromSurface(void* pSurface) = 0; 222 223 virtual void DestroyNativeWindow(NWebNativeWindow window) = 0; 224 225 virtual int32_t NativeWindowSetBufferGeometry(NWebNativeWindow window, int32_t width, int32_t height) = 0; 226 227 virtual void NativeWindowSurfaceCleanCache(NWebNativeWindow window) = 0; 228 229 virtual void NativeWindowSurfaceCleanCacheWithPara(NWebNativeWindow window, bool cleanAll) = 0; 230 }; 231 232 class AshmemAdapter { 233 public: 234 static int AshmemCreate(const char* name, size_t size); 235 }; 236 237 typedef void (*OnFrameAvailableCb)(void* ctx); 238 239 class FrameAvailableListener { 240 public: 241 FrameAvailableListener() = default; 242 243 virtual ~FrameAvailableListener() = default; 244 245 virtual void* GetContext() = 0; 246 247 virtual OnFrameAvailableCb GetOnFrameAvailableCb() = 0; 248 }; 249 250 class NativeImageAdapter { 251 public: 252 NativeImageAdapter() = default; 253 254 virtual ~NativeImageAdapter() = default; 255 256 virtual void CreateNativeImage(uint32_t textureId, uint32_t textureTarget) = 0; 257 258 virtual NWebNativeWindow AquireNativeWindowFromNativeImage() = 0; 259 260 virtual int32_t AttachContext(uint32_t textureId) = 0; 261 262 virtual int32_t DetachContext() = 0; 263 264 virtual int32_t UpdateSurfaceImage() = 0; 265 266 virtual int64_t GetTimestamp() = 0; 267 268 virtual int32_t GetTransformMatrix(float matrix[16]) = 0; 269 270 virtual int32_t GetSurfaceId(uint64_t* surfaceId) = 0; 271 272 virtual int32_t SetOnFrameAvailableListener(std::shared_ptr<FrameAvailableListener> listener) = 0; 273 274 virtual int32_t UnsetOnFrameAvailableListener() = 0; 275 276 virtual void DestroyNativeImage() = 0; 277 278 virtual void NewNativeImage() = 0; 279 280 virtual int32_t AcquireNativeWindowBuffer( 281 void** windowBuffer, 282 int* acquireFenceFd) = 0; 283 284 virtual int32_t GetNativeBuffer( 285 void* windowBuffer, 286 void** nativeBuffer) = 0; 287 288 virtual int32_t ReleaseNativeWindowBuffer(void* windowBuffer, int fenceFd) = 0; 289 290 virtual void GetNativeWindowBufferSize( 291 void* windowBuffer, 292 uint32_t* width, 293 uint32_t* height) = 0; 294 }; 295 296 class ProducerSurfaceAdapter { 297 public: 298 ProducerSurfaceAdapter() = default; 299 300 virtual ~ProducerSurfaceAdapter() = default; 301 302 virtual std::shared_ptr<SurfaceBufferAdapter> RequestBuffer( 303 int32_t& fence, std::shared_ptr<BufferRequestConfigAdapter> config) = 0; 304 305 virtual int32_t FlushBuffer(std::shared_ptr<SurfaceBufferAdapter> buffer, int32_t fence, 306 std::shared_ptr<BufferFlushConfigAdapter> config) = 0; 307 }; 308 309 } // namespace OHOS::NWeb 310 311 #endif // GRAPHIC_ADAPTER_H 312