• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 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 CAMERA_NDK_CAMERA_H
17 #define CAMERA_NDK_CAMERA_H
18 
19 #include <unistd.h>
20 #include <string>
21 #include <thread>
22 #include <cstdio>
23 #include <fcntl.h>
24 #include <map>
25 #include <string>
26 #include <vector>
27 #include <native_buffer/native_buffer.h>
28 #include "iostream"
29 #include "mutex"
30 
31 #include "hilog/log.h"
32 #include "ohcamera/camera.h"
33 #include "ohcamera/camera_input.h"
34 #include "ohcamera/capture_session.h"
35 #include "ohcamera/photo_output.h"
36 #include "ohcamera/preview_output.h"
37 #include "ohcamera/video_output.h"
38 #include "napi/native_api.h"
39 #include "ohcamera/camera_manager.h"
40 
41 namespace OHOS_CAMERA_SAMPLE {
42 class NDKCamera {
43   public:
44     ~NDKCamera();
45     NDKCamera(char *str, uint32_t focusMode, uint32_t cameraDeviceIndex);
46 
Destroy()47     static void Destroy()
48     {
49         if (ndkCamera_ != nullptr) {
50             delete ndkCamera_;
51             ndkCamera_ = nullptr;
52         }
53     }
54 
55     Camera_ErrorCode CreateCameraInput(void);
56     Camera_ErrorCode CameraInputOpen(void);
57     Camera_ErrorCode CameraInputClose(void);
58     Camera_ErrorCode CameraInputRelease(void);
59     Camera_ErrorCode GetSupportedCameras(void);
60     Camera_ErrorCode GetSupportedOutputCapability(void);
61     Camera_ErrorCode CreatePreviewOutput(void);
62     Camera_ErrorCode CreatePhotoOutput(char *photoId);
63     Camera_ErrorCode CreateVideoOutput(char *videoId);
64     Camera_ErrorCode CreateMetadataOutput(void);
65     Camera_ErrorCode IsCameraMuted(void);
66     Camera_ErrorCode PreviewOutputStop(void);
67     Camera_ErrorCode PreviewOutputRelease(void);
68     Camera_ErrorCode PhotoOutputRelease(void);
69     Camera_ErrorCode HasFlashFn(uint32_t mode);
70     Camera_ErrorCode IsVideoStabilizationModeSupportedFn(uint32_t mode);
71     Camera_ErrorCode setZoomRatioFn(uint32_t zoomRatio);
72     Camera_ErrorCode SessionFlowFn(void);
73     Camera_ErrorCode SessionBegin(void);
74     Camera_ErrorCode SessionCommitConfig(void);
75     Camera_ErrorCode SessionStart(void);
76     Camera_ErrorCode SessionStop(void);
77     Camera_ErrorCode StartVideo(char *videoId, char *photoId);
78     Camera_ErrorCode AddVideoOutput(void);
79     Camera_ErrorCode AddPhotoOutput();
80     Camera_ErrorCode VideoOutputStart(void);
81     Camera_ErrorCode StartPhoto(char *mSurfaceId);
82     Camera_ErrorCode IsExposureModeSupportedFn(uint32_t mode);
83     Camera_ErrorCode IsMeteringPoint(int x, int y);
84     Camera_ErrorCode IsExposureBiasRange(int exposureBias);
85     Camera_ErrorCode IsFocusMode(uint32_t mode);
86     Camera_ErrorCode IsFocusPoint(float x, float y);
87     Camera_ErrorCode IsFocusModeSupported(uint32_t mode);
88     Camera_ErrorCode ReleaseCamera(void);
89     Camera_ErrorCode SessionRealese(void);
90     Camera_ErrorCode ReleaseSession(void);
91     int32_t GetVideoFrameWidth(void);
92     int32_t GetVideoFrameHeight(void);
93     int32_t GetVideoFrameRate(void);
94     Camera_ErrorCode VideoOutputStop(void);
95     Camera_ErrorCode VideoOutputRelease(void);
96     Camera_ErrorCode TakePicture(void);
97     Camera_ErrorCode TakePictureWithPhotoSettings(Camera_PhotoCaptureSetting photoSetting);
98     // callback
99     Camera_ErrorCode CameraManagerRegisterCallback(void);
100     Camera_ErrorCode CameraInputRegisterCallback(void);
101     Camera_ErrorCode PreviewOutputRegisterCallback(void);
102     Camera_ErrorCode PhotoOutputRegisterCallback(void);
103     Camera_ErrorCode VideoOutputRegisterCallback(void);
104     Camera_ErrorCode MetadataOutputRegisterCallback(void);
105     Camera_ErrorCode CaptureSessionRegisterCallback(void);
106 
107     // Get callback
108     CameraManager_Callbacks *GetCameraManagerListener(void);
109     CameraInput_Callbacks *GetCameraInputListener(void);
110     PreviewOutput_Callbacks *GetPreviewOutputListener(void);
111     PhotoOutput_Callbacks *GetPhotoOutputListener(void);
112     VideoOutput_Callbacks *GetVideoOutputListener(void);
113     MetadataOutput_Callbacks *GetMetadataOutputListener(void);
114     CaptureSession_Callbacks *GetCaptureSessionRegister(void);
115 
116   private:
117     NDKCamera(const NDKCamera &) = delete;
118     NDKCamera &operator=(const NDKCamera &) = delete;
119     uint32_t cameraDeviceIndex_;
120     Camera_Manager *cameraManager_;
121     Camera_CaptureSession *captureSession_;
122     Camera_Device *cameras_;
123     uint32_t size_;
124     Camera_OutputCapability *cameraOutputCapability_;
125     const Camera_Profile *profile_;
126     const Camera_VideoProfile *videoProfile_;
127     Camera_PreviewOutput *previewOutput_;
128     Camera_PhotoOutput *photoOutput_;
129     Camera_VideoOutput *videoOutput_;
130     const Camera_MetadataObjectType *metaDataObjectType_;
131     Camera_MetadataOutput *metadataOutput_;
132     Camera_Input *cameraInput_;
133     bool *isCameraMuted_;
134     Camera_Position position_;
135     Camera_Type type_;
136     char *previewSurfaceId_;
137     char *photoSurfaceId_;
138     Camera_ErrorCode ret_;
139     uint32_t takePictureTimes = 0;
140     Camera_ExposureMode exposureMode_;
141     bool isExposureModeSupported_;
142     bool isFocusModeSupported_;
143     float minExposureBias_;
144     float maxExposureBias_;
145     float step_;
146     uint32_t focusMode_;
147 
148     static NDKCamera *ndkCamera_;
149     static std::mutex mtx_;
150     volatile bool valid_;
151 };
152 } // namespace OHOS_CAMERA_SAMPLE
153 #endif // CAMERA_NDK_CAMERA_H
154