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 29 namespace OHOS { 30 namespace CameraStandard { 31 class SketchWrapper { 32 public: 33 static float GetSketchReferenceFovRatio(const SceneFeaturesMode& sceneFeaturesMode, float zoomRatio); 34 static float GetSketchEnableRatio(const SceneFeaturesMode& sceneFeaturesMode); 35 static void UpdateSketchStaticInfo(std::shared_ptr<OHOS::Camera::CameraMetadata> deviceMetadata); 36 37 explicit SketchWrapper(sptr<IStreamCommon> hostStream, const Size size); 38 virtual ~SketchWrapper(); 39 int32_t Init( 40 std::shared_ptr<OHOS::Camera::CameraMetadata>& deviceMetadata, const SceneFeaturesMode& sceneFeaturesMode); 41 int32_t AttachSketchSurface(sptr<Surface> sketchSurface); 42 int32_t StartSketchStream(); 43 int32_t StopSketchStream(); 44 int32_t Destroy(); 45 46 void OnSketchStatusChanged(SketchStatus sketchStatus, const SceneFeaturesMode& sceneFeaturesMode); 47 void SetPreviewStateCallback(std::shared_ptr<PreviewStateCallback> callback); 48 int32_t UpdateSketchRatio(float sketchRatio); 49 void UpdateZoomRatio(float zoomRatio); 50 51 int32_t OnMetadataDispatch(const SceneFeaturesMode& sceneFeaturesMode, const camera_device_metadata_tag_t tag, 52 const camera_metadata_item_t& metadataItem); 53 54 private: 55 // Cache device info 56 static std::mutex g_sketchReferenceFovRatioMutex_; 57 static std::map<SceneFeaturesMode, std::vector<SketchReferenceFovRange>> g_sketchReferenceFovRatioMap_; 58 static std::mutex g_sketchEnableRatioMutex_; 59 static std::map<SceneFeaturesMode, float> g_sketchEnableRatioMap_; 60 61 wptr<IStreamCommon> hostStream_; 62 Size sketchSize_; 63 sptr<Surface> sketchSurface_ = nullptr; 64 sptr<IStreamRepeat> sketchStream_; 65 std::mutex sketchStatusChangeMutex_; 66 67 std::weak_ptr<PreviewStateCallback> previewStateCallback_; 68 69 volatile float sketchEnableRatio_ = -1.0f; 70 volatile float currentZoomRatio_ = 1.0f; 71 SketchStatusData currentSketchStatusData_ = { .status = SketchStatus::STOPED, .sketchRatio = -1.0f }; 72 73 static SceneFeaturesMode GetSceneFeaturesModeFromModeData(float floatModeData); 74 static void InsertSketchReferenceFovRatioMapValue( 75 SceneFeaturesMode& sceneFeaturesMode, SketchReferenceFovRange& sketchReferenceFovRange); 76 static void InsertSketchEnableRatioMapValue(SceneFeaturesMode& sceneFeaturesMode, float ratioValue); 77 static void UpdateSketchEnableRatio(std::shared_ptr<OHOS::Camera::CameraMetadata>& deviceMetadata); 78 static void UpdateSketchReferenceFovRatio(std::shared_ptr<OHOS::Camera::CameraMetadata>& deviceMetadata); 79 static void UpdateSketchReferenceFovRatio(camera_metadata_item_t& metadataItem); 80 static bool GetMoonCaptureBoostAbilityItem( 81 std::shared_ptr<OHOS::Camera::CameraMetadata>& deviceMetadata, camera_metadata_item_t& metadataItem); 82 static void UpdateSketchConfigFromMoonCaptureBoostConfig( 83 std::shared_ptr<OHOS::Camera::CameraMetadata>& deviceMetadata); 84 void OnSketchStatusChanged(const SceneFeaturesMode& sceneFeaturesMode); 85 int32_t OnMetadataChangedZoomRatio(const SceneFeaturesMode& sceneFeaturesMode, 86 const camera_device_metadata_tag_t tag, const camera_metadata_item_t& metadataItem); 87 int32_t OnMetadataChangedMacro(const SceneFeaturesMode& sceneFeaturesMode, const camera_device_metadata_tag_t tag, 88 const camera_metadata_item_t& metadataItem); 89 int32_t OnMetadataChangedMoonCaptureBoost(const SceneFeaturesMode& sceneFeaturesMode, 90 const camera_device_metadata_tag_t tag, const camera_metadata_item_t& metadataItem); 91 92 void AutoStream(); 93 }; 94 } // namespace CameraStandard 95 } // namespace OHOS 96 #endif // OHOS_CAMERA_SKETCH_WRAPPER_H