• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023-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 #ifndef OHOS_CAMERA_SKETCH_WRAPPER_H
17 #define OHOS_CAMERA_SKETCH_WRAPPER_H
18 
19 #include <cstdint>
20 #include <memory>
21 #include <mutex>
22 
23 #include "abilities/sketch_ability.h"
24 #include "capture_scene_const.h"
25 #include "image_receiver.h"
26 #include "preview_output.h"
27 #include "refbase.h"
28 #include "camera_common_struct.h"
29 
30 namespace OHOS {
31 namespace CameraStandard {
32 class SketchWrapper {
33 public:
34     static float GetSketchReferenceFovRatio(const SceneFeaturesMode& sceneFeaturesMode, float zoomRatio);
35     static float GetSketchEnableRatio(const SceneFeaturesMode& sceneFeaturesMode);
36     static void UpdateSketchStaticInfo(std::shared_ptr<OHOS::Camera::CameraMetadata> deviceMetadata);
37 
38     explicit SketchWrapper(wptr<IStreamCommon> hostStream, const Size size, bool isDynamicNotify = false);
39     virtual ~SketchWrapper();
40     int32_t Init(
41         std::shared_ptr<OHOS::Camera::CameraMetadata>& deviceMetadata, const SceneFeaturesMode& sceneFeaturesMode);
42     int32_t AttachSketchSurface(sptr<Surface> sketchSurface);
43     int32_t StartSketchStream();
44     int32_t StopSketchStream();
45     int32_t Destroy();
46 
47     void OnSketchStatusChanged(SketchStatus sketchStatus, const SceneFeaturesMode& sceneFeaturesMode);
48     void SetPreviewOutputCallbackManager(wptr<PreviewOutputListenerManager> previewOutputCallbackManager);
49     int32_t UpdateSketchRatio(float sketchRatio);
50     void UpdateZoomRatio(float zoomRatio);
51 
52     int32_t OnMetadataDispatch(const SceneFeaturesMode& sceneFeaturesMode, const camera_device_metadata_tag_t tag,
53         const camera_metadata_item_t& metadataItem);
54 
55 private:
56     // Cache device info
57     static std::mutex g_sketchReferenceFovRatioMutex_;
58     static std::map<SceneFeaturesMode, std::vector<SketchReferenceFovRange>> g_sketchReferenceFovRatioMap_;
59     static std::mutex g_sketchEnableRatioMutex_;
60     static std::map<SceneFeaturesMode, float> g_sketchEnableRatioMap_;
61 
62     wptr<IStreamCommon> hostStream_;
63     Size sketchSize_;
64     sptr<Surface> sketchSurface_ = nullptr;
65     sptr<IStreamRepeat> sketchStream_;
66     std::mutex sketchStatusChangeMutex_;
67     bool isDynamicNotify_;
68     float sketchDynamicReferenceRatio_ = -1.0f;
69 
70     wptr<PreviewOutputListenerManager> previewOutputCallbackManager_;
71 
72     volatile float sketchEnableRatio_ = -1.0f;
73     volatile float currentZoomRatio_ = 1.0f;
74     SketchStatusData currentSketchStatusData_ = {
75         .status = SketchStatus::STOPED, .sketchRatio = -1.0f, .offsetx = 0.0f, .offsety = 0.0f };
76     CameraPoint offset_ = { .x = 0.0f, .y = 0.0f};
77 
78     static SceneFeaturesMode GetSceneFeaturesModeFromModeData(float floatModeData);
79     static void InsertSketchReferenceFovRatioMapValue(
80         SceneFeaturesMode& sceneFeaturesMode, SketchReferenceFovRange& sketchReferenceFovRange);
81     static void InsertSketchEnableRatioMapValue(SceneFeaturesMode& sceneFeaturesMode, float ratioValue);
82     static void UpdateSketchEnableRatio(std::shared_ptr<OHOS::Camera::CameraMetadata>& deviceMetadata);
83     static void UpdateSketchReferenceFovRatio(std::shared_ptr<OHOS::Camera::CameraMetadata>& deviceMetadata);
84     static void UpdateSketchReferenceFovRatio(camera_metadata_item_t& metadataItem);
85     static bool GetMoonCaptureBoostAbilityItem(
86         std::shared_ptr<OHOS::Camera::CameraMetadata>& deviceMetadata, camera_metadata_item_t& metadataItem);
87     static void UpdateSketchConfigFromMoonCaptureBoostConfig(
88         std::shared_ptr<OHOS::Camera::CameraMetadata>& deviceMetadata);
89     void OnSketchStatusChanged(const SceneFeaturesMode& sceneFeaturesMode);
90     int32_t OnMetadataChangedZoomRatio(const SceneFeaturesMode& sceneFeaturesMode,
91         const camera_device_metadata_tag_t tag, const camera_metadata_item_t& metadataItem);
92     int32_t OnMetadataChangedMacro(const SceneFeaturesMode& sceneFeaturesMode, const camera_device_metadata_tag_t tag,
93         const camera_metadata_item_t& metadataItem);
94     int32_t OnMetadataChangedMoonCaptureBoost(const SceneFeaturesMode& sceneFeaturesMode,
95         const camera_device_metadata_tag_t tag, const camera_metadata_item_t& metadataItem);
96     int32_t OnMetadataChangedSketchDynamicNotify(const camera_metadata_item_t& metadataItem,
97         const SceneFeaturesMode& sceneFeaturesMode);
98 
99     void AutoStream();
100 };
101 } // namespace CameraStandard
102 } // namespace OHOS
103 #endif // OHOS_CAMERA_SKETCH_WRAPPER_H