10826e83eSopenharmony_ci/* 20826e83eSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 30826e83eSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 40826e83eSopenharmony_ci * you may not use this file except in compliance with the License. 50826e83eSopenharmony_ci * You may obtain a copy of the License at 60826e83eSopenharmony_ci * 70826e83eSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 80826e83eSopenharmony_ci * 90826e83eSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 100826e83eSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 110826e83eSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 120826e83eSopenharmony_ci * See the License for the specific language governing permissions and 130826e83eSopenharmony_ci * limitations under the License. 140826e83eSopenharmony_ci */ 150826e83eSopenharmony_ci 160826e83eSopenharmony_ci#ifndef GRAPHIC_ADAPTER_H 170826e83eSopenharmony_ci#define GRAPHIC_ADAPTER_H 180826e83eSopenharmony_ci 190826e83eSopenharmony_ci#include <functional> 200826e83eSopenharmony_ci 210826e83eSopenharmony_cinamespace OHOS::NWeb { 220826e83eSopenharmony_ci 230826e83eSopenharmony_cienum class VSyncErrorCode { 240826e83eSopenharmony_ci SUCCESS, 250826e83eSopenharmony_ci ERROR, 260826e83eSopenharmony_ci}; 270826e83eSopenharmony_ci 280826e83eSopenharmony_citypedef void (*NWebVSyncCb)(int64_t, void*); 290826e83eSopenharmony_ci 300826e83eSopenharmony_ciclass VSyncAdapter { 310826e83eSopenharmony_cipublic: 320826e83eSopenharmony_ci VSyncAdapter() = default; 330826e83eSopenharmony_ci 340826e83eSopenharmony_ci virtual ~VSyncAdapter() = default; 350826e83eSopenharmony_ci 360826e83eSopenharmony_ci virtual VSyncErrorCode RequestVsync(void* data, NWebVSyncCb cb) = 0; 370826e83eSopenharmony_ci 380826e83eSopenharmony_ci virtual int64_t GetVSyncPeriod() = 0; 390826e83eSopenharmony_ci 400826e83eSopenharmony_ci virtual void SetFrameRateLinkerEnable(bool enabled) = 0; 410826e83eSopenharmony_ci 420826e83eSopenharmony_ci virtual void SetFramePreferredRate(int32_t preferredRate) = 0; 430826e83eSopenharmony_ci 440826e83eSopenharmony_ci virtual void SetOnVsyncCallback(void (*callback)()) = 0; 450826e83eSopenharmony_ci 460826e83eSopenharmony_ci virtual void SetOnVsyncEndCallback(void (*onVsyncEndCallback)()) {} 470826e83eSopenharmony_ci 480826e83eSopenharmony_ci virtual void SetScene(const std::string& sceneName, uint32_t state) = 0; 490826e83eSopenharmony_ci}; 500826e83eSopenharmony_ci 510826e83eSopenharmony_ci// be consistent with rom/foundation/graphic/graphic_2d/interfaces/inner_api/common/graphic_common_c.h:GSError 520826e83eSopenharmony_cienum GSErrorCode { 530826e83eSopenharmony_ci GSERROR_OK = 0, 540826e83eSopenharmony_ci}; 550826e83eSopenharmony_ci 560826e83eSopenharmony_ci// be consistent with rom/drivers/peripheral/display/interfaces/include/display_type.h:PixelFormat 570826e83eSopenharmony_cienum PixelFormatAdapter { 580826e83eSopenharmony_ci PIXEL_FMT_CLUT8 = 0, /**< CLUT8 format */ 590826e83eSopenharmony_ci PIXEL_FMT_CLUT1, /**< CLUT1 format */ 600826e83eSopenharmony_ci PIXEL_FMT_CLUT4, /**< CLUT4 format */ 610826e83eSopenharmony_ci PIXEL_FMT_RGB_565, /**< RGB565 format */ 620826e83eSopenharmony_ci PIXEL_FMT_RGBA_5658, /**< RGBA5658 format */ 630826e83eSopenharmony_ci PIXEL_FMT_RGBX_4444, /**< RGBX4444 format */ 640826e83eSopenharmony_ci PIXEL_FMT_RGBA_4444, /**< RGBA4444 format */ 650826e83eSopenharmony_ci PIXEL_FMT_RGB_444, /**< RGB444 format */ 660826e83eSopenharmony_ci PIXEL_FMT_RGBX_5551, /**< RGBX5551 format */ 670826e83eSopenharmony_ci PIXEL_FMT_RGBA_5551, /**< RGBA5551 format */ 680826e83eSopenharmony_ci PIXEL_FMT_RGB_555, /**< RGB555 format */ 690826e83eSopenharmony_ci PIXEL_FMT_RGBX_8888, /**< RGBX8888 format */ 700826e83eSopenharmony_ci PIXEL_FMT_RGBA_8888, /**< RGBA8888 format */ 710826e83eSopenharmony_ci PIXEL_FMT_RGB_888, /**< RGB888 format */ 720826e83eSopenharmony_ci PIXEL_FMT_BGR_565, /**< BGR565 format */ 730826e83eSopenharmony_ci PIXEL_FMT_BGRX_4444, /**< BGRX4444 format */ 740826e83eSopenharmony_ci PIXEL_FMT_BGRA_4444, /**< BGRA4444 format */ 750826e83eSopenharmony_ci PIXEL_FMT_BGRX_5551, /**< BGRX5551 format */ 760826e83eSopenharmony_ci PIXEL_FMT_BGRA_5551, /**< BGRA5551 format */ 770826e83eSopenharmony_ci PIXEL_FMT_BGRX_8888, /**< BGRX8888 format */ 780826e83eSopenharmony_ci PIXEL_FMT_BGRA_8888, /**< BGRA8888 format */ 790826e83eSopenharmony_ci PIXEL_FMT_YUV_422_I, /**< YUV422 interleaved format */ 800826e83eSopenharmony_ci PIXEL_FMT_YCBCR_422_SP, /**< YCBCR422 semi-planar format */ 810826e83eSopenharmony_ci PIXEL_FMT_YCRCB_422_SP, /**< YCRCB422 semi-planar format */ 820826e83eSopenharmony_ci PIXEL_FMT_YCBCR_420_SP, /**< YCBCR420 semi-planar format */ 830826e83eSopenharmony_ci PIXEL_FMT_YCRCB_420_SP, /**< YCRCB420 semi-planar format */ 840826e83eSopenharmony_ci PIXEL_FMT_YCBCR_422_P, /**< YCBCR422 planar format */ 850826e83eSopenharmony_ci PIXEL_FMT_YCRCB_422_P, /**< YCRCB422 planar format */ 860826e83eSopenharmony_ci PIXEL_FMT_YCBCR_420_P, /**< YCBCR420 planar format */ 870826e83eSopenharmony_ci PIXEL_FMT_YCRCB_420_P, /**< YCRCB420 planar format */ 880826e83eSopenharmony_ci PIXEL_FMT_YUYV_422_PKG, /**< YUYV422 packed format */ 890826e83eSopenharmony_ci PIXEL_FMT_UYVY_422_PKG, /**< UYVY422 packed format */ 900826e83eSopenharmony_ci PIXEL_FMT_YVYU_422_PKG, /**< YVYU422 packed format */ 910826e83eSopenharmony_ci PIXEL_FMT_VYUY_422_PKG, /**< VYUY422 packed format */ 920826e83eSopenharmony_ci PIXEL_FMT_VENDER_MASK = 0X7FFF0000, /**< vendor mask format */ 930826e83eSopenharmony_ci PIXEL_FMT_BUTT = 0X7FFFFFFF /**< Invalid pixel format */ 940826e83eSopenharmony_ci}; 950826e83eSopenharmony_ci 960826e83eSopenharmony_cienum class ColorGamutAdapter : int32_t { 970826e83eSopenharmony_ci INVALID = -1, /**< Invalid */ 980826e83eSopenharmony_ci NATIVE = 0, /**< Native or default */ 990826e83eSopenharmony_ci STANDARD_BT601 = 1, /**< Standard BT601 */ 1000826e83eSopenharmony_ci STANDARD_BT709 = 2, /**< Standard BT709 */ 1010826e83eSopenharmony_ci DCI_P3 = 3, /**< DCI P3 */ 1020826e83eSopenharmony_ci SRGB = 4, /**< SRGB */ 1030826e83eSopenharmony_ci ADOBE_RGB = 5, /**< Adobe RGB */ 1040826e83eSopenharmony_ci DISPLAY_P3 = 6, /**< display P3 */ 1050826e83eSopenharmony_ci BT2020 = 7, /**< BT2020 */ 1060826e83eSopenharmony_ci BT2100_PQ = 8, /**< BT2100 PQ */ 1070826e83eSopenharmony_ci BT2100_HLG = 9, /**< BT2100 HLG */ 1080826e83eSopenharmony_ci DISPLAY_BT2020 = 10, /**< Display BT2020 */ 1090826e83eSopenharmony_ci}; 1100826e83eSopenharmony_ci 1110826e83eSopenharmony_cienum class TransformTypeAdapter : int32_t { 1120826e83eSopenharmony_ci ROTATE_NONE = 0, /**< No rotation */ 1130826e83eSopenharmony_ci ROTATE_90, /**< Rotation by 90 degrees */ 1140826e83eSopenharmony_ci ROTATE_180, /**< Rotation by 180 degrees */ 1150826e83eSopenharmony_ci ROTATE_270, /**< Rotation by 270 degrees */ 1160826e83eSopenharmony_ci FLIP_H, /**< Flip horizontally */ 1170826e83eSopenharmony_ci FLIP_V, /**< Flip vertically */ 1180826e83eSopenharmony_ci FLIP_H_ROT90, /**< Flip horizontally and rotate 90 degrees */ 1190826e83eSopenharmony_ci FLIP_V_ROT90, /**< Flip vertically and rotate 90 degrees */ 1200826e83eSopenharmony_ci FLIP_H_ROT180, /**< Flip horizontally and rotate 180 degrees */ 1210826e83eSopenharmony_ci FLIP_V_ROT180, /**< Flip vertically and rotate 180 degrees */ 1220826e83eSopenharmony_ci FLIP_H_ROT270, /**< Flip horizontally and rotate 270 degrees */ 1230826e83eSopenharmony_ci FLIP_V_ROT270, /**< Flip vertically and rotate 270 degrees */ 1240826e83eSopenharmony_ci ROTATE_BUTT /**< Invalid operation */ 1250826e83eSopenharmony_ci}; 1260826e83eSopenharmony_ci 1270826e83eSopenharmony_ciclass BufferRequestConfigAdapter { 1280826e83eSopenharmony_cipublic: 1290826e83eSopenharmony_ci BufferRequestConfigAdapter() = default; 1300826e83eSopenharmony_ci 1310826e83eSopenharmony_ci virtual ~BufferRequestConfigAdapter() = default; 1320826e83eSopenharmony_ci 1330826e83eSopenharmony_ci virtual int32_t GetWidth() = 0; 1340826e83eSopenharmony_ci 1350826e83eSopenharmony_ci virtual int32_t GetHeight() = 0; 1360826e83eSopenharmony_ci 1370826e83eSopenharmony_ci virtual int32_t GetStrideAlignment() = 0; 1380826e83eSopenharmony_ci 1390826e83eSopenharmony_ci virtual int32_t GetFormat() = 0; 1400826e83eSopenharmony_ci 1410826e83eSopenharmony_ci virtual uint64_t GetUsage() = 0; 1420826e83eSopenharmony_ci 1430826e83eSopenharmony_ci virtual int32_t GetTimeout() = 0; 1440826e83eSopenharmony_ci 1450826e83eSopenharmony_ci virtual ColorGamutAdapter GetColorGamut() = 0; 1460826e83eSopenharmony_ci 1470826e83eSopenharmony_ci virtual TransformTypeAdapter GetTransformType() = 0; 1480826e83eSopenharmony_ci}; 1490826e83eSopenharmony_ci 1500826e83eSopenharmony_ciclass BufferFlushConfigAdapter { 1510826e83eSopenharmony_cipublic: 1520826e83eSopenharmony_ci BufferFlushConfigAdapter() = default; 1530826e83eSopenharmony_ci 1540826e83eSopenharmony_ci virtual ~BufferFlushConfigAdapter() = default; 1550826e83eSopenharmony_ci 1560826e83eSopenharmony_ci virtual int32_t GetX() = 0; 1570826e83eSopenharmony_ci 1580826e83eSopenharmony_ci virtual int32_t GetY() = 0; 1590826e83eSopenharmony_ci 1600826e83eSopenharmony_ci virtual int32_t GetW() = 0; 1610826e83eSopenharmony_ci 1620826e83eSopenharmony_ci virtual int32_t GetH() = 0; 1630826e83eSopenharmony_ci 1640826e83eSopenharmony_ci virtual int64_t GetTimestamp() = 0; 1650826e83eSopenharmony_ci}; 1660826e83eSopenharmony_ci 1670826e83eSopenharmony_ciclass SurfaceBufferAdapter { 1680826e83eSopenharmony_cipublic: 1690826e83eSopenharmony_ci SurfaceBufferAdapter() = default; 1700826e83eSopenharmony_ci 1710826e83eSopenharmony_ci virtual ~SurfaceBufferAdapter() = default; 1720826e83eSopenharmony_ci 1730826e83eSopenharmony_ci virtual int32_t GetFileDescriptor() = 0; 1740826e83eSopenharmony_ci 1750826e83eSopenharmony_ci virtual int32_t GetWidth() = 0; 1760826e83eSopenharmony_ci 1770826e83eSopenharmony_ci virtual int32_t GetHeight() = 0; 1780826e83eSopenharmony_ci 1790826e83eSopenharmony_ci virtual int32_t GetStride() = 0; 1800826e83eSopenharmony_ci 1810826e83eSopenharmony_ci virtual int32_t GetFormat() = 0; 1820826e83eSopenharmony_ci 1830826e83eSopenharmony_ci virtual uint32_t GetSize() = 0; 1840826e83eSopenharmony_ci 1850826e83eSopenharmony_ci virtual void* GetVirAddr() = 0; 1860826e83eSopenharmony_ci 1870826e83eSopenharmony_ciprotected: 1880826e83eSopenharmony_ci SurfaceBufferAdapter(const SurfaceBufferAdapter&) = delete; 1890826e83eSopenharmony_ci 1900826e83eSopenharmony_ci SurfaceBufferAdapter& operator=(const SurfaceBufferAdapter&) = delete; 1910826e83eSopenharmony_ci}; 1920826e83eSopenharmony_ci 1930826e83eSopenharmony_ciclass IBufferConsumerListenerAdapter { 1940826e83eSopenharmony_cipublic: 1950826e83eSopenharmony_ci virtual ~IBufferConsumerListenerAdapter() = default; 1960826e83eSopenharmony_ci 1970826e83eSopenharmony_ci virtual void OnBufferAvailable(std::shared_ptr<SurfaceBufferAdapter> buffer) = 0; 1980826e83eSopenharmony_ci}; 1990826e83eSopenharmony_ci 2000826e83eSopenharmony_ciclass IConsumerSurfaceAdapter { 2010826e83eSopenharmony_cipublic: 2020826e83eSopenharmony_ci IConsumerSurfaceAdapter() = default; 2030826e83eSopenharmony_ci 2040826e83eSopenharmony_ci virtual ~IConsumerSurfaceAdapter() = default; 2050826e83eSopenharmony_ci 2060826e83eSopenharmony_ci virtual int32_t RegisterConsumerListener(std::shared_ptr<IBufferConsumerListenerAdapter> listener) = 0; 2070826e83eSopenharmony_ci 2080826e83eSopenharmony_ci virtual int32_t ReleaseBuffer(std::shared_ptr<SurfaceBufferAdapter> buffer, int32_t fence) = 0; 2090826e83eSopenharmony_ci 2100826e83eSopenharmony_ci virtual int32_t SetUserData(const std::string& key, const std::string& val) = 0; 2110826e83eSopenharmony_ci 2120826e83eSopenharmony_ci virtual int32_t SetQueueSize(uint32_t queueSize) = 0; 2130826e83eSopenharmony_ci}; 2140826e83eSopenharmony_ci 2150826e83eSopenharmony_ciusing NWebNativeWindow = void*; 2160826e83eSopenharmony_ci 2170826e83eSopenharmony_ciclass WindowAdapter { 2180826e83eSopenharmony_cipublic: 2190826e83eSopenharmony_ci WindowAdapter() = default; 2200826e83eSopenharmony_ci 2210826e83eSopenharmony_ci virtual ~WindowAdapter() = default; 2220826e83eSopenharmony_ci 2230826e83eSopenharmony_ci virtual NWebNativeWindow CreateNativeWindowFromSurface(void* pSurface) = 0; 2240826e83eSopenharmony_ci 2250826e83eSopenharmony_ci virtual void DestroyNativeWindow(NWebNativeWindow window) = 0; 2260826e83eSopenharmony_ci 2270826e83eSopenharmony_ci virtual int32_t NativeWindowSetBufferGeometry(NWebNativeWindow window, int32_t width, int32_t height) = 0; 2280826e83eSopenharmony_ci 2290826e83eSopenharmony_ci virtual void NativeWindowSurfaceCleanCache(NWebNativeWindow window) = 0; 2300826e83eSopenharmony_ci 2310826e83eSopenharmony_ci virtual void NativeWindowSurfaceCleanCacheWithPara(NWebNativeWindow window, bool cleanAll) = 0; 2320826e83eSopenharmony_ci}; 2330826e83eSopenharmony_ci 2340826e83eSopenharmony_ciclass AshmemAdapter { 2350826e83eSopenharmony_cipublic: 2360826e83eSopenharmony_ci static int AshmemCreate(const char* name, size_t size); 2370826e83eSopenharmony_ci}; 2380826e83eSopenharmony_ci 2390826e83eSopenharmony_citypedef void (*OnFrameAvailableCb)(void* ctx); 2400826e83eSopenharmony_ci 2410826e83eSopenharmony_ciclass FrameAvailableListener { 2420826e83eSopenharmony_cipublic: 2430826e83eSopenharmony_ci FrameAvailableListener() = default; 2440826e83eSopenharmony_ci 2450826e83eSopenharmony_ci virtual ~FrameAvailableListener() = default; 2460826e83eSopenharmony_ci 2470826e83eSopenharmony_ci virtual void* GetContext() = 0; 2480826e83eSopenharmony_ci 2490826e83eSopenharmony_ci virtual OnFrameAvailableCb GetOnFrameAvailableCb() = 0; 2500826e83eSopenharmony_ci}; 2510826e83eSopenharmony_ci 2520826e83eSopenharmony_ciclass NativeImageAdapter { 2530826e83eSopenharmony_cipublic: 2540826e83eSopenharmony_ci NativeImageAdapter() = default; 2550826e83eSopenharmony_ci 2560826e83eSopenharmony_ci virtual ~NativeImageAdapter() = default; 2570826e83eSopenharmony_ci 2580826e83eSopenharmony_ci virtual void CreateNativeImage(uint32_t textureId, uint32_t textureTarget) = 0; 2590826e83eSopenharmony_ci 2600826e83eSopenharmony_ci virtual NWebNativeWindow AquireNativeWindowFromNativeImage() = 0; 2610826e83eSopenharmony_ci 2620826e83eSopenharmony_ci virtual int32_t AttachContext(uint32_t textureId) = 0; 2630826e83eSopenharmony_ci 2640826e83eSopenharmony_ci virtual int32_t DetachContext() = 0; 2650826e83eSopenharmony_ci 2660826e83eSopenharmony_ci virtual int32_t UpdateSurfaceImage() = 0; 2670826e83eSopenharmony_ci 2680826e83eSopenharmony_ci virtual int64_t GetTimestamp() = 0; 2690826e83eSopenharmony_ci 2700826e83eSopenharmony_ci virtual int32_t GetTransformMatrix(float matrix[16]) = 0; 2710826e83eSopenharmony_ci 2720826e83eSopenharmony_ci virtual int32_t GetSurfaceId(uint64_t* surfaceId) = 0; 2730826e83eSopenharmony_ci 2740826e83eSopenharmony_ci virtual int32_t SetOnFrameAvailableListener(std::shared_ptr<FrameAvailableListener> listener) = 0; 2750826e83eSopenharmony_ci 2760826e83eSopenharmony_ci virtual int32_t UnsetOnFrameAvailableListener() = 0; 2770826e83eSopenharmony_ci 2780826e83eSopenharmony_ci virtual void DestroyNativeImage() = 0; 2790826e83eSopenharmony_ci 2800826e83eSopenharmony_ci virtual void NewNativeImage() = 0; 2810826e83eSopenharmony_ci 2820826e83eSopenharmony_ci virtual int32_t AcquireNativeWindowBuffer( 2830826e83eSopenharmony_ci void** windowBuffer, 2840826e83eSopenharmony_ci int* acquireFenceFd) = 0; 2850826e83eSopenharmony_ci 2860826e83eSopenharmony_ci virtual int32_t GetNativeBuffer( 2870826e83eSopenharmony_ci void* windowBuffer, 2880826e83eSopenharmony_ci void** nativeBuffer) = 0; 2890826e83eSopenharmony_ci 2900826e83eSopenharmony_ci virtual int32_t ReleaseNativeWindowBuffer(void* windowBuffer, int fenceFd) = 0; 2910826e83eSopenharmony_ci 2920826e83eSopenharmony_ci virtual void GetNativeWindowBufferSize( 2930826e83eSopenharmony_ci void* windowBuffer, 2940826e83eSopenharmony_ci uint32_t* width, 2950826e83eSopenharmony_ci uint32_t* height) = 0; 2960826e83eSopenharmony_ci}; 2970826e83eSopenharmony_ci 2980826e83eSopenharmony_ciclass ProducerSurfaceAdapter { 2990826e83eSopenharmony_cipublic: 3000826e83eSopenharmony_ci ProducerSurfaceAdapter() = default; 3010826e83eSopenharmony_ci 3020826e83eSopenharmony_ci virtual ~ProducerSurfaceAdapter() = default; 3030826e83eSopenharmony_ci 3040826e83eSopenharmony_ci virtual std::shared_ptr<SurfaceBufferAdapter> RequestBuffer( 3050826e83eSopenharmony_ci int32_t& fence, std::shared_ptr<BufferRequestConfigAdapter> config) = 0; 3060826e83eSopenharmony_ci 3070826e83eSopenharmony_ci virtual int32_t FlushBuffer(std::shared_ptr<SurfaceBufferAdapter> buffer, int32_t fence, 3080826e83eSopenharmony_ci std::shared_ptr<BufferFlushConfigAdapter> config) = 0; 3090826e83eSopenharmony_ci}; 3100826e83eSopenharmony_ci} // namespace OHOS::NWeb 3110826e83eSopenharmony_ci 3120826e83eSopenharmony_ci#endif // GRAPHIC_ADAPTER_H 313