1 /* 2 * Copyright (c) 2022-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 "surface_buffer.h" 28 #include <native_buffer/native_buffer.h> 29 #include "iostream" 30 #include "mutex" 31 32 #include "multimedia/camera_framework/camera.h" 33 #include "multimedia/camera_framework/camera_input.h" 34 #include "multimedia/camera_framework/capture_session.h" 35 #include "multimedia/camera_framework/photo_output.h" 36 #include "multimedia/camera_framework/preview_output.h" 37 #include "multimedia/camera_framework/video_output.h" 38 #include "napi/native_api.h" 39 #include "multimedia/camera_framework/camera_manager.h" 40 41 namespace OHOS_NDK_CAMERA { 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 void EnumerateCamera(void); 56 Camera_ErrorCode CreateCameraInput(void); 57 Camera_ErrorCode CameraInputOpen(void); 58 Camera_ErrorCode CameraInputClose(void); 59 Camera_ErrorCode CameraInputRelease(void); 60 Camera_ErrorCode GetSupportedCameras(void); 61 Camera_ErrorCode GetSupportedOutputCapability(void); 62 Camera_ErrorCode CreatePreviewOutput(void); 63 Camera_ErrorCode CreatePhotoOutput(char* photoId); 64 Camera_ErrorCode CreateVideoOutput(char* videoId); 65 Camera_ErrorCode CreateMetadataOutput(void); 66 Camera_ErrorCode IsCameraMuted(void); 67 Camera_ErrorCode PreviewOutputStop(void); 68 Camera_ErrorCode PreviewOutputRelease(void); 69 Camera_ErrorCode PhotoOutputRelease(void); 70 Camera_ErrorCode HasFlashFn(uint32_t mode); 71 Camera_ErrorCode IsVideoStabilizationModeSupportedFn(uint32_t mode); 72 Camera_ErrorCode setZoomRatioFn(uint32_t zoomRatio); 73 Camera_ErrorCode SessionFlowFn(void); 74 Camera_ErrorCode SessionBegin(void); 75 Camera_ErrorCode SessionCommitConfig(void); 76 Camera_ErrorCode SessionStart(void); 77 Camera_ErrorCode SessionStop(void); 78 Camera_ErrorCode StartVideo(char* videoId, char* photoId); 79 Camera_ErrorCode AddVideoOutput(void); 80 Camera_ErrorCode AddPhotoOutput(); 81 Camera_ErrorCode VideoOutputStart(void); 82 Camera_ErrorCode StartPhoto(char* mSurfaceId); 83 Camera_ErrorCode IsExposureModeSupportedFn(uint32_t mode); 84 Camera_ErrorCode IsMeteringPoint(int x, int y); 85 Camera_ErrorCode IsExposureBiasRange(int exposureBias); 86 Camera_ErrorCode IsFocusMode(uint32_t mode); 87 Camera_ErrorCode IsFocusPoint(float x, float y); 88 Camera_ErrorCode IsFocusModeSupported(uint32_t mode); 89 Camera_ErrorCode ReleaseCamera(void); 90 Camera_ErrorCode SessionRealese(void); 91 Camera_ErrorCode ReleaseSession(void); 92 int32_t GetVideoFrameWidth(void); 93 int32_t GetVideoFrameHeight(void); 94 int32_t GetVideoFrameRate(void); 95 Camera_ErrorCode VideoOutputStop(void); 96 Camera_ErrorCode VideoOutputRelease(void); 97 Camera_ErrorCode TakePicture(void); 98 Camera_ErrorCode TakePictureWithPhotoSettings(Camera_PhotoCaptureSetting photoSetting); 99 // callback 100 Camera_ErrorCode CameraManagerRegisterCallback(void); 101 Camera_ErrorCode CameraInputRegisterCallback(void); 102 Camera_ErrorCode PreviewOutputRegisterCallback(void); 103 Camera_ErrorCode PhotoOutputRegisterCallback(void); 104 Camera_ErrorCode VideoOutputRegisterCallback(void); 105 Camera_ErrorCode MetadataOutputRegisterCallback(void); 106 Camera_ErrorCode CaptureSessionRegisterCallback(void); 107 108 // Get callback 109 CameraManager_Callbacks* GetCameraManagerListener(void); 110 CameraInput_Callbacks* GetCameraInputListener(void); 111 PreviewOutput_Callbacks* GetPreviewOutputListener(void); 112 PhotoOutput_Callbacks* GetPhotoOutputListener(void); 113 VideoOutput_Callbacks* GetVideoOutputListener(void); 114 MetadataOutput_Callbacks* GetMetadataOutputListener(void); 115 CaptureSession_Callbacks* GetCaptureSessionRegister(void); 116 117 private: 118 NDKCamera(const NDKCamera&) = delete; 119 NDKCamera& operator = (const NDKCamera&) = delete; 120 uint32_t cameraDeviceIndex_; 121 Camera_Manager* cameraManager_; 122 Camera_CaptureSession* captureSession_; 123 Camera_Device* cameras_; 124 uint32_t size_; 125 Camera_OutputCapability* cameraOutputCapability_; 126 const Camera_Profile* profile_; 127 const Camera_VideoProfile* videoProfile_; 128 Camera_PreviewOutput* previewOutput_; 129 Camera_PhotoOutput* photoOutput_; 130 Camera_VideoOutput* videoOutput_; 131 const Camera_MetadataObjectType* metaDataObjectType_; 132 Camera_MetadataOutput* metadataOutput_; 133 Camera_Input* cameraInput_; 134 bool* isCameraMuted_; 135 Camera_Position position_; 136 Camera_Type type_; 137 char* previewSurfaceId_; 138 char* photoSurfaceId_; 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 static const uint32_t width_; 152 static const uint32_t height_; 153 }; 154 } // OHOS_NDK_CAMERA 155 #endif // CAMERA_NDK_CAMERA_H