• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 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 //
17 // Created on 2024/8/6.
18 //
19 // Node APIs are not fully supported. To solve the compilation error of the interface cannot be found,
20 // please include "napi/native_api.h".
21 
22 #ifndef NATIVEWINDOW_USELESS_H
23 #define NATIVEWINDOW_USELESS_H
24 
25 #include "napi/native_api.h"
26 #include <IPCKit/ipc_cparcel.h>
27 #include <bits/alltypes.h>
28 #include <chrono>
29 #include <multimedia/player_framework/native_avcodec_base.h>
30 #include <native_image/native_image.h>
31 #include <native_window/external_window.h>
32 #include <native_buffer/native_buffer.h>
33 
34 class InitNativeWindow {
35 private:
36     int32_t width_ = 0x100;
37     int32_t height_ = 0x100;
38     int32_t usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA;
39     OH_NativeImage* _image = nullptr;
40     OHNativeWindow* _nativeWindow = nullptr;
41 
42 public:
InitNativeWindow()43     InitNativeWindow()
44     {
45         _image = OH_ConsumerSurface_Create();
46         if (_image != nullptr) {
47             _nativeWindow = OH_NativeImage_AcquireNativeWindow(_image);
48             if (_nativeWindow != nullptr) {
49                 OH_NativeWindow_NativeWindowHandleOpt(_nativeWindow, SET_BUFFER_GEOMETRY, width_, height_);
50                 OH_NativeWindow_NativeWindowHandleOpt(_nativeWindow, SET_USAGE, usage);
51             } else {
52                 _nativeWindow = nullptr;
53             }
54         } else {
55             _image = nullptr;
56             _nativeWindow = nullptr;
57         }
58     }
~InitNativeWindow()59     ~InitNativeWindow()
60     {
61         _image = nullptr;
62         _nativeWindow = nullptr;
63     }
returnNativeWindow()64     OHNativeWindow* returnNativeWindow()
65     {
66         if (_nativeWindow == nullptr) {
67             return nullptr;
68         } else {
69             return _nativeWindow;
70         }
71     };
returnNativeImage()72     OH_NativeImage* returnNativeImage()
73     {
74         if (_image == nullptr) {
75             return nullptr;
76         } else {
77             return _image;
78         }
79     }
80 };
81 
82 class RoundWindowBuffer {
83 private:
84     OH_NativeImage* _image = nullptr;
85     OHNativeWindow* _nativeWindow = nullptr;
86     OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
87     int fenceFd = -1;
88 
89 public:
RoundWindowBuffer(OH_NativeImage * image,OHNativeWindow * nativeWindow)90     RoundWindowBuffer(OH_NativeImage* image, OHNativeWindow* nativeWindow)
91     {
92         _image = image;
93         _nativeWindow = nativeWindow;
94     }
~RoundWindowBuffer()95     ~RoundWindowBuffer()
96     {
97         _image = nullptr;
98         _nativeWindow = nullptr;
99     }
ProduceBuffer()100     int32_t ProduceBuffer()
101     {
102         // 1. RequestBuffer
103         int32_t ret = OH_NativeWindow_NativeWindowRequestBuffer(_nativeWindow, &nativeWindowBuffer, &fenceFd);
104         if (ret != 0) {
105             return ret;
106         }
107 
108         // 2. FlushBuffer
109         Region::Rect rect{
110             .x = 0x50,
111             .y = 0x50,
112             .w = 0x50,
113             .h = 0x50,
114         };
115         Region region{.rects = &rect};
116         ret = OH_NativeWindow_NativeWindowFlushBuffer(_nativeWindow, nativeWindowBuffer, fenceFd, region);
117         if (ret != 0) {
118             return ret;
119         }
120 
121         return ret;
122     }
ConsumerBuffer()123     int32_t ConsumerBuffer()
124     {
125         // 1. AcquireBuffer
126         int32_t ret = OH_NativeImage_AcquireNativeWindowBuffer(_image, &nativeWindowBuffer, &fenceFd);
127         if (ret != 0) {
128             return ret;
129         }
130 
131         // 2. release buffer
132         ret = OH_NativeImage_ReleaseNativeWindowBuffer(_image, nativeWindowBuffer, fenceFd);
133         if (ret != 0) {
134             return ret;
135         }
136 
137         return ret;
138     }
AcquireBuffer()139     int32_t AcquireBuffer()
140     {
141         return OH_NativeImage_AcquireNativeWindowBuffer(_image, &nativeWindowBuffer, &fenceFd);
142     }
ReleaseBuffer()143     int32_t ReleaseBuffer()
144     {
145         return OH_NativeImage_ReleaseNativeWindowBuffer(_image, nativeWindowBuffer, fenceFd);
146     }
147 };
148 
149 napi_value testNativeWindowCreateNativeWindowNullptr(napi_env env, napi_callback_info info);
150 napi_value testNativeWindowDestroyNativeWindowNullptr(napi_env env, napi_callback_info info);
151 napi_value testNativeWindowGetSurfaceIdNullptr(napi_env env, napi_callback_info info);
152 
153 napi_value testNativeWindowCreateNativeWindowFromSurfaceIdNullptr(napi_env env, napi_callback_info info);
154 napi_value testNativeWindowCreateNativeWindowFromSurfaceIdNormal(napi_env env, napi_callback_info info);
155 napi_value testNativeWindowCreateNativeWindowFromSurfaceIdSurfaceId(napi_env env, napi_callback_info info);
156 napi_value testNativeWindowCreateNativeWindowBufferFromNativeBufferNullptr(napi_env env, napi_callback_info info);
157 
158 napi_value testNativeWindowCreateNativeWindowBufferFromSurfaceBufferNullptr(napi_env env, napi_callback_info info);
159 napi_value testNativeWindowDestroyNativeWindowBufferNullptr(napi_env env, napi_callback_info info);
160 napi_value testNativeWindowGetBufferHandleFromNativeNullptr(napi_env env, napi_callback_info info);
161 napi_value testNativeWindowCreateNativeWindowBufferFromNativeBufferNormal(napi_env env, napi_callback_info info);
162 napi_value testNativeWindowCreateNativeWindowBufferFromNativeBufferMuch(napi_env env, napi_callback_info info);
163 
164 napi_value testNativeWindowNativeWindowRequestBufferNullptr(napi_env env, napi_callback_info info);
165 napi_value testNativeWindowNativeWindowAbortBufferNullptr(napi_env env, napi_callback_info info);
166 napi_value testNativeWindowNativeWindowRequestAbortBufferNormal(napi_env env, napi_callback_info info);
167 napi_value testNativeWindowNativeWindowRequestAbortBufferAbnormal(napi_env env, napi_callback_info info);
168 napi_value testNativeWindowNativeWindowRequestBufferFenceFdNormal(napi_env env, napi_callback_info info);
169 napi_value testNativeWindowNativeWindowRequestBufferFenceFdAbnormal(napi_env env, napi_callback_info info);
170 napi_value testNativeWindowNativeWindowRequestAbortBufferMax(napi_env env, napi_callback_info info);
171 napi_value testNativeWindowNativeWindowRequestAbortBufferErrorCode(napi_env env, napi_callback_info info);
172 
173 napi_value testNativeWindowWriteToParcelErrptr(napi_env env, napi_callback_info info);
174 napi_value testNativeWindowReadFromParcelErrptr(napi_env env, napi_callback_info info);
175 napi_value testNativeWindowWRParcelNormal(napi_env env, napi_callback_info info);
176 napi_value testNativeWindowWriteToParcelAbNormal(napi_env env, napi_callback_info info);
177 napi_value testNativeWindowReadFromParcelAbNormal(napi_env env, napi_callback_info info);
178 napi_value testNativeWindowWRParcelDifferent(napi_env env, napi_callback_info info);
179 
180 napi_value testNativeWindowNativeWindowFlushBufferNullptr(napi_env env, napi_callback_info info);
181 napi_value testNativeWindowNativeWindowFlushBufferNormal(napi_env env, napi_callback_info info);
182 napi_value testNativeWindowNativeWindowFlushBufferAbnormal(napi_env env, napi_callback_info info);
183 napi_value testNativeWindowNativeWindowFlushBufferErrorCode(napi_env env, napi_callback_info info);
184 
185 napi_value testNativeWindowGetLastFlushedBufferV2Nullptr(napi_env env, napi_callback_info info);
186 napi_value testNativeWindowGetLastFlushedBufferNullptr(napi_env env, napi_callback_info info);
187 napi_value testNativeWindowGetLastFlushedBufferV2Normal(napi_env env, napi_callback_info info);
188 napi_value testNativeWindowGetLastFlushedBufferNormal(napi_env env, napi_callback_info info);
189 napi_value testNativeWindowGetLastFlushedBufferV2ErrorCode(napi_env env, napi_callback_info info);
190 
191 napi_value testNativeWindowSetBufferHold(napi_env env, napi_callback_info info);
192 napi_value testNativeWindowGetNativeObjectMagicNullptr(napi_env env, napi_callback_info info);
193 napi_value testNativeWindowGetNativeObjectMagicNormal(napi_env env, napi_callback_info info);
194 napi_value testNativeWindowNativeObjectReferenceNullptr(napi_env env, napi_callback_info info);
195 napi_value testNativeWindowNativeObjectReferenceNormal(napi_env env, napi_callback_info info);
196 napi_value testNativeWindowNativeObjectUnreferenceNullptr(napi_env env, napi_callback_info info);
197 napi_value testNativeWindowNativeObjectUnreferenceNormal(napi_env env, napi_callback_info info);
198 napi_value testNativeWindowNativeWindowAttachBufferNullptr(napi_env env, napi_callback_info info);
199 napi_value testNativeWindowNativeWindowDetachBufferNullptr(napi_env env, napi_callback_info info);
200 napi_value testNativeWindowNativeWindowDetachBufferNormal(napi_env env, napi_callback_info info);
201 napi_value testNativeWindowNativeWindowAttachBufferErrorCode(napi_env env, napi_callback_info info);
202 
203 napi_value testNativeWindowNativeWindowAttachBufferNormal(napi_env env, napi_callback_info info);
204 napi_value testNativeWindowNativeWindowDetachBufferErrorCode(napi_env env, napi_callback_info info);
205 
206 napi_value testNativeWindowNativeWindowAtDetachDifferentBufferNormal(napi_env env, napi_callback_info info);
207 napi_value testNativeWindowNativeWindowAtDetachDifferentBufferAbnormal(napi_env env, napi_callback_info info);
208 napi_value testNativeWindowNativeWindowHandleOptNullptr(napi_env env, napi_callback_info info);
209 napi_value testNativeWindowNativeWindowHandleOptSetGetBufferGeometryNormal(napi_env env, napi_callback_info info);
210 napi_value testNativeWindowNativeWindowHandleOptSetGetBufferGeometryAbnormal(napi_env env, napi_callback_info info);
211 
212 // Native Window 2
213 napi_value testNativeWindowNativeWindowHandleOptSetGetFormatNormal(napi_env env, napi_callback_info info);
214 napi_value testNativeWindowNativeWindowHandleOptSetGetFormatAbnormal(napi_env env, napi_callback_info info);
215 napi_value testNativeWindowNativeWindowHandleOptSetGetUsageNormal(napi_env env, napi_callback_info info);
216 napi_value testNativeWindowNativeWindowHandleOptSetGetUsageAbnormal(napi_env env, napi_callback_info info);
217 napi_value testNativeWindowNativeWindowHandleOptSetGetStrideNormal(napi_env env, napi_callback_info info);
218 napi_value testNativeWindowNativeWindowHandleOptSetGetStrideAbnormal(napi_env env, napi_callback_info info);
219 napi_value testNativeWindowNativeWindowHandleOptSetGetSwapIntervalNormal(napi_env env, napi_callback_info info);
220 napi_value testNativeWindowNativeWindowHandleOptSetGetSwapIntervalAbnormal(napi_env env, napi_callback_info info);
221 napi_value testNativeWindowNativeWindowHandleOptSetGetColorGamutNormal(napi_env env, napi_callback_info info);
222 napi_value testNativeWindowNativeWindowHandleOptSetGetColorGamutAbnormal(napi_env env, napi_callback_info info);
223 napi_value testNativeWindowNativeWindowHandleOptSetGetTransformNormal(napi_env env, napi_callback_info info);
224 napi_value testNativeWindowNativeWindowHandleOptSetGetTransformAbnormal(napi_env env, napi_callback_info info);
225 napi_value testNativeWindowNativeWindowHandleOptSetUiTimeStampNormal(napi_env env, napi_callback_info info);
226 napi_value testNativeWindowNativeWindowHandleOptSetUiTimeStampAbnormal(napi_env env, napi_callback_info info);
227 napi_value testNativeWindowNativeWindowHandleOptGetBufferQueueSize(napi_env env, napi_callback_info info);
228 napi_value testNativeWindowNativeWindowHandleOptSetHdrWhitePointBrightnessNormal(napi_env env, napi_callback_info info);
229 napi_value testNativeWindowNativeWindowHandleOptSetHdrWhitePointBrightnessAbnormal(napi_env env,
230                                                                                    napi_callback_info info);
231 napi_value testNativeWindowNativeWindowHandleOptSetSdrWhitePointBrightnessNormal(napi_env env, napi_callback_info info);
232 napi_value testNativeWindowNativeWindowHandleOptSetSdrWhitePointBrightnessAbnormal(napi_env env,
233                                                                                    napi_callback_info info);
234 napi_value testNativeWindowNativeWindowHandleOptSetGetSourceTypeNormal(napi_env env, napi_callback_info info);
235 napi_value testNativeWindowNativeWindowHandleOptSetGetSourceTypeAbnormal(napi_env env, napi_callback_info info);
236 napi_value testNativeWindowNativeWindowHandleOptSetGetAppFrameworkTypeNormal(napi_env env, napi_callback_info info);
237 napi_value testNativeWindowNativeWindowHandleOptSetGetAppFrameworkTypeAbnormal(napi_env env, napi_callback_info info);
238 napi_value testNativeWindowNativeWindowSetSetScalingModeV2Nullptr(napi_env env, napi_callback_info info);
239 napi_value testNativeWindowNativeWindowSetScalingModeV2ScalingMode(napi_env env, napi_callback_info info);
240 napi_value testNativeWindowGetColorSpaceFirst(napi_env env, napi_callback_info info);
241 napi_value testNativeWindowSetColorSpaceNormal(napi_env env, napi_callback_info info);
242 napi_value testNativeWindowSetColorSpaceNullptr(napi_env env, napi_callback_info info);
243 napi_value testNativeWindowGetColorSpaceNullptr(napi_env env, napi_callback_info info);
244 napi_value testNativeWindowSetColorSpaceAbnormal(napi_env env, napi_callback_info info);
245 napi_value testNativeWindowGetMetadataValueFirst(napi_env env, napi_callback_info info);
246 napi_value testNativeWindowSetDynamicMetadataValue(napi_env env, napi_callback_info info);
247 napi_value testNativeWindowSetMetadataValueTimes(napi_env env, napi_callback_info info);
248 napi_value testNativeWindowSetStaticMetadataValue(napi_env env, napi_callback_info info);
249 napi_value testNativeWindowSetMetadataValue(napi_env env, napi_callback_info info);
250 napi_value testNativeWindowSetNullMetadataValue(napi_env env, napi_callback_info info);
251 napi_value testNativeWindowSetMetadataValueNullptr(napi_env env, napi_callback_info info);
252 napi_value testNativeWindowGetMetadataValueAbnormal(napi_env env, napi_callback_info info);
253 napi_value testNativeWindowGetMetadataValueNullptr(napi_env env, napi_callback_info info);
254 napi_value testNativeWindowNativeWindowHandleOptSetDesiredPresentTimeStampNormal(napi_env env,
255                                                                                  napi_callback_info info);
256 napi_value testNativeWindowNativeWindowHandleOptSetDesiredPresentTimeStampAbNormal(napi_env env,
257                                                                                    napi_callback_info info);
258 napi_value testNativeWindowSetMetadataValue_metadata_type(napi_env env, napi_callback_info info);
259 napi_value testNativeWindowCreateNativeWindow(napi_env env, napi_callback_info info);
260 napi_value testNativeWindowNativeWindowSetSetScalingMode(napi_env env, napi_callback_info info);
261 napi_value testNativeWindowNativeWindowSetMetaData(napi_env env, napi_callback_info info);
262 napi_value testNativeWindowNativeWindowSetMetaDataSet(napi_env env, napi_callback_info info);
263 napi_value testNativeWindowNativeWindowSetTunnelHandle(napi_env env, napi_callback_info info);
264 napi_value testNativeWindowCleanCacheBeforeBufferRequested(napi_env env, napi_callback_info info);
265 napi_value testNativeWindowCleanCacheWhenBufferRequested(napi_env env, napi_callback_info info);
266 napi_value testNativeWindowCleanCacheWhenBufferFlushed(napi_env env, napi_callback_info info);
267 napi_value testNativeWindowCleanCacheWhenBufferAcquired(napi_env env, napi_callback_info info);
268 napi_value testNativeWindowCleanCacheWhenBufferReleased(napi_env env, napi_callback_info info);
269 napi_value testNativeWindowCleanCacheLoopWhenBufferRequested(napi_env env, napi_callback_info info);
270 napi_value testNativeWindowCleanCacheLoopWhenBufferFlushed(napi_env env, napi_callback_info);
271 #endif // NATIVEWINDOW_USELESS_H
272