• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2022 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_H_CAMERA_HOST_MANAGER_H
17 #define OHOS_CAMERA_H_CAMERA_HOST_MANAGER_H
18 #define EXPORT_API __attribute__((visibility("default")))
19 
20 #include <refbase.h>
21 #include <iostream>
22 #include <map>
23 #include <utility>
24 #include <memory>
25 #include <mutex>
26 #include <string>
27 #include <vector>
28 #include "camera_log.h"
29 #include "camera_metadata_info.h"
30 #include "v1_0/icamera_device.h"
31 #include "v1_1/icamera_device.h"
32 #include "v1_2/icamera_device.h"
33 #include "v1_3/icamera_device.h"
34 #include "v1_0/icamera_host.h"
35 #include "v1_1/icamera_host.h"
36 #include "v1_2/icamera_host.h"
37 #include "v1_3/icamera_host.h"
38 #include "icamera_device_service.h"
39 #include "icamera_service_callback.h"
40 #include "iservmgr_hdi.h"
41 #include "iservstat_listener_hdi.h"
42 #include "hcamera_restore_param.h"
43 #include "ability/camera_ability_const.h"
44 
45 namespace OHOS {
46 namespace CameraStandard {
47 using OHOS::HDI::Camera::V1_0::ICameraDeviceCallback;
48 class EXPORT_API HCameraHostManager : public RefBase {
49 public:
50     class StatusCallback {
51     public:
52         virtual ~StatusCallback() = default;
53         virtual void OnCameraStatus(const std::string& cameraId, CameraStatus status,
54             CallbackInvoker invoker = CallbackInvoker::CAMERA_HOST) = 0;
55         virtual void OnFlashlightStatus(const std::string& cameraId, FlashStatus status) = 0;
56         virtual void OnTorchStatus(TorchStatus status) = 0;
57     };
58     class CameraHostDeadCallback {
59     public:
CameraHostDeadCallback(wptr<HCameraHostManager> hostManager)60         explicit CameraHostDeadCallback(wptr<HCameraHostManager> hostManager) : hostManager_(hostManager) {};
61         virtual ~CameraHostDeadCallback() = default;
OnCameraHostDied(const std::string & hostName)62         virtual void OnCameraHostDied(const std::string& hostName)
63         {
64             auto hostManager = hostManager_.promote();
65             if (hostManager == nullptr) {
66                 MEDIA_ERR_LOG("HCameraHostManager OnCameraHostDied, but manager is nullptr");
67                 return;
68             }
69             hostManager->RemoveCameraHost(hostName);
70         };
71 
72     private:
73         wptr<HCameraHostManager> hostManager_;
74     };
75 
76     explicit HCameraHostManager(std::shared_ptr<StatusCallback> statusCallback);
77     ~HCameraHostManager() override;
78 
79     int32_t Init(void);
80     void DeInit(void);
81     void AddCameraDevice(const std::string& cameraId, sptr<ICameraDeviceService> cameraDevice);
82     virtual int32_t GetVersionByCamera(const std::string& cameraId);
83     void RemoveCameraDevice(const std::string& cameraId);
84     void CloseCameraDevice(const std::string& cameraId);
85 
86     virtual int32_t GetCameras(std::vector<std::string> &cameraIds);
87     virtual int32_t GetCameraAbility(const std::string &cameraId,
88         std::shared_ptr<OHOS::Camera::CameraMetadata> &ability);
89     virtual int32_t GetCameraIdSortedByCameraType(std::vector<std::string>& cameraIds);
90     virtual int32_t OpenCameraDevice(std::string &cameraId,
91                                      const sptr<ICameraDeviceCallback> &callback,
92                                      sptr<OHOS::HDI::Camera::V1_0::ICameraDevice> &pDevice,
93                                      bool isEnableSecCam = false);
94     virtual int32_t SetFlashlight(const std::string& cameraId, bool isEnable);
95     virtual int32_t Prelaunch(const std::string& cameraId, std::string clientName);
96     virtual int32_t PreSwitchCamera(const std::string& cameraId);
97     virtual int32_t SetTorchLevel(float level);
98     void NotifyDeviceStateChangeInfo(int notifyType, int deviceState);
99 
100     void SaveRestoreParam(sptr<HCameraRestoreParam> cameraRestoreParam);
101 
102     void UpdateRestoreParamCloseTime(const std::string& clientName, const std::string& cameraId);
103 
104     sptr<HCameraRestoreParam> GetRestoreParam(const std::string& clientName, const std::string& cameraId);
105 
106     sptr<HCameraRestoreParam> GetTransitentParam(const std::string& clientName, const std::string& cameraId);
107 
108     void UpdateRestoreParam(sptr<HCameraRestoreParam> &cameraRestoreParam);
109 
110     void DeleteRestoreParam(const std::string& clientName, const std::string& cameraId);
111 
112     bool CheckCameraId(sptr<HCameraRestoreParam> cameraRestoreParam, const std::string& cameraId);
113 
114     void AddCameraHost(const std::string& svcName);
115 
116     void RemoveCameraHost(const std::string& svcName);
117 
118     ::OHOS::sptr<HDI::ServiceManager::V1_0::IServStatListener> GetRegisterServStatListener();
119 
120     static const std::string LOCAL_SERVICE_NAME;
121     static const std::string DISTRIBUTED_SERVICE_NAME;
122 
123     void SetMuteMode(bool muteMode);
124 
125     int32_t GetCameraResourceCost(const std::string& cameraId,
126         OHOS::HDI::Camera::V1_3::CameraDeviceResourceCost& resourceCost);
127 
128     void GetPhysicCameraId(int32_t position, std::string &cameraid);
129 
130     void GetCameraStorageSize(const int& userId, int64_t& storageSize);
131 
132 private:
133     struct CameraDeviceInfo;
134     class CameraHostInfo;
135 
136     sptr<CameraHostInfo> FindCameraHostInfo(const std::string& cameraId);
137     sptr<CameraHostInfo> FindLocalCameraHostInfo();
138     bool IsCameraHostInfoAdded(const std::string& svcName);
139 
140     std::mutex mutex_;
141     std::mutex deviceMutex_;
142     std::mutex saveRestoreMutex_;
143     std::mutex openPrelaunchMutex_;
144     std::weak_ptr<StatusCallback> statusCallback_;
145     std::shared_ptr<CameraHostDeadCallback> cameraHostDeadCallback_;
146     std::vector<sptr<CameraHostInfo>> cameraHostInfos_;
147     std::map<std::string, sptr<ICameraDeviceService>> cameraDevices_;
148     std::map<std::string, std::map<std::string, sptr<HCameraRestoreParam>>> persistentParamMap_;
149     std::map<std::string, sptr<HCameraRestoreParam>> transitentParamMap_;
150     ::OHOS::sptr<HDI::ServiceManager::V1_0::IServStatListener> registerServStatListener_;
151     bool muteMode_;
152     bool isHasSavedParam = false;
153     bool isHasPrelaunch_ = false;
154     bool isHasOpenCamera_ = false;
155 };
156 
157 class RegisterServStatListener : public HDI::ServiceManager::V1_0::ServStatListenerStub {
158 public:
159     using StatusCallback = std::function<void(const HDI::ServiceManager::V1_0::ServiceStatus&)>;
160 
RegisterServStatListener(StatusCallback callback)161     explicit RegisterServStatListener(StatusCallback callback) : callback_(std::move(callback)) {
162     }
163 
164     ~RegisterServStatListener() override = default;
165 
166     void OnReceive(const HDI::ServiceManager::V1_0::ServiceStatus& status) override;
167 
168 private:
169     StatusCallback callback_;
170 };
171 } // namespace CameraStandard
172 } // namespace OHOS
173 #endif // OHOS_CAMERA_H_CAMERA_HOST_MANAGER_H
174