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 INTERFACES_KITS_JS_COMMON_INCLUDE_SENDABLE_PIXEL_MAP_NAPI_H 17 #define INTERFACES_KITS_JS_COMMON_INCLUDE_SENDABLE_PIXEL_MAP_NAPI_H 18 19 #include <shared_mutex> 20 #include "napi/native_api.h" 21 #include "napi/native_node_api.h" 22 #include "pixel_map_napi.h" 23 24 namespace OHOS { 25 namespace Media { 26 class SendablePixelMapNapi { 27 public: 28 SendablePixelMapNapi(); 29 ~SendablePixelMapNapi(); 30 31 static napi_value Init(napi_env env, napi_value exports); 32 33 static napi_value CreateSendablePixelMap(napi_env env, std::shared_ptr<PixelMap> pixelmap); 34 static std::shared_ptr<PixelMap> GetSendablePixelMap(napi_env env, napi_value pixelmap); ReleasePixelNapiInner()35 void ReleasePixelNapiInner() 36 { 37 std::unique_lock<std::shared_mutex> lock(mutex_); 38 setPixelNapiEditable(false); 39 nativePixelMap_ = nullptr; 40 } setPixelNapiEditable(bool isEditable)41 void setPixelNapiEditable(bool isEditable) 42 { 43 isPixelNapiEditable = isEditable; 44 } GetPixelNapiEditable()45 bool GetPixelNapiEditable() 46 { 47 return isPixelNapiEditable; 48 } GetUniqueId()49 uint32_t GetUniqueId() 50 { 51 return uniqueId_; 52 } 53 bool IsLockPixelMap(); 54 bool LockPixelMap(); 55 void UnlockPixelMap(); GetConstructor()56 static napi_ref GetConstructor() 57 { 58 return sConstructor_; 59 } 60 private: 61 static napi_value Constructor(napi_env env, napi_callback_info info); 62 static void Destructor(napi_env env, void *nativeObject, void *finalize); 63 64 // readonly property 65 static napi_value GetIsEditable(napi_env env, napi_callback_info info); 66 static napi_value GetIsStrideAlignment(napi_env env, napi_callback_info info); 67 68 /* stattic method */ 69 static napi_value CreateSendablePixelMap(napi_env env, napi_callback_info info); 70 static napi_value CreatePremultipliedSendablePixelMap(napi_env env, napi_callback_info info); 71 static napi_value CreateUnpremultipliedSendablePixelMap(napi_env env, napi_callback_info info); 72 /* stattic method */ 73 static napi_value CreateSendablePixelMapSync(napi_env env, napi_callback_info info); 74 static napi_value ConvertFromPixelMap(napi_env env, napi_callback_info info); 75 static napi_value ConvertToPixelMap(napi_env env, napi_callback_info info); 76 static void CreateSendablePixelMapComplete(napi_env env, napi_status status, void *data); 77 static napi_value Unmarshalling(napi_env env, napi_callback_info info); 78 static void UnmarshallingComplete(napi_env env, napi_status status, void *data); 79 static napi_value CreateSendablPixelMapFromParcel(napi_env env, napi_callback_info info); 80 static napi_value CreateSendablePixelMapFromSurface(napi_env env, napi_callback_info info); 81 static void CreateSendablePixelMapFromSurfaceComplete(napi_env env, napi_status status, void *data); 82 static napi_value ThrowExceptionError(napi_env env, 83 const std::string &tag, const std::uint32_t &code, const std::string &info); 84 85 // methods 86 static napi_value ReadPixelsToBuffer(napi_env env, napi_callback_info info); 87 static napi_value ReadPixelsToBufferSync(napi_env env, napi_callback_info info); 88 static napi_value ReadPixels(napi_env env, napi_callback_info info); 89 static napi_value ReadPixelsSync(napi_env env, napi_callback_info info); 90 static napi_value WritePixels(napi_env env, napi_callback_info info); 91 static napi_value WritePixelsSync(napi_env env, napi_callback_info info); 92 static napi_value WriteBufferToPixels(napi_env env, napi_callback_info info); 93 static napi_value WriteBufferToPixelsSync(napi_env env, napi_callback_info info); 94 static napi_value GetImageInfo(napi_env env, napi_callback_info info); 95 static napi_value GetImageInfoSync(napi_env env, napi_callback_info info); 96 static napi_value GetBytesNumberPerRow(napi_env env, napi_callback_info info); 97 static napi_value GetPixelBytesNumber(napi_env env, napi_callback_info info); 98 static napi_value getPixelBytesCount(napi_env env, napi_callback_info info); 99 static napi_value IsSupportAlpha(napi_env env, napi_callback_info info); 100 static napi_value SetAlphaAble(napi_env env, napi_callback_info info); 101 static napi_value CreateAlphaPixelmap(napi_env env, napi_callback_info info); 102 static napi_value CreateAlphaPixelmapSync(napi_env env, napi_callback_info info); 103 static napi_value GetDensity(napi_env env, napi_callback_info info); 104 static napi_value SetDensity(napi_env env, napi_callback_info info); 105 static napi_value Release(napi_env env, napi_callback_info info); 106 static napi_value SetAlpha(napi_env env, napi_callback_info info); 107 static napi_value SetAlphaSync(napi_env env, napi_callback_info info); 108 109 static napi_value Scale(napi_env env, napi_callback_info info); 110 static napi_value ScaleSync(napi_env env, napi_callback_info info); 111 static napi_value Translate(napi_env env, napi_callback_info info); 112 static napi_value TranslateSync(napi_env env, napi_callback_info info); 113 static napi_value Rotate(napi_env env, napi_callback_info info); 114 static napi_value RotateSync(napi_env env, napi_callback_info info); 115 static napi_value Flip(napi_env env, napi_callback_info info); 116 static napi_value FlipSync(napi_env env, napi_callback_info info); 117 static napi_value Crop(napi_env env, napi_callback_info info); 118 static napi_value CropSync(napi_env env, napi_callback_info info); 119 120 static napi_value GetColorSpace(napi_env env, napi_callback_info info); 121 static napi_value SetColorSpace(napi_env env, napi_callback_info info); 122 static napi_value Marshalling(napi_env env, napi_callback_info info); 123 static napi_value ApplyColorSpace(napi_env env, napi_callback_info info); 124 static ImageType ParserImageType(napi_env env, napi_value argv); 125 126 void release(); 127 static thread_local napi_ref sConstructor_; 128 static std::shared_mutex mutex_; 129 napi_env env_ = nullptr; 130 std::shared_ptr<PixelMap> nativePixelMap_; 131 int32_t lockCount = 0; 132 bool isRelease = false; 133 bool isPixelNapiEditable = true; 134 uint32_t uniqueId_ = 0; 135 }; 136 } // namespace Media 137 } // namespace OHOS 138 #endif // INTERFACES_KITS_JS_COMMON_INCLUDE_SENDABLE_PIXEL_MAP_NAPI_H