• 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_MANAGER_ADAPTER_IMPL_H
17 #define CAMERA_MANAGER_ADAPTER_IMPL_H
18 
19 #include "camera_manager_adapter.h"
20 #include "camera_manager.h"
21 
22 
23 #include <cstdio>
24 #include <fcntl.h>
25 #include <securec.h>
26 #include <sys/time.h>
27 #include <unistd.h>
28 
29 namespace OHOS::NWeb {
30 using namespace OHOS::CameraStandard;
31 
32 enum class SurfaceType {
33     INVALID = 0,
34     PREVIEW,
35     SECOND_PREVIEW,
36     PHOTO,
37     VIDEO
38 };
39 
40 class CameraSurfaceListener;
41 
42 class CameraSurfaceBufferAdapterImpl : public CameraSurfaceBufferAdapter {
43 public:
44     explicit CameraSurfaceBufferAdapterImpl(sptr<SurfaceBuffer> buffer);
45 
46     ~CameraSurfaceBufferAdapterImpl() override = default;
47 
48     int32_t GetFileDescriptor() const override;
49 
50     int32_t GetWidth() const override;
51 
52     int32_t GetHeight() const override;
53 
54     int32_t GetStride() const override;
55 
56     int32_t GetFormat() const override;
57 
58     uint32_t GetSize() const override;
59 
60     uint8_t* GetBufferAddr() override;
61 
62     sptr<SurfaceBuffer>& GetBuffer();
63 
64 private:
65     sptr<SurfaceBuffer> buffer_ = nullptr;
66 };
67 
68 class CameraManagerAdapterCallback : public CameraManagerCallback {
69 public:
70     explicit CameraManagerAdapterCallback(std::shared_ptr<CameraStatusCallbackAdapter> callback);
71     ~CameraManagerAdapterCallback() = default;
72     void OnCameraStatusChanged(const CameraStatusInfo &cameraStatusInfo) const override;
73     void OnFlashlightStatusChanged(const std::string &cameraID,
74                                    const FlashStatus flashStatus) const override;
75 
76 private:
77     CameraStatusAdapter GetAdapterCameraStatus(CameraStatus status) const;
78     std::shared_ptr<CameraStatusCallbackAdapter> statusCallback_;
79 };
80 
81 class CameraManagerAdapterImpl : public CameraManagerAdapter {
82 public:
83     static CameraManagerAdapterImpl& GetInstance();
84     CameraManagerAdapterImpl() = default;
85 
86     ~CameraManagerAdapterImpl() override = default;
87 
88     int32_t Create(std::shared_ptr<CameraStatusCallbackAdapter> cameraStatusCallback) override;
89 
90     void GetDevicesInfo(std::vector<VideoDeviceDescriptor> &devicesDiscriptor) override;
91 
92     int32_t ReleaseCameraManger() override;
93 
94     int32_t GetExposureModes(std::vector<ExposureModeAdapter>& exposureModesAdapter) override;
95 
96     int32_t GetCurrentExposureMode(ExposureModeAdapter& exposureModeAdapter) override;
97 
98     int32_t GetCaptionRangeById(RangeIDAdapter rangeId, VideoCaptureRangeAdapter& rangeVal) override;
99 
100     bool IsFocusModeSupported(FocusModeAdapter focusMode) override;
101 
102     FocusModeAdapter GetCurrentFocusMode() override;
103 
104     bool IsFlashModeSupported(FlashModeAdapter flashMode) override;
105 
106     int32_t RestartSession() override;
107 
108     int32_t StopSession(CameraStopType stopType) override;
109 
110     CameraStatusAdapter GetCameraStatus() override;
111 
112     bool IsExistCaptureTask() override;
113 
114     int32_t StartStream(const std::string &deviceId,
115         const VideoCaptureParamsAdapter &captureParams,
116         std::shared_ptr<CameraBufferListenerAdapter> listener) override;
117 
118     void SetForegroundFlag(bool isForeground) override;
119 
120     void SetCameraStatus(CameraStatusAdapter status) override;
121 
122 private:
123     VideoTransportType GetCameraTransportType(ConnectionType connectType);
124     VideoFacingModeAdapter GetCameraFacingMode(CameraPosition position);
125     std::vector<FormatAdapter> GetCameraSupportFormats(sptr<CameraOutputCapability> outputcapability);
126     VideoPixelFormatAdapter TransToAdapterCameraFormat(CameraFormat format);
127     ExposureModeAdapter GetAdapterExposureMode(ExposureMode exportMode);
128     CameraFormat TransToOriCameraFormat(VideoPixelFormatAdapter format);
129     int32_t TransToAdapterExposureModes(
130         std::vector<ExposureMode>& exposureModes,
131         std::vector<ExposureModeAdapter>& exposureModesAdapter);
132     int32_t GetExposureCompensation(VideoCaptureRangeAdapter& rangeVal);
133     FocusMode GetOriFocusMode(FocusModeAdapter focusMode);
134     FocusModeAdapter GetAdapterFocusMode(FocusMode focusMode);
135     FlashMode GetOriFlashMode(FlashModeAdapter flashMode);
136     int32_t ReleaseSession();
137     int32_t ReleaseSessionResource(const std::string &deviceId);
138     int32_t InitCameraInput(const std::string &deviceId);
139     int32_t InitPreviewOutput(const VideoCaptureParamsAdapter &captureParams,
140         std::shared_ptr<CameraBufferListenerAdapter> listener);
141     int32_t CreateAndStartSession();
142     sptr<CameraManager> cameraManager_;
143     sptr<CaptureSession> captureSession_;
144     sptr<CaptureInput> cameraInput_;
145     sptr<IConsumerSurface> previewSurface_;
146     sptr<CameraSurfaceListener> previewSurfaceListener_;
147     sptr<CaptureOutput> previewOutput_;
148     std::string deviceId_;
149     VideoCaptureParamsAdapter captureParams_;
150     std::shared_ptr<CameraBufferListenerAdapter> listener_;
151     const int32_t DEFAULT_FRAME_RATE = 30;
152     const uint32_t RANGE_MAX_SIZE = 2;
153     const uint32_t RANGE_MIN_INDEX = 0;
154     const uint32_t RANGE_MAX_INDEX = 1;
155     CameraStatusAdapter status_ = CameraStatusAdapter::AVAILABLE;
156     std::mutex mutex_;
157     bool inputInitedFlag_ = false;
158     bool isCapturing_ = false;
159     bool isForegound_ = false;
160     std::mutex restart_mutex_;
161     std::shared_ptr<CameraManagerAdapterCallback> cameraMngrCallback_;
162 };
163 
164 class CameraSurfaceListener : public IBufferConsumerListener {
165 public:
166     CameraSurfaceListener(SurfaceType surfaceType,
167                     sptr<IConsumerSurface> surface,
168                     std::shared_ptr<CameraBufferListenerAdapter> listener);
169     virtual ~CameraSurfaceListener() = default;
170     void OnBufferAvailable() override;
171 
172 private:
173     CameraRotationInfo GetRotationInfo(GraphicTransformType transform);
174     CameraRotationInfo FillRotationInfo(int roration, bool isFlipX, bool isFlipY);
175     SurfaceType surfaceType_;
176     sptr<IConsumerSurface> surface_;
177     std::shared_ptr<CameraBufferListenerAdapter> listener_ = nullptr;
178     const int32_t ROTATION_0 = 0;
179     const int32_t ROTATION_90 = 90;
180     const int32_t ROTATION_180 = 180;
181     const int32_t ROTATION_270 = 270;
182 };
183 
184 class CameraSurfaceAdapterImpl : public CameraSurfaceAdapter {
185 public:
186     CameraSurfaceAdapterImpl();
187 
188     CameraSurfaceAdapterImpl(sptr<IConsumerSurface> surface);
189 
190     ~CameraSurfaceAdapterImpl() = default;
191 
192     int32_t ReleaseBuffer(std::unique_ptr<CameraSurfaceBufferAdapter> bufferAdapter, int32_t fence) override;
193 
194 private:
195     sptr<IConsumerSurface> cSurface_ = nullptr;
196 };
197 
198 }  // namespace OHOS::NWeb
199 
200 #endif // CAMERA_MANAGER_ADAPTER_IMPL_H