• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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