1 /* 2 * Copyright (C) 2024 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 OHCAMERANDK_CAMERA_MANAGER_H 17 #define OHCAMERANDK_CAMERA_MANAGER_H 18 19 #include <ohcamera/camera.h> 20 #include <ohcamera/camera_manager.h> 21 #include <ohcamera/photo_output.h> 22 #include "hilog/log.h" 23 24 #define CAMERA_LOG_TAG "CAMERA_TAGLOG" 25 #define CAMERA_LOG_DOMAIN 0x00000 26 #define LOG(fmt, ...) (void)OH_LOG_Print(LOG_APP, LOG_DEBUG, CAMERA_LOG_DOMAIN, CAMERA_LOG_TAG, fmt, ##__VA_ARGS__) 27 28 typedef enum CameraCallbackCode { 29 CAMERA_INPUT_STATUS = 1, 30 PREVIEW_ON_FRAME_START = 2, 31 PREVIEW_ON_FRAME_END = 3, 32 PREVIEW_ON_ERROR = 4, 33 PHOTO_ON_FRAME_START = 5, 34 PHOTO_ON_FRAME_SHUTTER = 6, 35 PHOTO_ON_FRAME_END = 7, 36 PHOTO_ON_ERROR = 8, 37 VIDEO_ON_FRAME_START = 9, 38 VIDEO_ON_FRAME_END = 10, 39 VIDEO_ON_ERROR = 11, 40 SESSION_ON_FOCUS_STATE_CHANGE = 14, 41 SESSION_ON_ERROR = 15, 42 CAMERA_MANAGER_STATUS = 16, 43 NO_RECEIVED = 10086, 44 } CameraCallbackCode; 45 typedef enum UseCaseCode { 46 PARAMETER_OK = 0, // 参数正常 47 PARAMETER1_ERROR = 1, // 参数1异常 48 PARAMETER2_ERROR = 2, // 参数2异常 49 PARAMETER3_ERROR = 3, // 参数3异常 50 PARAMETER4_ERROR = 4, // 参数4异常 51 } UseCaseCode; 52 class NDKCamera { 53 public: 54 NDKCamera(char *str, int index); 55 ~NDKCamera(void); 56 57 bool isMirror_; // 是否支持镜像拍照 58 bool isEnableMirror_; // 是否启用镜像拍照 59 bool hasFlash_; // 检测是否有闪关灯 60 bool isFlashMode_; // 检测闪光灯模式是否支持 61 bool isExposureMode_; // 是否支持曝光模式的结果。 62 float minExposureBias_; // 曝光补偿的最小值。 63 float maxExposureBias_; // 曝光补偿的最大值。 64 float exposureBias_; // 当前的曝光补偿。 65 bool isFocusSupported_; 66 float minZoom_; 67 float maxZoom_; 68 float zoom_; 69 bool isVideoSupported_; 70 Camera_FlashMode flashMode_; 71 Camera_ExposureMode exposureMode_; // 获取当前曝光模式。 72 Camera_Point point_; // 焦点 73 Camera_FocusMode focusMode_; // 聚焦模式 74 Camera_Point focusPoint_; // 焦点 75 Camera_VideoStabilizationMode videoMode_; 76 Camera_Device *cameras_; // 记录支持的Camera_Device列表。 77 Camera_OutputCapability *cameraOutputCapability_; // 特定相机和特定模式支持的输出功能 78 // callback 79 static CameraCallbackCode cameraCallbackCode_; // 回调码 80 81 Camera_ErrorCode GetSupportedCameras(int useCaseCode); // 获取支持相机的描述 82 Camera_ErrorCode CreatePreviewOutput(int useCaseCode); // 创建预览输出实例 83 Camera_ErrorCode GetSupportedOutputCapability(int useCaseCode); // 获取特定相机和特定模式支持的输出功能 84 Camera_ErrorCode CameraDeleteCameraManager(int useCaseCode); // 删除CameraManager实例 85 Camera_ErrorCode CameraManagerDeleteSupportedCameras(int useCaseCode); // 删除支持的相机。 86 Camera_ErrorCode CreateCameraInput(int useCaseCode); // 创建相机输入实例。 87 Camera_ErrorCode CreateSession(int useCaseCode); // 创建捕获会话实例。 88 Camera_ErrorCode CreateMetadataOutput(int useCaseCode); // 创建捕获会话实例。 89 Camera_ErrorCode CameraInputOpen(int useCaseCode); // 打开相机。 90 Camera_ErrorCode CameraInputClose(int useCaseCode); // 关闭相机。 91 Camera_ErrorCode CameraInputRelease(int useCaseCode); // 释放相机输入实例。 92 Camera_ErrorCode CameraManagerDeleteSupportedCameraOutputCapability(int useCaseCode); // 删除支持的输出功能。 93 Camera_ErrorCode CreateCameraInputWithPositionAndType(Camera_Position position, Camera_Type type, 94 int useCaseCode); // 创建具有位置和类型的相机输入实例。 95 Camera_ErrorCode CreatePhotoOutput(char *photoSurfaceId, int useCaseCode); // 创建一个拍照输出实例。 96 Camera_ErrorCode CreateVideoOutput(char *videoId, int useCaseCode); // 创建一个录像输出实例。 97 Camera_ErrorCode AddVideoOutput(int useCaseCode); // 添加录像输出。 98 Camera_ErrorCode VideoOutputStart(int useCaseCode); // 开始录像输出。 99 Camera_ErrorCode VideoOutputStop(int useCaseCode); // 停止录像输出。 100 Camera_ErrorCode SessionAddInput(int useCaseCode); // 添加相机输入。。 101 Camera_ErrorCode VideoOutputRelease(int useCaseCode); // 释放录像输出。。 102 Camera_ErrorCode SessionRemoveVideoOutput(int useCaseCode); // 删除录像输出。。 103 Camera_ErrorCode SessionRemoveInput(int useCaseCode); // 删除相机输入。。 104 Camera_ErrorCode SessionAddPreviewOutput(int useCaseCode); // 添加预览输出。。 105 Camera_ErrorCode SessionAddPhotoOutput(int useCaseCode); // 添加拍照输出。。 106 Camera_ErrorCode SessionBegin(int useCaseCode); // 开始捕获会话配置。。 107 Camera_ErrorCode SessionCommitConfig(int useCaseCode); // 提交捕获会话配置。 108 Camera_ErrorCode SessionStart(int useCaseCode); // 启动捕获会话配置。 109 Camera_ErrorCode SessionStop(int useCaseCode); // 停止捕获会话。 110 Camera_ErrorCode SessionRelease(int useCaseCode); // 释放捕获会话。 111 Camera_ErrorCode IsCameraMuted(int useCaseCode); // 确定相机是否静音。 112 Camera_ErrorCode SessionGetExposureBias(int useCaseCode); // 获取当前曝光补偿。 113 Camera_ErrorCode SessionGetExposureBiasRange(int useCaseCode); // 获取当前曝光补偿区间。 114 Camera_ErrorCode SessionGetExposureMode(int useCaseCode); // 获取当前曝光补偿区间。 115 Camera_ErrorCode SessionSetExposureBias(float exposureBias, int useCaseCode); // 设置曝光补偿。 116 Camera_ErrorCode SessionIsExposureModeSupported(uint32_t mode, int useCaseCode); // 检查是否支持指定的曝光模式 117 Camera_ErrorCode SessionSetExposureMode(uint32_t mode, int useCaseCode); // 设置曝光模式 118 Camera_ErrorCode SessionIsFlashModeSupported(uint32_t mode, int useCaseCode); // 检测闪光灯模式是否支持 119 Camera_ErrorCode SessionSetFlashMode(uint32_t mode, int useCaseCode); // 设置闪光灯模式 120 Camera_ErrorCode SessionIsVideoStabilizationModeSupported(uint32_t mode, 121 int useCaseCode); // 检查是否支持指定的录像防抖模式 122 Camera_ErrorCode SessionIsFocusModeSupported(uint32_t mode, int useCaseCode); // 检查是否支持指定的聚焦模式 123 Camera_ErrorCode SessionSetVideoStabilizationMode(uint32_t mode, int useCaseCode); // 设置录像防抖模式 124 Camera_ErrorCode SessionHasFlash(int useCaseCode); // 检测是否有闪关灯 125 Camera_ErrorCode SessionGetFlashMode(int useCaseCode); // 获取当前闪光灯模式 126 Camera_ErrorCode SessionGetFocusMode(int useCaseCode); // 获取当前聚焦模式 127 Camera_ErrorCode SessionGetFocusPoint(int useCaseCode); // 获取当前聚焦模式。 128 Camera_ErrorCode SessionGetMeteringPoint(int useCaseCode); // 获取当前测量点。 129 Camera_ErrorCode SessionGetZoomRatio(int useCaseCode); // 获取当前缩放比例。 130 Camera_ErrorCode SessionGetZoomRatioRange(int useCaseCode); // 获取所有支持的缩放比例范围。 131 Camera_ErrorCode SessionGetVideoStabilizationMode(int useCaseCode); // 获取当前录像防抖模式。 132 Camera_ErrorCode SessionRemovePreviewOutput(int useCaseCode); // 删除预览输出。 133 Camera_ErrorCode SessionRemovePhotoOutput(int useCaseCode); // 删除拍照输出。 134 Camera_ErrorCode SessionSetZoomRatio(float zoom, int useCaseCode); // 设置缩放比例。 135 Camera_ErrorCode SessionSetFocusPoint(double point_x, double point_y, int useCaseCode); // 设置聚焦模式。 136 Camera_ErrorCode SessionSetMeteringPoint(double point_x, double point_y, int useCaseCode); // 设置聚焦模式。 137 Camera_ErrorCode PreviewOutputStart(int useCaseCode); // 开始预览输出 138 Camera_ErrorCode PreviewOutputStop(int useCaseCode); // 停止预览输出 139 Camera_ErrorCode PreviewOutputRelease(int useCaseCode); // 停止预览输出 140 Camera_ErrorCode IsMirrorSupported(int useCaseCode); // 检查是否支持镜像拍照 141 Camera_ErrorCode EnableMirror(int useCaseCode); // 是否启用镜像拍照 142 Camera_ErrorCode PhotoOutputCapture(int useCaseCode); // 拍摄照片 143 Camera_ErrorCode PhotoOutputRelease(int useCaseCode); // 释放拍照输出 144 Camera_ErrorCode TakePictureWithPhotoSettings(Camera_PhotoCaptureSetting photoSetting, 145 int useCaseCode); // 使用捕获设置捕获拍照 146 // RegisterCallback 147 Camera_ErrorCode CameraManagerRegisterCallback(int useCaseCode); // 注册相机状态更改事件回调。 148 Camera_ErrorCode PreviewOutputRegisterCallback(int useCaseCode); // 注册预览输出更改事件回调。 149 Camera_ErrorCode CameraInputRegisterCallback(int useCaseCode); // 注册相机输入更改事件回调。 150 Camera_ErrorCode CaptureSessionRegisterCallback(int useCaseCode); // 注册捕获会话事件回调 151 Camera_ErrorCode VideoOutputRegisterCallback(int useCaseCode); // 注册录像输出更改事件回调 152 Camera_ErrorCode PhotoOutputRegisterCallback(int useCaseCode); // 注册拍照输出更改事件回调 153 // UnRegisterCallback。 154 Camera_ErrorCode CameraManagerUnRegisterCallback(int useCaseCode); // 注销预览输出更改事件回调 155 Camera_ErrorCode CaptureSessionUnRegisterCallback(int useCaseCode); // 注销捕获会话事件回调 156 Camera_ErrorCode CameraInputUnRegisterCallback(int useCaseCode); // 注销相机输入更改事件回调。 157 Camera_ErrorCode PhotoOutputUnRegisterCallback(int useCaseCode); // 注销拍照输出更改事件回调 158 Camera_ErrorCode PreviewOutputUnRegisterCallback(int useCaseCode); // 159 Camera_ErrorCode VideoOutputUnRegisterCallback(int useCaseCode); // 注销录像输出更改事件回调 160 // Get callback 161 CameraManager_Callbacks *GetCameraManagerListener(void); // 相机状态监听 162 PreviewOutput_Callbacks *GetPreviewOutputListener(void); // 预览输出更改事件监听 163 CameraInput_Callbacks *GetCameraInputListener(void); // 注册相机输入更改事件监听 164 CaptureSession_Callbacks *GetCaptureSessionRegister(void); // 注册捕获会话事件监听 165 VideoOutput_Callbacks *GetVideoOutputListener(void); // 注册录像监听 166 PhotoOutput_Callbacks *GetPhotoOutputListener(void); // 注册拍照输出监听 167 168 private: 169 Camera_Manager *cameraManager_; // CameraManager实例。 170 Camera_CaptureSession *captureSession_; 171 uint32_t size_; // 记录支持的Camera_Device列表的大小。 172 const Camera_Profile *profile_; 173 const Camera_VideoProfile *vProfile_; 174 Camera_PreviewOutput *previewOutput_; // 预览输出实例 175 Camera_PhotoOutput *photoOutput_; 176 Camera_VideoOutput *videoOutput_; 177 const Camera_MetadataObjectType *metaDataObjectType_; // 用于创建Camera_MetadataOutput 178 Camera_MetadataOutput *metadataOutput_; 179 Camera_Input *cameraInput_; 180 bool *isCameraMuted_; // 确定相机是否静音。 181 char *previewSurfaceId_; // 用于创建Camera_PreviewOutput。 182 Camera_ErrorCode ret_; // 错误码 183 float step_; // 每个级别之间的曝光补偿阶梯 184 185 volatile bool valid_; // CameraManager实例是否存在。 186 }; 187 188 189 #endif // OHCAMERANDK_CAMERA_MANAGER_H 190