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