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