• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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