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