• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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_DETAIL_ENHANCE_NAPI_FORMAL_H
17 #define INTERFACES_KITS_JS_COMMON_INCLUDE_DETAIL_ENHANCE_NAPI_FORMAL_H
18 
19 #include "detail_enhancer_image.h"
20 #include "contrast_enhancer_image.h"
21 #include "image_type.h"
22 #include "image_processing_types.h"
23 #include "pixel_map_napi.h"
24 
25 namespace OHOS {
26 namespace Media {
27 class VpeNapi {
28 public:
29     VpeNapi() = default;
30     ~VpeNapi() = default;
31 
32     static napi_value Init(napi_env env, napi_value exports);
33     static napi_value Create(napi_env env, napi_callback_info info);
34     static napi_value EnhanceDetail(napi_env env, napi_callback_info info);
35     static napi_value EnhanceDetailSync(napi_env env, napi_callback_info info);
36     static napi_value SetDetailImage(napi_env env, napi_callback_info info);
37     static napi_value SetLcdImage(napi_env env, napi_callback_info info);
38     static napi_value RegisterCallback(napi_env env, napi_callback_info info);
39     static napi_value InitializeEnvironment(napi_env env, napi_callback_info info);
40     static napi_value DeinitializeEnvironment(napi_env env, napi_callback_info info);
41 
42 private:
43     struct DetailEnhanceContext {
44         napi_async_work asyncWork{}; // asynchronous work object
45         napi_deferred deferred{}; // Delayed execution object (used to return calculation results in Promise)
46         napi_ref callbackRef{}; // Reference object of callback func(used to return calculation results)
47         double xArg{};
48         double yArg{};
49         int32_t qualityLevel{};
50         std::shared_ptr<PixelMap> inputPixelMap{};
51         std::shared_ptr<PixelMap> outputPixelMap{};
52     };
53 
54     struct ContrastEnhanceContext {
55         napi_env env;
56         napi_async_work asyncWork{}; // asynchronous work object
57         napi_deferred deferred;
58         napi_ref callbackRef;
59         std::shared_ptr<PixelMap> inputPixelMap{};
60         std::shared_ptr<PixelMap> lcdPixelMap{};
61         OHOS::Rect curPixelmapArea;
62         OHOS::Rect displayArea;
63         int pixelmapId = -1;
64         double fullRatio{};; // 传入的pixelmap 相对于原图的缩放比例
65         int sharpnessIntensity{};;
66         int32_t contentId = -1;
67         int oriHeight{};
68         int oriWidth{};
69         unsigned int lcdHeight{};
70         unsigned int lcdWidth{};
71         bool isLocalDecoding{};
72         napi_ref callbackFunc;
73         double defaultRatio{};
74         bool isLCDLutFinished{};
75         bool isCanceled{};
76         bool genFinalEffect{};
77         double maxRatio{};
78         int animationDuration{};
79         double curRatio{};
80     };
81 
82     struct NapiValues {
83         napi_status status = napi_ok;
84         napi_value thisVar{};
85         napi_value result{};
86         napi_value* argv{};
87         size_t argc = 0;
88     };
89 
90     static thread_local napi_ref constructor_;
91     static thread_local napi_ref qualityLevelTypeRef_;
92     static thread_local std::shared_ptr<ContrastEnhanceContext> contrastContext_;
93     static thread_local std::shared_ptr<DetailEnhanceContext> detailContext_;
94 
95     static bool PrepareNapiEnv(napi_env env, napi_callback_info info, NapiValues* nVal);
96     static bool ParseRect(napi_env env, napi_value nVal, OHOS::Rect& rect);
97     static bool ParseSize(napi_env env, napi_value nVal);
98     static std::shared_ptr<PixelMap> PrepareDstPixelMap(napi_env env, VpeNapi::DetailEnhanceContext* context);
99     static ImageType ParserImageType(napi_env env, napi_value argv);
100 
101     static void SetDstPixelMapInfo(OHOS::Media::PixelMap& source, void* dstPixels, uint32_t dstPixelsSize,
102         std::unique_ptr<OHOS::Media::AbsMemory>& memory, OHOS::Media::PixelMap& dstPixelMap);
103     static bool AllocMemory(OHOS::Media::PixelMap& source, OHOS::Media::PixelMap& dstPixelMap,
104         const InitializationOptions& opt);
105     static bool ConvertPixelmapToSurfaceBuffer(const std::shared_ptr<OHOS::Media::PixelMap>& pixelmap,
106         sptr<SurfaceBuffer>& bufferImpl);
107     static std::unique_ptr<OHOS::Media::PixelMap> CreateDstPixelMap(OHOS::Media::PixelMap& source,
108         const OHOS::Media::InitializationOptions& opts);
109     static sptr<OHOS::SurfaceBuffer> GetSurfaceBufferFromDMAPixelMap(
110         const std::shared_ptr<OHOS::Media::PixelMap>& pixelmap);
111     static napi_value CreateEnumTypeObject(napi_env env,
112         napi_valuetype type, napi_ref* ref, std::vector<struct QualityLevelEnum>& imageEnumMap);
113 
114     // detail enhancer
115     static bool InitDetailAlgo(napi_env env);
116     static bool ConfigResolutionBasedOnRatio(napi_env env, napi_value& nVal,
117         std::shared_ptr<VpeNapi::DetailEnhanceContext> context);
118     static bool ConfigResolution(napi_env env, napi_value& width, napi_value& height,
119         std::shared_ptr<VpeNapi::DetailEnhanceContext> context);
120     static bool ParseDetailEnhanceParameter(napi_env env, napi_callback_info info);
121     static std::shared_ptr<PixelMap> DetailEnhanceImpl(napi_env env, VpeNapi::DetailEnhanceContext* context);
122     static bool SetDetailAlgoParam(napi_env env, int level);
123     static void EnhanceDetailWork(napi_env env, void* data);
124     static void EnhanceDetailCallBackWork(napi_env env, napi_status status, void* data);
125 
126     // contrast enhancer
127     static bool InitContrastAlgo(napi_env env);
128     static bool ParseLCDParameter(napi_env env, napi_callback_info info, NapiValues& nVal);
129     static bool ParseDetailImageParameter(napi_env env, napi_callback_info info, NapiValues& nVal);
130     static bool GenerateRegionHist(napi_env env, ContrastEnhanceContext* context);
131     static bool UpdateMetadataBasedOnHist(ContrastEnhanceContext* context);
132     static bool UpdateMetadataBasedOnPixel(ContrastEnhanceContext* context);
133     static napi_value CallCallback(napi_env env, ContrastEnhanceContext* context);
134     static OHOS::Rect PrepareRect(std::shared_ptr<PixelMap> input, OHOS::Rect& displayArea, float ratio);
135 
136     static napi_value Constructor(napi_env env, napi_callback_info info);
137     static void Destructor(napi_env env, void* nativeObject, void* finalize);
138     static void ThrowExceptionError(napi_env env, const int32_t errCode, const std::string errMsg);
139     static napi_value DoInitAfter(napi_env env, napi_value exports, napi_value constructor, size_t property_count,
140         const napi_property_descriptor* properties);
141     static std::vector<napi_property_descriptor> RegisterNapi();
142 };
143 }
144 }
145 #endif // INTERFACES_KITS_JS_COMMON_INCLUDE_DETAIL_ENHANCE_NAPI_FORMAL_H