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 static napi_value GetImageSourceSupportedFormats(napi_env env, napi_callback_info info); 65 66 static napi_value CreateImageSourceComplete(napi_env env, napi_status status, void *data); 67 // methods 68 static napi_value GetImageInfo(napi_env env, napi_callback_info info); 69 static napi_value GetImageInfoSync(napi_env env, napi_callback_info info); 70 static napi_value CreatePixelMap(napi_env env, napi_callback_info info); 71 static napi_value CreatePixelMapSync(napi_env env, napi_callback_info info); 72 static napi_value ModifyImageProperty(napi_env env, napi_callback_info info); 73 static napi_value GetImageProperty(napi_env env, napi_callback_info info); 74 static napi_value GetImagePropertySync(napi_env env, napi_callback_info info); 75 static napi_value UpdateData(napi_env env, napi_callback_info info); 76 static napi_value Release(napi_env env, napi_callback_info info); 77 static napi_value CreatePixelMapList(napi_env env, napi_callback_info info); 78 static napi_value GetDelayTime(napi_env env, napi_callback_info info); 79 static napi_value GetDisposalType(napi_env env, napi_callback_info info); 80 static napi_value GetFrameCount(napi_env env, napi_callback_info info); 81 static std::vector<napi_property_descriptor> RegisterNapi(); 82 #if !defined(IOS_PLATFORM) && !defined(ANDROID_PLATFORM) 83 static napi_value CreatePicture(napi_env env, napi_callback_info info); 84 static napi_value CreatePictureAtIndex(napi_env env, napi_callback_info info); 85 #endif 86 static napi_value CreatePixelMapUsingAllocator(napi_env env, napi_callback_info info); 87 static napi_value CreatePixelMapUsingAllocatorSync(napi_env env, napi_callback_info info); 88 static napi_value CreateWideGamutSdrPixelMap(napi_env env, napi_callback_info info); 89 90 void release(); 91 static thread_local napi_ref sConstructor_; 92 static thread_local std::shared_ptr<ImageSource> sImgSrc_; 93 static thread_local std::shared_ptr<IncrementalPixelMap> sIncPixelMap_; 94 std::shared_ptr<IncrementalPixelMap> navIncPixelMap_ = nullptr; 95 static napi_ref pixelMapFormatRef_; 96 static napi_ref propertyKeyRef_; 97 static napi_ref imageFormatRef_; 98 static napi_ref alphaTypeRef_; 99 static napi_ref scaleModeRef_; 100 static napi_ref componentTypeRef_; 101 static napi_ref decodingDynamicRangeRef_; 102 static napi_ref decodingResolutionQualityRef_; 103 static napi_ref decodingAllocatorTypeRef_; 104 static napi_ref cropAndScaleStrategyRef_; 105 106 napi_env env_ = nullptr; 107 bool isRelease = false; 108 ImageResource resource_; 109 }; 110 } // namespace Media 111 } // namespace OHOS 112 #endif // INTERFACES_KITS_JS_COMMON_INCLUDE_IMAGE_SOURCE_NAPI_H 113