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