• 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_MANAGER_IMPL_H
17 #define OHOS_CAMERA_MANAGER_IMPL_H
18 
19 #include <mutex>
20 #include <unordered_map>
21 
22 #include "camera_input_impl.h"
23 #include "capture_session_impl.h"
24 #include "input/camera_manager.h"
25 #include "kits/native/include/camera/camera.h"
26 #include "kits/native/include/camera/camera_manager.h"
27 #include "metadata_output_impl.h"
28 #include "ndk_callback_map.h"
29 #include "photo_output_impl.h"
30 #include "preview_output_impl.h"
31 #include "video_output_impl.h"
32 
33 namespace OHOS::CameraStandard {
34 class InnerCameraManagerTorchStatusCallback;
35 class InnerCameraManagerCameraStatusCallback;
36 class InnerCameraManagerFoldStatusCallback;
37 }
38 struct Camera_Manager {
39 public:
40     Camera_Manager();
41     ~Camera_Manager();
42 
43     Camera_ErrorCode RegisterCallback(CameraManager_Callbacks* cameraStatusCallback);
44 
45     Camera_ErrorCode UnregisterCallback(CameraManager_Callbacks* cameraStatusCallback);
46 
47     Camera_ErrorCode RegisterTorchStatusCallback(OH_CameraManager_TorchStatusCallback torchStatusCallback);
48 
49     Camera_ErrorCode UnregisterTorchStatusCallback(OH_CameraManager_TorchStatusCallback torchStatusCallback);
50 
51     Camera_ErrorCode GetSupportedCameras(Camera_Device** cameras, uint32_t* size);
52 
53     Camera_ErrorCode DeleteSupportedCameras(Camera_Device* cameras, uint32_t size);
54 
55     Camera_ErrorCode GetSupportedCameraOutputCapability(const Camera_Device* camera,
56         Camera_OutputCapability** cameraOutputCapability);
57 
58     Camera_ErrorCode GetSupportedCameraOutputCapabilityWithSceneMode(const Camera_Device* camera,
59         Camera_SceneMode sceneMode, Camera_OutputCapability** cameraOutputCapability);
60 
61     Camera_ErrorCode DeleteSupportedCameraOutputCapability(Camera_OutputCapability* cameraOutputCapability);
62 
63     Camera_ErrorCode IsCameraMuted(bool* isCameraMuted);
64 
65     Camera_ErrorCode CreateCaptureSession(Camera_CaptureSession** captureSession);
66 
67     Camera_ErrorCode CreateCameraInput(const Camera_Device* camera, Camera_Input** cameraInput);
68 
69     Camera_ErrorCode CreateCameraInputWithPositionAndType(Camera_Position position, Camera_Type type,
70         Camera_Input** cameraInput);
71 
72     Camera_ErrorCode CreatePreviewOutput(const Camera_Profile* profile, const char* surfaceId,
73         Camera_PreviewOutput** previewOutput);
74 
75     Camera_ErrorCode CreatePreviewOutputUsedInPreconfig(const char* surfaceId, Camera_PreviewOutput** previewOutput);
76 
77     Camera_ErrorCode CreatePhotoOutput(const Camera_Profile* profile, const char* surfaceId,
78         Camera_PhotoOutput** photoOutput);
79 
80     Camera_ErrorCode CreatePhotoOutputWithoutSurface(const Camera_Profile* profile,
81         Camera_PhotoOutput** photoOutput);
82 
83     Camera_ErrorCode CreatePhotoOutputUsedInPreconfig(const char* surfaceId, Camera_PhotoOutput** photoOutput);
84 
85     Camera_ErrorCode CreateVideoOutput(const Camera_VideoProfile* profile, const char* surfaceId,
86         Camera_VideoOutput** videoOutput);
87 
88     Camera_ErrorCode CreateVideoOutputUsedInPreconfig(const char* surfaceId, Camera_VideoOutput** videoOutput);
89 
90     Camera_ErrorCode CreateMetadataOutput(const Camera_MetadataObjectType* type,
91         Camera_MetadataOutput** metadataOutput);
92 
93     Camera_ErrorCode IsTorchSupported(bool* isTorchSupported);
94 
95     Camera_ErrorCode IsTorchSupportedByTorchMode(Camera_TorchMode torchMode, bool* isTorchSupported);
96 
97     Camera_ErrorCode SetTorchMode(Camera_TorchMode torchMode);
98 
99     Camera_ErrorCode GetCameraDevice(Camera_Position position, Camera_Type type, Camera_Device *camera);
100 
101     Camera_ErrorCode GetCameraConcurrentInfos(const Camera_Device *camera, uint32_t deviceSize,
102         Camera_ConcurrentInfo **CameraConcurrentInfo, uint32_t *infoSize);
103 
104     static Camera_ErrorCode GetCameraOrientation(Camera_Device* cameras, uint32_t* orientation);
105 
106     static Camera_ErrorCode GetHostDeviceName(Camera_Device* camera, char** hostDeviceName);
107 
108     static Camera_ErrorCode GetHostDeviceType(Camera_Device* camera, Camera_HostDeviceType* hostDeviceType);
109 
110     static Camera_ErrorCode GetSupportedSceneModes(Camera_Device* camera,
111         Camera_SceneMode** sceneModes, uint32_t* size);
112 
113     Camera_ErrorCode DeleteSceneModes(Camera_SceneMode* sceneModes);
114 
115     Camera_ErrorCode RegisterFoldStatusCallback(OH_CameraManager_OnFoldStatusInfoChange foldStatusCallback);
116 
117     Camera_ErrorCode UnregisterFoldStatusCallback(OH_CameraManager_OnFoldStatusInfoChange foldStatusCallback);
118 
119 private:
120     Camera_ErrorCode GetSupportedPreviewProfiles(Camera_OutputCapability* outCapability,
121         std::vector<OHOS::CameraStandard::Profile> &previewProfiles);
122 
123     Camera_ErrorCode GetSupportedPhotoProfiles(Camera_OutputCapability* outCapability,
124         std::vector<OHOS::CameraStandard::Profile> &photoProfiles);
125 
126     Camera_ErrorCode GetSupportedVideoProfiles(Camera_OutputCapability* outCapability,
127         std::vector<OHOS::CameraStandard::VideoProfile> &videoProfiles);
128 
129     Camera_ErrorCode GetSupportedMetadataTypeList(Camera_OutputCapability* outCapability,
130         std::vector<OHOS::CameraStandard::MetadataObjectType> &metadataTypeList);
131 
132     Camera_ErrorCode SetCameraConcurrentInfothis(const Camera_Device *camera, uint32_t deviceSize,
133         Camera_ConcurrentInfo *CameraConcurrentInfothis,
134         std::vector<bool> &cameraConcurrentType, std::vector<std::vector<OHOS::CameraStandard::SceneMode>> &modes,
135         std::vector<std::vector<OHOS::sptr<OHOS::CameraStandard::CameraOutputCapability>>> &outputCapabilities);
136 
137     OHOS::sptr<OHOS::CameraStandard::CameraManager> cameraManager_;
138 
139     static NDKCallbackMap<CameraManager_Callbacks*, OHOS::CameraStandard::InnerCameraManagerCameraStatusCallback>
140         cameraStatusCallbackMap_;
141 
142     static NDKCallbackMap<OH_CameraManager_OnFoldStatusInfoChange,
143         OHOS::CameraStandard::InnerCameraManagerFoldStatusCallback>
144         cameraFoldStatusCallbackMap_;
145 
146     static NDKCallbackMap<OH_CameraManager_TorchStatusCallback,
147         OHOS::CameraStandard::InnerCameraManagerTorchStatusCallback>
148         torchStatusCallbackMap_;
149 
150     static thread_local OHOS::sptr<OHOS::Surface> photoSurface_;
151 };
152 #endif // OHOS_CAMERA_CAPTURE_INPUT_H