• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2020 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 OHOS_CAMERA_CAMERA_DEMO_H
17 #define OHOS_CAMERA_CAMERA_DEMO_H
18 
19 #include <vector>
20 #include <map>
21 #include <iostream>
22 #include <hdf_log.h>
23 #include <surface.h>
24 #include <sys/time.h>
25 #include <ctime>
26 #include <display_type.h>
27 #include "camera.h"
28 #include "camera_metadata_info.h"
29 #include "ibuffer.h"
30 #include "v1_0/ioffline_stream_operator.h"
31 #include "v1_0/icamera_host.h"
32 #include "camera_host_callback.h"
33 #include "camera_device_callback.h"
34 #include "v1_0/icamera_device.h"
35 #include "stream_operator_callback.h"
36 #include "v1_0/istream_operator_callback.h"
37 #include "stream_customer.h"
38 #include "securec.h"
39 #include "project_camera_demo.h"
40 #ifdef CAMERA_BUILT_ON_OHOS_LITE
41 #include "camera_device.h"
42 #include "camera_host.h"
43 #include "stream_operator.h"
44 #else
45 #include "if_system_ability_manager.h"
46 #include "iservice_registry.h"
47 #include "v1_0/camera_host_proxy.h"
48 #endif
49 
50 namespace OHOS::Camera {
51 using namespace OHOS::HDI::Camera::V1_0;
52 
53 enum CaptureMode {
54     CAPTURE_PREVIEW = 0,
55     CAPTURE_SNAPSHOT,
56     CAPTURE_VIDEO,
57 };
58 
59 enum DemoActionID {
60     STREAM_ID_PREVIEW = 1001,
61     STREAM_ID_CAPTURE,
62     STREAM_ID_VIDEO,
63     CAPTURE_ID_PREVIEW = 2001,
64     CAPTURE_ID_CAPTURE,
65     CAPTURE_ID_VIDEO,
66 };
67 
68 class DemoCameraHostCallback;
69 class OhosCameraDemo {
70 public:
71     OhosCameraDemo();
72     ~OhosCameraDemo();
73 
74     RetCode InitCameraDevice();
75     void ReleaseCameraDevice();
76     RetCode InitSensors();
77 
78     RetCode StartPreviewStream();
79     RetCode StartCaptureStream();
80     RetCode StartVideoStream();
81     RetCode StartDualStreams(const int streamIdSecond);
82 
83     RetCode ReleaseAllStream();
84 
85     RetCode CaptureOnDualStreams(const int streamIdSecond);
86     RetCode CaptureON(const int streamId, const int captureId, CaptureMode mode);
87     RetCode CaptureOff(const int captureId, const CaptureMode mode);
88 
89     void SetAwbMode(const int mode) const;
90     void SetAeExpo();
91     void SetMetadata();
92     void SetEnableResult();
93     void FlashlightOnOff(bool onOff);
94 
95     RetCode StreamOffline(const int streamId);
96 
97     void QuitDemo();
98 
99 private:
100     void SetStreamInfo(StreamInfo& streamInfo,
101         const std::shared_ptr<StreamCustomer>& streamCustomer,
102         const int streamId, const StreamIntent intent);
103     void GetStreamOpt();
104 
105     RetCode CreateStream(const int streamId, std::shared_ptr<StreamCustomer> &streamCustomer,
106         StreamIntent intent);
107     RetCode CreateStreams(const int streamIdSecond, StreamIntent intent);
108 
109     void StoreImage(const void *bufStart, const uint32_t size) const;
110     void StoreVideo(const void *bufStart, const uint32_t size) const;
111     void OpenVideoFile();
112 
113     RetCode GetFaceDetectMode(std::shared_ptr<CameraAbility> &ability);
114     RetCode GetFocalLength(std::shared_ptr<CameraAbility> &ability);
115     RetCode GetAvailableFocusModes(std::shared_ptr<CameraAbility> &ability);
116     RetCode GetAvailableExposureModes(std::shared_ptr<CameraAbility> &ability);
117     RetCode GetExposureCompensationRange(std::shared_ptr<CameraAbility> &ability);
118     RetCode GetExposureCompensationSteps(std::shared_ptr<CameraAbility> &ability);
119     RetCode GetAvailableMeterModes(std::shared_ptr<CameraAbility> &ability);
120     RetCode GetAvailableFlashModes(std::shared_ptr<CameraAbility> &ability);
121     RetCode GetMirrorSupported(std::shared_ptr<CameraAbility> &ability);
122     RetCode GetStreamBasicConfigurations(std::shared_ptr<CameraAbility> &ability);
123     RetCode GetFpsRange(std::shared_ptr<CameraAbility> &ability);
124     RetCode GetCameraPosition(std::shared_ptr<CameraAbility> &ability);
125     RetCode GetCameraType(std::shared_ptr<CameraAbility> &ability);
126     RetCode GetCameraConnectionType(std::shared_ptr<CameraAbility> &ability);
127     RetCode GetFaceDetectMaxNum(std::shared_ptr<CameraAbility> &ability);
128 
129     bool aeStatus_ = true;
130     int videoFd_ = -1;
131     unsigned int isPreviewOn_ = 0;
132     unsigned int isCaptureOn_ = 0;
133     unsigned int isVideoOn_ = 0;
134 
135     uint8_t captureQuality_ = 0;
136     int32_t captureOrientation_ = 0;
137     uint8_t mirrorSwitch_ = 0;
138     std::vector<double> gps_;
139     CaptureInfo captureInfo_;
140 
141     std::shared_ptr<StreamCustomer> streamCustomerPreview_ = nullptr;
142     std::shared_ptr<StreamCustomer> streamCustomerCapture_ = nullptr;
143     std::shared_ptr<StreamCustomer> streamCustomerVideo_ = nullptr;
144     std::shared_ptr<CameraAbility> ability_ = nullptr;
145     std::shared_ptr<CameraSetting> captureSetting_ = nullptr;
146     std::mutex metaDatalock_;
147     std::vector<uint8_t> cameraAbility_;
148 
149 #ifdef CAMERA_BUILT_ON_OHOS_LITE
150     std::shared_ptr<DemoCameraHostCallback> hostCallback_ = nullptr;
151     std::shared_ptr<IStreamOperator> streamOperator_ = nullptr;
152     std::shared_ptr<CameraHost> demoCameraHost_ = nullptr;
153     std::shared_ptr<ICameraDevice> demoCameraDevice_ = nullptr;
154 #else
155     OHOS::sptr<DemoCameraHostCallback> hostCallback_ = nullptr;
156     OHOS::sptr<IStreamOperator> streamOperator_ = nullptr;
157     OHOS::sptr<ICameraHost> demoCameraHost_ = nullptr;
158     OHOS::sptr<ICameraDevice> demoCameraDevice_ = nullptr;
159 #endif
160     std::vector<std::string> cameraIds_ = {};
161 };
162 #ifdef CAMERA_BUILT_ON_OHOS_LITE
163 
164 #else
165 class DemoCameraDeviceCallback : public ICameraDeviceCallback {
166 public:
167     DemoCameraDeviceCallback() = default;
168     virtual ~DemoCameraDeviceCallback() = default;
169     int32_t OnError(ErrorType type, int32_t errorCode) override;
170     int32_t OnResult(uint64_t timestamp, const std::vector<uint8_t>& result) override;
171 };
172 
173 class DemoCameraHostCallback : public ICameraHostCallback {
174 public:
175     DemoCameraHostCallback() = default;
176     virtual ~DemoCameraHostCallback() = default;
177 
178 public:
179     int32_t OnCameraStatus(const std::string& cameraId, CameraStatus status) override;
180 
181     int32_t OnFlashlightStatus(const std::string& cameraId, FlashlightStatus status) override;
182 
183     int32_t OnCameraEvent(const std::string& cameraId, CameraEvent event) override;
184 };
185 
186 class DemoStreamOperatorCallback : public IStreamOperatorCallback {
187 public:
188     DemoStreamOperatorCallback() = default;
189     virtual ~DemoStreamOperatorCallback() = default;
190 
191 public:
192     int32_t OnCaptureStarted(int32_t captureId, const std::vector<int32_t>& streamIds) override;
193     int32_t OnCaptureEnded(int32_t captureId, const std::vector<CaptureEndedInfo>& infos) override;
194     int32_t OnCaptureError(int32_t captureId, const std::vector<CaptureErrorInfo>& infos) override;
195     int32_t OnFrameShutter(int32_t captureId, const std::vector<int32_t>& streamIds, uint64_t timestamp) override;
196 };
197 
198 #endif
199 } // namespace OHOS::Camera
200 #endif // OHOS_CAMERA_CAMERA_DEMO_H
201