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