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