1 /* 2 * Copyright (C) 2021 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_IMAGE_SOURCE_NAPI_H 17 #define INTERFACES_KITS_JS_COMMON_INCLUDE_IMAGE_SOURCE_NAPI_H 18 19 #include "pixel_map.h" 20 #include "image_type.h" 21 #include "image_source.h" 22 #include "napi/native_api.h" 23 #include "napi/native_node_api.h" 24 #include "pixel_map_napi.h" 25 #include "incremental_pixel_map.h" 26 #include "image_resource_utils.h" 27 #include "picture.h" 28 #include "picture_napi.h" 29 30 namespace OHOS { 31 namespace Media { 32 class ImageSourceNapi { 33 public: 34 ImageSourceNapi(); 35 ~ImageSourceNapi(); 36 37 static napi_value Init(napi_env env, napi_value exports); 38 std::shared_ptr<ImageSource> nativeImgSrc = nullptr; GetIncrementalPixelMap()39 std::shared_ptr<IncrementalPixelMap> GetIncrementalPixelMap() 40 { 41 return navIncPixelMap_; 42 } 43 44 static thread_local std::string filePath_; 45 static thread_local int fileDescriptor_; 46 static thread_local void* fileBuffer_; 47 static thread_local size_t fileBufferSize_; 48 static int32_t CreateImageSourceNapi(napi_env env, napi_value* result); 49 void SetIncrementalPixelMap(std::shared_ptr<IncrementalPixelMap> incrementalPixelMap); 50 void SetNativeImageSource(std::shared_ptr<ImageSource> imageSource); 51 void SetImageResource(ImageResource resource); 52 ImageResource GetImageResource(); 53 54 private: 55 static napi_value Constructor(napi_env env, napi_callback_info info); 56 static void Destructor(napi_env env, void *nativeObject, void *finalize); 57 58 // readonly property 59 static napi_value GetSupportedFormats(napi_env env, napi_callback_info info); 60 61 // static methods 62 static napi_value CreateImageSource(napi_env env, napi_callback_info info); 63 static napi_value CreateIncrementalSource(napi_env env, napi_callback_info info); 64 65 static napi_value CreateImageSourceComplete(napi_env env, napi_status status, void *data); 66 // methods 67 static napi_value GetImageInfo(napi_env env, napi_callback_info info); 68 static napi_value GetImageInfoSync(napi_env env, napi_callback_info info); 69 static napi_value CreatePixelMap(napi_env env, napi_callback_info info); 70 static napi_value CreatePixelMapSync(napi_env env, napi_callback_info info); 71 static napi_value ModifyImageProperty(napi_env env, napi_callback_info info); 72 static napi_value GetImageProperty(napi_env env, napi_callback_info info); 73 static napi_value UpdateData(napi_env env, napi_callback_info info); 74 static napi_value Release(napi_env env, napi_callback_info info); 75 static napi_value CreatePixelMapList(napi_env env, napi_callback_info info); 76 static napi_value GetDelayTime(napi_env env, napi_callback_info info); 77 static napi_value GetDisposalType(napi_env env, napi_callback_info info); 78 static napi_value GetFrameCount(napi_env env, napi_callback_info info); 79 static std::vector<napi_property_descriptor> RegisterNapi(); 80 #if !defined(IOS_PLATFORM) && !defined(ANDROID_PLATFORM) 81 static napi_value CreatePicture(napi_env env, napi_callback_info info); 82 #endif 83 84 void release(); 85 static thread_local napi_ref sConstructor_; 86 static thread_local std::shared_ptr<ImageSource> sImgSrc_; 87 static thread_local std::shared_ptr<IncrementalPixelMap> sIncPixelMap_; 88 std::shared_ptr<IncrementalPixelMap> navIncPixelMap_ = nullptr; 89 static napi_ref pixelMapFormatRef_; 90 static napi_ref propertyKeyRef_; 91 static napi_ref imageFormatRef_; 92 static napi_ref alphaTypeRef_; 93 static napi_ref scaleModeRef_; 94 static napi_ref componentTypeRef_; 95 static napi_ref decodingDynamicRangeRef_; 96 static napi_ref decodingResolutionQualityRef_; 97 98 napi_env env_ = nullptr; 99 bool isRelease = false; 100 ImageResource resource_; 101 }; 102 } // namespace Media 103 } // namespace OHOS 104 #endif // INTERFACES_KITS_JS_COMMON_INCLUDE_IMAGE_SOURCE_NAPI_H 105