1 /*
2  * Copyright (c) 2021-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 
16 #ifndef OHOS_CAMERA_CAPTURE_SESSION_H
17 #define OHOS_CAMERA_CAPTURE_SESSION_H
18 
19 #include <atomic>
20 #include <cstdint>
21 #include <iostream>
22 #include <map>
23 #include <memory>
24 #include <mutex>
25 #include <set>
26 #include <sstream>
27 #include <stdint.h>
28 #include <string>
29 #include <unordered_map>
30 #include <vector>
31 
32 #include "camera_error_code.h"
33 #include "camera_photo_proxy.h"
34 #include "capture_scene_const.h"
35 #include "color_space_info_parse.h"
36 #include "features/moon_capture_boost_feature.h"
37 #include "hcapture_session_callback_stub.h"
38 #include "hcamera_service_callback_stub.h"
39 #include "icamera_util.h"
40 #include "icapture_session.h"
41 #include "icapture_session_callback.h"
42 #include "input/camera_death_recipient.h"
43 #include "input/capture_input.h"
44 #include "output/camera_output_capability.h"
45 #include "output/capture_output.h"
46 #include "refbase.h"
47 #include "effect_suggestion_info_parse.h"
48 #include "capture_scene_const.h"
49 #include "ability/camera_ability.h"
50 #include "ability/camera_ability_parse_util.h"
51 
52 namespace OHOS {
53 namespace CameraStandard {
54 enum FocusState {
55     FOCUS_STATE_SCAN = 0,
56     FOCUS_STATE_FOCUSED,
57     FOCUS_STATE_UNFOCUSED
58 };
59 
60 enum ExposureState {
61     EXPOSURE_STATE_SCAN = 0,
62     EXPOSURE_STATE_CONVERGED
63 };
64 
65 enum FilterType {
66     NONE = 0,
67     CLASSIC = 1,
68     DAWN = 2,
69     PURE = 3,
70     GREY = 4,
71     NATURAL = 5,
72     MORI = 6,
73     FAIR = 7,
74     PINK = 8,
75 };
76 
77 enum PreconfigType : int32_t {
78     PRECONFIG_720P = 0,
79     PRECONFIG_1080P = 1,
80     PRECONFIG_4K = 2,
81     PRECONFIG_HIGH_QUALITY = 3
82 };
83 
84 enum UsageType {
85     BOKEH = 0
86 };
87 
88 struct PreconfigProfiles {
89 public:
PreconfigProfilesPreconfigProfiles90     explicit PreconfigProfiles(ColorSpace colorSpace) : colorSpace(colorSpace) {}
91     Profile previewProfile;
92     Profile photoProfile;
93     VideoProfile videoProfile;
94     ColorSpace colorSpace;
95 
ToStringPreconfigProfiles96     std::string ToString()
97     {
98         std::ostringstream oss;
99         oss << "colorSpace:[" << to_string(colorSpace);
100         oss << "]\n";
101 
102         oss << "previewProfile:[";
103         oss << " format:" << to_string(previewProfile.format_);
104         oss << " size:" << to_string(previewProfile.size_.width) << "x" << to_string(previewProfile.size_.height);
105         oss << " fps:" << to_string(previewProfile.fps_.minFps) << "," << to_string(previewProfile.fps_.maxFps) << ","
106             << to_string(previewProfile.fps_.fixedFps);
107         oss << "]\n";
108 
109         oss << "photoProfile:[";
110         oss << " format:" << to_string(photoProfile.format_);
111         oss << " size:" << to_string(photoProfile.size_.width) << "x" << to_string(photoProfile.size_.height);
112         oss << " dynamic:" << to_string(photoProfile.sizeFollowSensorMax_) << "," << to_string(photoProfile.sizeRatio_);
113         oss << "]\n";
114 
115         oss << "videoProfile:[";
116         oss << " format:" << to_string(videoProfile.format_);
117         oss << " size:" << to_string(videoProfile.size_.width) << "x" << to_string(videoProfile.size_.height);
118         oss << " frameRates:";
119         for (auto& fps : videoProfile.framerates_) {
120             oss << to_string(fps) << " ";
121         }
122         oss << "]\n";
123         return oss.str();
124     }
125 };
126 
127 enum EffectSuggestionType {
128     EFFECT_SUGGESTION_NONE = 0,
129     EFFECT_SUGGESTION_PORTRAIT,
130     EFFECT_SUGGESTION_FOOD,
131     EFFECT_SUGGESTION_SKY,
132     EFFECT_SUGGESTION_SUNRISE_SUNSET
133 };
134 
135 typedef enum {
136     AWB_MODE_AUTO = 0,
137     AWB_MODE_CLOUDY_DAYLIGHT,
138     AWB_MODE_INCANDESCENT,
139     AWB_MODE_FLUORESCENT,
140     AWB_MODE_DAYLIGHT,
141     AWB_MODE_OFF,
142     AWB_MODE_LOCKED,
143     AWB_MODE_WARM_FLUORESCENT,
144     AWB_MODE_TWILIGHT,
145     AWB_MODE_SHADE,
146 } WhiteBalanceMode;
147 
148 enum LightPaintingType {
149     CAR = 0,
150     STAR,
151     WATER,
152     LIGHT
153 };
154 
155 typedef struct {
156     float x;
157     float y;
158 } Point;
159 
160 enum class FwkTripodStatus {
161     INVALID = 0,
162     ACTIVE,
163     ENTER,
164     EXITING
165 };
166 
167 typedef struct {
168     float zoomRatio;
169     int32_t equivalentFocalLength;
170 } ZoomPointInfo;
171 
172 template<class T>
173 struct RefBaseCompare {
174 public:
operatorRefBaseCompare175     bool operator()(const wptr<T>& firstPtr, const wptr<T>& secondPtr) const
176     {
177         return firstPtr.GetRefPtr() < secondPtr.GetRefPtr();
178     }
179 };
180 
181 class SessionCallback {
182 public:
183     SessionCallback() = default;
184     virtual ~SessionCallback() = default;
185     /**
186      * @brief Called when error occured during capture session callback.
187      *
188      * @param errorCode Indicates a {@link ErrorCode} which will give information for capture session callback error.
189      */
190     virtual void OnError(int32_t errorCode) = 0;
191 };
192 
193 class ExposureCallback {
194 public:
195     enum ExposureState {
196         SCAN = 0,
197         CONVERGED,
198     };
199     ExposureCallback() = default;
200     virtual ~ExposureCallback() = default;
201     virtual void OnExposureState(ExposureState state) = 0;
202 };
203 
204 class FocusCallback {
205 public:
206     enum FocusState {
207         SCAN = 0,
208         FOCUSED,
209         UNFOCUSED
210     };
211     FocusCallback() = default;
212     virtual ~FocusCallback() = default;
213     virtual void OnFocusState(FocusState state) = 0;
214     FocusState currentState;
215 };
216 
217 class MacroStatusCallback {
218 public:
219     enum MacroStatus { IDLE = 0, ACTIVE, UNKNOWN };
220     MacroStatusCallback() = default;
221     virtual ~MacroStatusCallback() = default;
222     virtual void OnMacroStatusChanged(MacroStatus status) = 0;
223     MacroStatus currentStatus = UNKNOWN;
224 };
225 
226 class MoonCaptureBoostStatusCallback {
227 public:
228     enum MoonCaptureBoostStatus { IDLE = 0, ACTIVE, UNKNOWN };
229     MoonCaptureBoostStatusCallback() = default;
230     virtual ~MoonCaptureBoostStatusCallback() = default;
231     virtual void OnMoonCaptureBoostStatusChanged(MoonCaptureBoostStatus status) = 0;
232     MoonCaptureBoostStatus currentStatus = UNKNOWN;
233 };
234 
235 class FeatureDetectionStatusCallback {
236 public:
237     enum FeatureDetectionStatus { IDLE = 0, ACTIVE, UNKNOWN };
238 
239     FeatureDetectionStatusCallback() = default;
240     virtual ~FeatureDetectionStatusCallback() = default;
241     virtual void OnFeatureDetectionStatusChanged(SceneFeature feature, FeatureDetectionStatus status) = 0;
242     virtual bool IsFeatureSubscribed(SceneFeature feature) = 0;
243 
UpdateStatus(SceneFeature feature,FeatureDetectionStatus status)244     inline bool UpdateStatus(SceneFeature feature, FeatureDetectionStatus status)
245     {
246         std::lock_guard<std::mutex> lock(featureStatusMapMutex_);
247         auto it = featureStatusMap_.find(feature);
248         if (it == featureStatusMap_.end()) {
249             featureStatusMap_[feature] = status;
250             return true;
251         } else if (it->second != status) {
252             it->second = status;
253             return true;
254         }
255         return false;
256     }
257 
SetFeatureStatus(int8_t featureStatus)258     inline void SetFeatureStatus(int8_t featureStatus)
259     {
260         featureStatus_ = featureStatus;
261     }
262 
GetFeatureStatus()263     inline int8_t GetFeatureStatus() const
264     {
265         return featureStatus_;
266     }
267 private:
268     std::atomic<int8_t> featureStatus_ = -1;
269     std::mutex featureStatusMapMutex_;
270     std::unordered_map<SceneFeature, FeatureDetectionStatus> featureStatusMap_;
271 };
272 
273 class CaptureSessionCallback : public HCaptureSessionCallbackStub {
274 public:
275     CaptureSession* captureSession_ = nullptr;
CaptureSessionCallback()276     CaptureSessionCallback() : captureSession_(nullptr) {}
277 
CaptureSessionCallback(CaptureSession * captureSession)278     explicit CaptureSessionCallback(CaptureSession* captureSession) : captureSession_(captureSession) {}
279 
~CaptureSessionCallback()280     ~CaptureSessionCallback()
281     {
282         captureSession_ = nullptr;
283     }
284 
285     int32_t OnError(int32_t errorCode) override;
286 };
287 
288 class SmoothZoomCallback {
289 public:
290     SmoothZoomCallback() = default;
291     virtual ~SmoothZoomCallback() = default;
292     virtual void OnSmoothZoom(int32_t duration) = 0;
293 };
294 
295 class AbilityCallback {
296 public:
297     AbilityCallback() = default;
298     virtual ~AbilityCallback() = default;
299     virtual void OnAbilityChange() = 0;
300 };
301 
302 struct ARStatusInfo {
303     std::vector<int32_t> laserData;
304     float lensFocusDistance;
305     int32_t sensorSensitivity;
306     uint32_t exposureDurationValue;
307     int64_t timestamp;
308 };
309 
310 class ARCallback {
311 public:
312     ARCallback() = default;
313     virtual ~ARCallback() = default;
314     virtual void OnResult(const ARStatusInfo &arStatusInfo) const = 0;
315 };
316 
317 class EffectSuggestionCallback {
318 public:
319     EffectSuggestionCallback() = default;
320     virtual ~EffectSuggestionCallback() = default;
321     virtual void OnEffectSuggestionChange(EffectSuggestionType effectSuggestionType) = 0;
322     bool isFirstReport = true;
323     EffectSuggestionType currentType = EffectSuggestionType::EFFECT_SUGGESTION_NONE;
324 };
325 
326 struct LcdFlashStatusInfo {
327     bool isLcdFlashNeeded;
328     int32_t lcdCompensation;
329 };
330 
331 class LcdFlashStatusCallback {
332 public:
333     LcdFlashStatusCallback() = default;
334     virtual ~LcdFlashStatusCallback() = default;
335     virtual void OnLcdFlashStatusChanged(LcdFlashStatusInfo lcdFlashStatusInfo) = 0;
SetLcdFlashStatusInfo(const LcdFlashStatusInfo lcdFlashStatusInfo)336     void SetLcdFlashStatusInfo(const LcdFlashStatusInfo lcdFlashStatusInfo)
337     {
338         std::lock_guard<std::mutex> lock(mutex_);
339         lcdFlashStatusInfo_ = lcdFlashStatusInfo;
340     }
GetLcdFlashStatusInfo()341     LcdFlashStatusInfo GetLcdFlashStatusInfo()
342     {
343         std::lock_guard<std::mutex> lock(mutex_);
344         return lcdFlashStatusInfo_;
345     }
346 
347 private:
348     LcdFlashStatusInfo lcdFlashStatusInfo_ = { .isLcdFlashNeeded = true, .lcdCompensation = -1 };
349     std::mutex mutex_;
350 };
351 
352 class AutoDeviceSwitchCallback {
353 public:
354     AutoDeviceSwitchCallback() = default;
355     virtual ~AutoDeviceSwitchCallback() = default;
356     virtual void OnAutoDeviceSwitchStatusChange(bool isDeviceSwitched, bool isDeviceCapabilityChanged) const = 0 ;
357 };
358 
359 class FoldCallback : public HFoldServiceCallbackStub {
360 public:
FoldCallback(wptr<CaptureSession> captureSession)361     explicit FoldCallback(wptr<CaptureSession> captureSession) : captureSession_(captureSession) {}
362     int32_t OnFoldStatusChanged(const FoldStatus status) override;
363 
364 private:
365     wptr<CaptureSession> captureSession_ = nullptr;
366 };
367 
368 struct EffectSuggestionStatus {
369     EffectSuggestionType type;
370     bool status;
371 };
372 
FloatIsEqual(float x,float y)373 inline bool FloatIsEqual(float x, float y)
374 {
375     const float EPSILON = 0.000001;
376     return std::fabs(x - y) < EPSILON;
377 }
378 
ConfusingNumber(float data)379 inline float ConfusingNumber(float data)
380 {
381     const float factor = 20;
382     return data * factor;
383 }
384 
385 class CaptureSession : public RefBase {
386 public:
387     class CaptureSessionMetadataResultProcessor : public MetadataResultProcessor {
388     public:
CaptureSessionMetadataResultProcessor(wptr<CaptureSession> session)389         explicit CaptureSessionMetadataResultProcessor(wptr<CaptureSession> session) : session_(session) {}
390         void ProcessCallbacks(
391             const uint64_t timestamp, const std::shared_ptr<OHOS::Camera::CameraMetadata>& result) override;
392 
393     private:
394         wptr<CaptureSession> session_;
395     };
396 
397     explicit CaptureSession(sptr<ICaptureSession>& captureSession);
398     virtual ~CaptureSession();
399 
400     /**
401      * @brief Begin the capture session config.
402      */
403     int32_t BeginConfig();
404 
405     /**
406      * @brief Commit the capture session config.
407      */
408     virtual int32_t CommitConfig();
409 
410     /**
411      * @brief Determine if the given Input can be added to session.
412      *
413      * @param CaptureInput to be added to session.
414      */
415     virtual bool CanAddInput(sptr<CaptureInput>& input);
416 
417     /**
418      * @brief Add CaptureInput for the capture session.
419      *
420      * @param CaptureInput to be added to session.
421      */
422     int32_t AddInput(sptr<CaptureInput>& input);
423 
424     /**
425      * @brief Determine if the given Ouput can be added to session.
426      *
427      * @param CaptureOutput to be added to session.
428      */
429     virtual bool CanAddOutput(sptr<CaptureOutput>& output);
430 
431     /**
432      * @brief Add CaptureOutput for the capture session.
433      *
434      * @param CaptureOutput to be added to session.
435      */
436     virtual int32_t AddOutput(sptr<CaptureOutput> &output);
437 
438     /**
439      * @brief Remove CaptureInput for the capture session.
440      *
441      * @param CaptureInput to be removed from session.
442      */
443     int32_t RemoveInput(sptr<CaptureInput>& input);
444 
445     /**
446      * @brief Remove CaptureOutput for the capture session.
447      *
448      * @param CaptureOutput to be removed from session.
449      */
450     int32_t RemoveOutput(sptr<CaptureOutput>& output);
451 
452     /**
453      * @brief Starts session and preview.
454      */
455     int32_t Start();
456 
457     /**
458      * @brief Stop session and preview..
459      */
460     int32_t Stop();
461 
462     /**
463      * @brief Set the session callback for the capture session.
464      *
465      * @param SessionCallback pointer to be triggered.
466      */
467     void SetCallback(std::shared_ptr<SessionCallback> callback);
468 
469     /**
470      * @brief Set the moving photo callback.
471      *
472      * @param photoProxy Requested for the pointer where moving photo callback is present.
473      * @param uri get uri for medialibary.
474      * @param cameraShotType get cameraShotType for medialibary.
475      */
476 
477     void CreateMediaLibrary(sptr<CameraPhotoProxy> photoProxy, std::string &uri, int32_t &cameraShotType,
478                             std::string &burstKey, int64_t timestamp);
479 
480     void CreateMediaLibrary(std::unique_ptr<Media::Picture> picture, sptr<CameraPhotoProxy> photoProxy,
481         std::string &uri, int32_t &cameraShotType, std::string &burstKey, int64_t timestamp);
482 
483     /**
484      * @brief Get the application callback information.
485      *
486      * @return Returns the pointer to SessionCallback set by application.
487      */
488     std::shared_ptr<SessionCallback> GetApplicationCallback();
489 
490     /**
491      * @brief Get the ExposureCallback.
492      *
493      * @return Returns the pointer to ExposureCallback.
494      */
495     std::shared_ptr<ExposureCallback> GetExposureCallback();
496 
497     /**
498      * @brief Get the FocusCallback.
499      *
500      * @return Returns the pointer to FocusCallback.
501      */
502     std::shared_ptr<FocusCallback> GetFocusCallback();
503 
504     /**
505      * @brief Get the MacroStatusCallback.
506      *
507      * @return Returns the pointer to MacroStatusCallback.
508      */
509     std::shared_ptr<MacroStatusCallback> GetMacroStatusCallback();
510 
511     /**
512      * @brief Get the MoonCaptureBoostStatusCallback.
513      *
514      * @return Returns the pointer to MoonCaptureBoostStatusCallback.
515      */
516     std::shared_ptr<MoonCaptureBoostStatusCallback> GetMoonCaptureBoostStatusCallback();
517 
518     /**
519      * @brief Get the FeatureDetectionStatusCallback.
520      *
521      * @return Returns the pointer to FeatureDetectionStatusCallback.
522      */
523     std::shared_ptr<FeatureDetectionStatusCallback> GetFeatureDetectionStatusCallback();
524 
525     /**
526      * @brief Get the SmoothZoomCallback.
527      *
528      * @return Returns the pointer to SmoothZoomCallback.
529      */
530     std::shared_ptr<SmoothZoomCallback> GetSmoothZoomCallback();
531 
532     /**
533      * @brief Releases CaptureSession instance.
534      * @return Returns errCode.
535      */
536     int32_t Release();
537 
538     /**
539      * @brief create new device control setting.
540      */
541     void LockForControl();
542 
543     /**
544      * @brief submit device control setting.
545      *
546      * @return Returns CAMERA_OK is success.
547      */
548     int32_t UnlockForControl();
549 
550     /**
551      * @brief Get the supported video sabilization modes.
552      *
553      * @return Returns vector of CameraVideoStabilizationMode supported stabilization modes.
554      */
555     std::vector<VideoStabilizationMode> GetSupportedStabilizationMode();
556 
557     /**
558      * @brief Get the supported video sabilization modes.
559      * @param vector of CameraVideoStabilizationMode supported stabilization modes.
560      * @return Returns errCode.
561      */
562     int32_t GetSupportedStabilizationMode(std::vector<VideoStabilizationMode>& modes);
563 
564     /**
565      * @brief Query whether given stabilization mode supported.
566      *
567      * @param VideoStabilizationMode stabilization mode to query.
568      * @return True is supported false otherwise.
569      */
570     bool IsVideoStabilizationModeSupported(VideoStabilizationMode stabilizationMode);
571 
572     /**
573      * @brief Query whether given stabilization mode supported.
574      *
575      * @param VideoStabilizationMode stabilization mode to query.
576      * @param bool True is supported false otherwise.
577      * @return errCode.
578      */
579     int32_t IsVideoStabilizationModeSupported(VideoStabilizationMode stabilizationMode, bool& isSupported);
580 
581     /**
582      * @brief Get the current Video Stabilizaion mode.
583      *
584      * @return Returns current Video Stabilizaion mode.
585      */
586     VideoStabilizationMode GetActiveVideoStabilizationMode();
587 
588     /**
589      * @brief Get the current Video Stabilizaion mode.
590      * @param current Video Stabilizaion mode.
591      * @return errCode
592      */
593     int32_t GetActiveVideoStabilizationMode(VideoStabilizationMode& mode);
594 
595     /**
596      * @brief Set the Video Stabilizaion mode.
597      * @param VideoStabilizationMode stabilization mode to set.
598      * @return errCode
599      */
600     int32_t SetVideoStabilizationMode(VideoStabilizationMode stabilizationMode);
601 
602     /**
603      * @brief Get the supported exposure modes.
604      *
605      * @return Returns vector of ExposureMode supported exposure modes.
606      */
607     std::vector<ExposureMode> GetSupportedExposureModes();
608 
609     /**
610      * @brief Get the supported exposure modes.
611      * @param vector of ExposureMode supported exposure modes.
612      * @return errCode.
613      */
614     int32_t GetSupportedExposureModes(std::vector<ExposureMode>& exposureModes);
615 
616     /**
617      * @brief Query whether given exposure mode supported.
618      *
619      * @param ExposureMode exposure mode to query.
620      * @return True is supported false otherwise.
621      */
622     bool IsExposureModeSupported(ExposureMode exposureMode);
623 
624     /**
625      * @brief Query whether given exposure mode supported.
626      *
627      * @param ExposureMode exposure mode to query.
628      * @param bool True is supported false otherwise.
629      * @return errCode.
630      */
631     int32_t IsExposureModeSupported(ExposureMode exposureMode, bool& isSupported);
632 
633     /**
634      * @brief Set exposure mode.
635      * @param ExposureMode exposure mode to be set.
636      * @return errCode
637      */
638     int32_t SetExposureMode(ExposureMode exposureMode);
639 
640     /**
641      * @brief Get the current exposure mode.
642      *
643      * @return Returns current exposure mode.
644      */
645     ExposureMode GetExposureMode();
646 
647     /**
648      * @brief Get the current exposure mode.
649      * @param ExposureMode current exposure mode.
650      * @return errCode.
651      */
652     int32_t GetExposureMode(ExposureMode& exposureMode);
653 
654     /**
655      * @brief Set the centre point of exposure area.
656      * @param Point which specifies the area to expose.
657      * @return errCode
658      */
659     int32_t SetMeteringPoint(Point exposurePoint);
660 
661     /**
662      * @brief Get centre point of exposure area.
663      *
664      * @return Returns current exposure point.
665      */
666     Point GetMeteringPoint();
667 
668     /**
669      * @brief Get centre point of exposure area.
670      * @param Point current exposure point.
671      * @return errCode
672      */
673     int32_t GetMeteringPoint(Point& exposurePoint);
674 
675     /**
676      * @brief Get exposure compensation range.
677      *
678      * @return Returns supported exposure compensation range.
679      */
680     std::vector<float> GetExposureBiasRange();
681 
682     /**
683      * @brief Get exposure compensation range.
684      * @param vector of exposure bias range.
685      * @return errCode.
686      */
687     int32_t GetExposureBiasRange(std::vector<float>& exposureBiasRange);
688 
689     /**
690      * @brief Set exposure compensation value.
691      * @param exposure compensation value to be set.
692      * @return errCode.
693      */
694     int32_t SetExposureBias(float exposureBias);
695 
696     /**
697      * @brief Get exposure compensation value.
698      *
699      * @return Returns current exposure compensation value.
700      */
701     float GetExposureValue();
702 
703     /**
704      * @brief Get exposure compensation value.
705      * @param exposure current exposure compensation value .
706      * @return Returns errCode.
707      */
708     int32_t GetExposureValue(float& exposure);
709 
710     /**
711      * @brief Set the exposure callback.
712      * which will be called when there is exposure state change.
713      *
714      * @param The ExposureCallback pointer.
715      */
716     void SetExposureCallback(std::shared_ptr<ExposureCallback> exposureCallback);
717 
718     /**
719      * @brief This function is called when there is exposure state change
720      * and process the exposure state callback.
721      *
722      * @param result metadata got from callback from service layer.
723      */
724     void ProcessAutoExposureUpdates(const std::shared_ptr<OHOS::Camera::CameraMetadata>& result);
725 
726     /**
727      * @brief Get the supported Focus modes.
728      *
729      * @return Returns vector of FocusMode supported exposure modes.
730      */
731     std::vector<FocusMode> GetSupportedFocusModes();
732 
733     /**
734      * @brief Get the supported Focus modes.
735      * @param vector of FocusMode supported.
736      * @return Returns errCode.
737      */
738     int32_t GetSupportedFocusModes(std::vector<FocusMode>& modes);
739 
740     /**
741      * @brief Query whether given focus mode supported.
742      *
743      * @param camera_focus_mode_enum_t focus mode to query.
744      * @return True is supported false otherwise.
745      */
746     bool IsFocusModeSupported(FocusMode focusMode);
747 
748     /**
749      * @brief Query whether given focus mode supported.
750      *
751      * @param camera_focus_mode_enum_t focus mode to query.
752      * @param bool True is supported false otherwise.
753      * @return Returns errCode.
754      */
755     int32_t IsFocusModeSupported(FocusMode focusMode, bool& isSupported);
756 
757     /**
758      * @brief Set Focus mode.
759      *
760      * @param FocusMode focus mode to be set.
761      * @return Returns errCode.
762      */
763     int32_t SetFocusMode(FocusMode focusMode);
764 
765     /**
766      * @brief Get the current focus mode.
767      *
768      * @return Returns current focus mode.
769      */
770     FocusMode GetFocusMode();
771 
772     /**
773      * @brief Get the current focus mode.
774      * @param FocusMode current focus mode.
775      * @return Returns errCode.
776      */
777     int32_t GetFocusMode(FocusMode& focusMode);
778 
779     /**
780      * @brief Set the focus callback.
781      * which will be called when there is focus state change.
782      *
783      * @param The ExposureCallback pointer.
784      */
785     void SetFocusCallback(std::shared_ptr<FocusCallback> focusCallback);
786 
787     /**
788      * @brief This function is called when there is focus state change
789      * and process the focus state callback.
790      *
791      * @param result metadata got from callback from service layer.
792      */
793     void ProcessAutoFocusUpdates(const std::shared_ptr<OHOS::Camera::CameraMetadata>& result);
794 
795     /**
796      * @brief Set the Focus area.
797      *
798      * @param Point which specifies the area to focus.
799      * @return Returns errCode.
800      */
801     int32_t SetFocusPoint(Point focusPoint);
802 
803     /**
804      * @brief Get centre point of focus area.
805      *
806      * @return Returns current focus point.
807      */
808     Point GetFocusPoint();
809 
810     /**
811      * @brief Get centre point of focus area.
812      * @param Point current focus point.
813      * @return Returns errCode.
814      */
815     int32_t GetFocusPoint(Point& focusPoint);
816 
817     /**
818      * @brief Get focal length.
819      *
820      * @return Returns focal length value.
821      */
822     float GetFocalLength();
823 
824     /**
825      * @brief Get focal length.
826      * @param focalLength current focal length compensation value .
827      * @return Returns errCode.
828      */
829     int32_t GetFocalLength(float& focalLength);
830 
831     /**
832     * @brief Set the smooth zoom callback.
833     * which will be called when there is smooth zoom change.
834     *
835     * @param The SmoothZoomCallback pointer.
836     */
837     void SetSmoothZoomCallback(std::shared_ptr<SmoothZoomCallback> smoothZoomCallback);
838 
839     /**
840      * @brief Get the supported Focus modes.
841      *
842      * @return Returns vector of camera_focus_mode_enum_t supported exposure modes.
843      */
844     std::vector<FlashMode> GetSupportedFlashModes();
845 
846     /**
847      * @brief Get the supported Focus modes.
848      * @param vector of camera_focus_mode_enum_t supported exposure modes.
849      * @return Returns errCode.
850      */
851     virtual int32_t GetSupportedFlashModes(std::vector<FlashMode>& flashModes);
852 
853     /**
854      * @brief Check whether camera has flash.
855      */
856     bool HasFlash();
857 
858     /**
859      * @brief Check whether camera has flash.
860      * @param bool True is has flash false otherwise.
861      * @return Returns errCode.
862      */
863     int32_t HasFlash(bool& hasFlash);
864 
865     /**
866      * @brief Query whether given flash mode supported.
867      *
868      * @param camera_flash_mode_enum_t flash mode to query.
869      * @return True if supported false otherwise.
870      */
871     bool IsFlashModeSupported(FlashMode flashMode);
872 
873     /**
874      * @brief Query whether given flash mode supported.
875      *
876      * @param camera_flash_mode_enum_t flash mode to query.
877      * @param bool True if supported false otherwise.
878      * @return errCode.
879      */
880     int32_t IsFlashModeSupported(FlashMode flashMode, bool& isSupported);
881 
882     /**
883      * @brief Get the current flash mode.
884      *
885      * @return Returns current flash mode.
886      */
887     FlashMode GetFlashMode();
888 
889     /**
890      * @brief Get the current flash mode.
891      * @param current flash mode.
892      * @return Returns errCode.
893      */
894     virtual int32_t GetFlashMode(FlashMode& flashMode);
895 
896     /**
897      * @brief Set flash mode.
898      *
899      * @param camera_flash_mode_enum_t flash mode to be set.
900      * @return Returns errCode.
901      */
902     virtual int32_t SetFlashMode(FlashMode flashMode);
903 
904     /**
905      * @brief Get the supported Zoom Ratio range.
906      *
907      * @return Returns vector<float> of supported Zoom ratio range.
908      */
909     std::vector<float> GetZoomRatioRange();
910 
911     /**
912      * @brief Get the supported Zoom Ratio range.
913      *
914      * @param vector<float> of supported Zoom ratio range.
915      * @return Returns errCode.
916      */
917     int32_t GetZoomRatioRange(std::vector<float>& zoomRatioRange);
918 
919     /**
920      * @brief Get the current Zoom Ratio.
921      *
922      * @return Returns current Zoom Ratio.
923      */
924     float GetZoomRatio();
925 
926     /**
927      * @brief Get the current Zoom Ratio.
928      * @param zoomRatio current Zoom Ratio.
929      * @return Returns errCode.
930      */
931     int32_t GetZoomRatio(float& zoomRatio);
932 
933     /**
934      * @brief Set Zoom ratio.
935      *
936      * @param Zoom ratio to be set.
937      * @return Returns errCode.
938      */
939     int32_t SetZoomRatio(float zoomRatio);
940 
941     /**
942      * @brief Prepare Zoom change.
943      *
944      * @return Returns errCode.
945      */
946     int32_t PrepareZoom();
947 
948     /**
949      * @brief UnPrepare Zoom hange.
950      *
951      * @return Returns errCode.
952      */
953     int32_t UnPrepareZoom();
954 
955     /**
956      * @brief Set Smooth Zoom.
957      *
958      * @param Target smooth zoom ratio.
959      * @param Smooth zoom type.
960      * @return Returns errCode.
961      */
962     int32_t SetSmoothZoom(float targetZoomRatio, uint32_t smoothZoomType);
963 
964     /**
965      * @brief Get the supported Zoom point info.
966      *
967      * @param vector<ZoomPointInfo> of supported ZoomPointInfo.
968      * @return Returns errCode.
969      */
970     int32_t GetZoomPointInfos(std::vector<ZoomPointInfo>& zoomPointInfoList);
971 
972     /**
973      * @brief Set Metadata Object types.
974      *
975      * @param set of camera_face_detect_mode_t types.
976      */
977     void SetCaptureMetadataObjectTypes(std::set<camera_face_detect_mode_t> metadataObjectTypes);
978 
979     /**
980      * @brief Get the supported filters.
981      *
982      * @return Returns the array of filter.
983      */
984     std::vector<FilterType> GetSupportedFilters();
985 
986     /**
987      * @brief Verify ability for supported meta.
988      *
989      * @return Returns errorcode.
990      */
991     int32_t VerifyAbility(uint32_t ability);
992 
993     /**
994      * @brief Get the current filter.
995      *
996      * @return Returns the array of filter.
997      */
998     FilterType GetFilter();
999 
1000     /**
1001      * @brief Set the filter.
1002      */
1003     void SetFilter(FilterType filter);
1004 
1005     /**
1006      * @brief Get the supported beauty type.
1007      *
1008      * @return Returns the array of beautytype.
1009      */
1010     std::vector<BeautyType> GetSupportedBeautyTypes();
1011 
1012     /**
1013      * @brief Get the supported beauty range.
1014      *
1015      * @return Returns the array of beauty range.
1016      */
1017     std::vector<int32_t> GetSupportedBeautyRange(BeautyType type);
1018 
1019     /**
1020      * @brief Set the beauty.
1021      */
1022     void SetBeauty(BeautyType type, int value);
1023 
1024     /**
1025      * @brief according type to get the strength.
1026      */
1027     int32_t GetBeauty(BeautyType type);
1028 
1029     /**
1030      * @brief Gets supported portrait theme type.
1031      * @param vector of PortraitThemeType supported portraitTheme type.
1032      * @return Returns errCode.
1033      */
1034     int32_t GetSupportedPortraitThemeTypes(std::vector<PortraitThemeType>& types);
1035 
1036     /**
1037      * @brief Checks whether portrait theme is supported.
1038      * @param isSupported True if supported false otherwise.
1039      * @return Returns errCode.
1040      */
1041     int32_t IsPortraitThemeSupported(bool &isSupported);
1042 
1043     /**
1044      * @brief Checks whether portrait theme is supported.
1045      *
1046      * @return True if supported false otherwise.
1047      */
1048     bool IsPortraitThemeSupported();
1049 
1050     /**
1051      * @brief Sets a portrait theme type for a camera device.
1052      * @param type PortraitTheme type to be sety.
1053      * @return Returns errCode.
1054      */
1055     int32_t SetPortraitThemeType(PortraitThemeType type);
1056 
1057     /**
1058      * @brief Gets supported rotations.
1059      * @param vector of supported rotations.
1060      * @return Returns errCode.
1061      */
1062     int32_t GetSupportedVideoRotations(std::vector<int32_t>& supportedRotation);
1063 
1064     /**
1065      * @brief Checks whether rotation is supported.
1066      * @param isSupported True if supported false otherwise.
1067      * @return Returns errCode.
1068      */
1069     int32_t IsVideoRotationSupported(bool &isSupported);
1070 
1071     /**
1072      * @brief Checks whether rotation is supported.
1073      *
1074      * @return True if supported false otherwise.
1075      */
1076     bool IsVideoRotationSupported();
1077 
1078     /**
1079      * @brief Sets a rotation type for a camera device.
1080      * @param rotation Potation to be sety.
1081      * @return Returns errCode.
1082      */
1083     int32_t SetVideoRotation(int32_t rotation);
1084 
1085     /**
1086      * @brief Get the supported color spaces.
1087      *
1088      * @return Returns supported color spaces.
1089      */
1090     std::vector<ColorSpace> GetSupportedColorSpaces();
1091 
1092     /**
1093      * @brief Get current color space.
1094      *
1095      * @return Returns current color space.
1096      */
1097     int32_t GetActiveColorSpace(ColorSpace& colorSpace);
1098 
1099     /**
1100      * @brief Set the color space.
1101      */
1102     int32_t SetColorSpace(ColorSpace colorSpace);
1103 
1104     /**
1105      * @brief Get the supported color effect.
1106      *
1107      * @return Returns supported color effects.
1108      */
1109     std::vector<ColorEffect> GetSupportedColorEffects();
1110 
1111     /**
1112      * @brief Get the current color effect.
1113      *
1114      * @return Returns current color effect.
1115      */
1116     ColorEffect GetColorEffect();
1117 
1118     /**
1119      * @brief Set the color effect.
1120      */
1121     void SetColorEffect(ColorEffect colorEffect);
1122 
1123 // Focus Distance
1124     /**
1125      * @brief Get the current FocusDistance.
1126      * @param distance current Focus Distance.
1127      * @return Returns errCode.
1128      */
1129     int32_t GetFocusDistance(float& distance);
1130 
1131     /**
1132      * @brief Set Focus istance.
1133      *
1134      * @param distance to be set.
1135      * @return Returns errCode.
1136      */
1137     int32_t SetFocusDistance(float distance);
1138 
1139     /**
1140      * @brief Get the current FocusDistance.
1141      * @param distance current Focus Distance.
1142      * @return Returns errCode.
1143      */
1144     float GetMinimumFocusDistance();
1145 
1146     /**
1147      * @brief Check current status is support macro or not.
1148      */
1149     bool IsMacroSupported();
1150 
1151     /**
1152      * @brief Enable macro lens.
1153      */
1154     int32_t EnableMacro(bool isEnable);
1155 
1156     /**
1157      * @brief Check current status is support depth fusion or not.
1158      */
1159     bool IsDepthFusionSupported();
1160 
1161     /**
1162      * @brief Get the depth fusion supported Zoom Ratio range,
1163      *
1164      * @return Returns vector<float> of depth fusion supported Zoom ratio range.
1165      */
1166     std::vector<float> GetDepthFusionThreshold();
1167 
1168     /**
1169      * @brief Get the depth fusion supported Zoom ratio range.
1170      *
1171      * @param vector<float> of depth fusion supported Zoom ratio range.
1172      * @return Returns errCode.
1173      */
1174     int32_t GetDepthFusionThreshold(std::vector<float>& depthFusionThreshold);
1175 
1176     /**
1177     * @brief Check curernt status is enabled depth fusion.
1178     */
1179     bool IsDepthFusionEnabled();
1180 
1181     /**
1182      * @brief Enable depth fusion.
1183      */
1184     int32_t EnableDepthFusion(bool isEnable);
1185 
1186     /**
1187     * @brief Check current status is support motion photo.
1188     */
1189     bool IsMovingPhotoSupported();
1190 
1191     /**
1192      * @brief Enable motion photo.
1193      */
1194     int32_t EnableMovingPhoto(bool isEnable);
1195 
1196     /**
1197      * @brief Enable moving photo mirror.
1198      */
1199     int32_t EnableMovingPhotoMirror(bool isMirror, bool isConfig);
1200 
1201     /**
1202      * @brief Check current status is support moon capture boost or not.
1203      */
1204     bool IsMoonCaptureBoostSupported();
1205 
1206     /**
1207      * @brief Enable or disable moon capture boost ability.
1208      */
1209     int32_t EnableMoonCaptureBoost(bool isEnable);
1210 
1211     /**
1212      * @brief Check current status is support target feature or not.
1213      */
1214     bool IsFeatureSupported(SceneFeature feature);
1215 
1216     /**
1217      * @brief Enable or disable target feature ability.
1218      */
1219     int32_t EnableFeature(SceneFeature feature, bool isEnable);
1220 
1221     /**
1222      * @brief Set the macro status callback.
1223      * which will be called when there is macro state change.
1224      *
1225      * @param The MacroStatusCallback pointer.
1226      */
1227     void SetMacroStatusCallback(std::shared_ptr<MacroStatusCallback> callback);
1228 
1229     /**
1230      * @brief Set the moon detect status callback.
1231      * which will be called when there is moon detect state change.
1232      *
1233      * @param The MoonCaptureBoostStatusCallback pointer.
1234      */
1235     void SetMoonCaptureBoostStatusCallback(std::shared_ptr<MoonCaptureBoostStatusCallback> callback);
1236 
1237     /**
1238      * @brief Set the feature detection status callback.
1239      * which will be called when there is feature detection state change.
1240      *
1241      * @param The FeatureDetectionStatusCallback pointer.
1242      */
1243     void SetFeatureDetectionStatusCallback(std::shared_ptr<FeatureDetectionStatusCallback> callback);
1244 
1245     void SetEffectSuggestionCallback(std::shared_ptr<EffectSuggestionCallback> effectSuggestionCallback);
1246 
1247     /**
1248      * @brief This function is called when there is macro status change
1249      * and process the macro status callback.
1250      *
1251      * @param result Metadata got from callback from service layer.
1252      */
1253     void ProcessMacroStatusChange(const std::shared_ptr<OHOS::Camera::CameraMetadata>& result);
1254 
1255     /**
1256      * @brief This function is called when there is moon detect status change
1257      * and process the moon detect status callback.
1258      *
1259      * @param result Metadata got from callback from service layer.
1260      */
1261     void ProcessMoonCaptureBoostStatusChange(const std::shared_ptr<OHOS::Camera::CameraMetadata>& result);
1262 
1263     /**
1264      * @brief This function is called when there is low light detect status change
1265      * and process the low light detect status callback.
1266      *
1267      * @param result Metadata got from callback from service layer.
1268      */
1269     void ProcessLowLightBoostStatusChange(const std::shared_ptr<OHOS::Camera::CameraMetadata>& result);
1270 
1271     /**
1272      * @brief Check current status is support moon capture boost or not.
1273      */
1274     bool IsLowLightBoostSupported();
1275 
1276     /**
1277      * @brief Enable or disable moon capture boost ability.
1278      */
1279     int32_t EnableLowLightBoost(bool isEnable);
1280 
1281     /**
1282      * @brief Enable or disable moon capture boost ability.
1283      */
1284     int32_t EnableLowLightDetection(bool isEnable);
1285 
1286     /**
1287      * @brief Verify that the output configuration is legitimate.
1288      *
1289      * @param outputProfile The target profile.
1290      * @param outputType The type of output profile.
1291      *
1292      * @return True if the profile is supported, false otherwise.
1293      */
1294     bool ValidateOutputProfile(Profile& outputProfile, CaptureOutputType outputType);
1295 
1296     /**
1297      * @brief Check the preconfig type is supported or not.
1298      *
1299      * @param preconfigType The target preconfig type.
1300      * @param preconfigRatio The target ratio enum
1301      *
1302      * @return True if the preconfig type is supported, false otherwise.
1303      */
1304     virtual bool CanPreconfig(PreconfigType preconfigType, ProfileSizeRatio preconfigRatio);
1305 
1306     /**
1307      * @brief Set the preconfig type.
1308      *
1309      * @param preconfigType The target preconfig type.
1310      * @param preconfigRatio The target ratio enum
1311      *
1312      * @return Camera error code.
1313      */
1314     virtual int32_t Preconfig(PreconfigType preconfigType, ProfileSizeRatio preconfigRatio);
1315 
1316     /**
1317      * @brief Get whether or not commit config.
1318      *
1319      * @return Returns whether or not commit config.
1320      */
1321     bool IsSessionCommited();
1322     bool SetBeautyValue(BeautyType beautyType, int32_t value);
1323     /**
1324      * @brief Get whether or not commit config.
1325      *
1326      * @return Returns whether or not commit config.
1327      */
1328     bool IsSessionConfiged();
1329 
1330     /**
1331      * @brief Get whether or not start session.
1332      *
1333      * @return Returns whether or not start session.
1334      */
1335     bool IsSessionStarted();
1336 
1337     /**
1338      * @brief Set FrameRate Range.
1339      *
1340      * @return Returns whether or not commit config.
1341      */
1342     int32_t SetFrameRateRange(const std::vector<int32_t>& frameRateRange);
1343 
1344     /**
1345     * @brief Set camera sensor sensitivity.
1346     * @param sensitivity sensitivity value to be set.
1347     * @return errCode.
1348     */
1349     int32_t SetSensorSensitivity(uint32_t sensitivity);
1350 
1351     /**
1352     * @brief Get camera sensor sensitivity.
1353     * @param sensitivity current sensitivity value.
1354     * @return Returns errCode.
1355     */
1356     int32_t GetSensorSensitivityRange(std::vector<int32_t> &sensitivityRange);
1357 
1358     /**
1359     * @brief Get exposure time range.
1360     * @param vector of exposure time range.
1361     * @return errCode.
1362     */
1363     int32_t GetSensorExposureTimeRange(std::vector<uint32_t> &sensorExposureTimeRange);
1364 
1365     /**
1366     * @brief Set exposure time value.
1367     * @param exposure compensation value to be set.
1368     * @return errCode.
1369     */
1370     int32_t SetSensorExposureTime(uint32_t sensorExposureTime);
1371 
1372     /**
1373     * @brief Get exposure time value.
1374     * @param exposure current exposure time value .
1375     * @return Returns errCode.
1376     */
1377     int32_t GetSensorExposureTime(uint32_t &sensorExposureTime);
1378 
1379     /**
1380     * @brief Get sensor module type
1381     * @param moduleType sensor module type.
1382     * @return Returns errCode.
1383     */
1384     int32_t GetModuleType(uint32_t &moduleType);
1385 
1386     /**
1387      * @brief Set ar mode.
1388      * @param isEnable switch to control ar mode.
1389      * @return errCode
1390      */
1391     int32_t SetARMode(bool isEnable);
1392 
1393     /**
1394      * @brief Set the ar callback.
1395      * which will be called when there is ar info update.
1396      *
1397      * @param arCallback ARCallback pointer.
1398      */
1399     void SetARCallback(std::shared_ptr<ARCallback> arCallback);
1400 
1401     /**
1402      * @brief Get the ARCallback.
1403      *
1404      * @return Returns the pointer to ARCallback.
1405      */
1406     std::shared_ptr<ARCallback> GetARCallback();
1407 
1408     /**
1409      * @brief Get Session Functions.
1410      *
1411      * @param previewProfiles to be searched.
1412      * @param photoProfiles to be searched.
1413      * @param videoProfiles to be searched.
1414      */
1415     std::vector<sptr<CameraAbility>> GetSessionFunctions(std::vector<Profile>& previewProfiles,
1416                                                          std::vector<Profile>& photoProfiles,
1417                                                          std::vector<VideoProfile>& videoProfiles,
1418                                                          bool isForApp = true);
1419 
1420     /**
1421      * @brief Get Session Conflict Functions.
1422      *
1423      */
1424     std::vector<sptr<CameraAbility>> GetSessionConflictFunctions();
1425 
1426     /**
1427      * @brief Get CameraOutput Capabilities.
1428      *
1429      */
1430     std::vector<sptr<CameraOutputCapability>> GetCameraOutputCapabilities(sptr<CameraDevice> &camera);
1431 
1432     /**
1433      * @brief CreateCameraAbilityContainer.
1434      *
1435      */
1436     void CreateCameraAbilityContainer();
1437 
1438     /**
1439      * @brief Get whether effectSuggestion Supported.
1440      *
1441      * @return True if supported false otherwise.
1442      */
1443     bool IsEffectSuggestionSupported();
1444 
1445     /**
1446      * @brief Enable EffectSuggestion.
1447      * @param isEnable switch to control Effect Suggestion.
1448      * @return errCode
1449      */
1450     int32_t EnableEffectSuggestion(bool isEnable);
1451 
1452     /**
1453      * @brief Get supported EffectSuggestionInfo.
1454      * @return EffectSuggestionInfo parsed from tag
1455      */
1456     EffectSuggestionInfo GetSupportedEffectSuggestionInfo();
1457 
1458     /**
1459      * @brief Get supported effectSuggestionType.
1460      * @return EffectSuggestionTypeList which current mode supported.
1461      */
1462     std::vector<EffectSuggestionType> GetSupportedEffectSuggestionType();
1463 
1464     /**
1465      * @brief Batch set effect suggestion status.
1466      * @param effectSuggestionStatusList effect suggestion status list to be set.
1467      * @return errCode
1468      */
1469     int32_t SetEffectSuggestionStatus(std::vector<EffectSuggestionStatus> effectSuggestionStatusList);
1470 
1471     /**
1472      * @brief Set ar mode.
1473      * @param effectSuggestionType switch to control effect suggestion.
1474      * @param isEnable switch to control effect suggestion status.
1475      * @return errCode
1476      */
1477     int32_t UpdateEffectSuggestion(EffectSuggestionType effectSuggestionType, bool isEnable);
1478 
1479     /**
1480      * @brief This function is called when there is effect suggestion type change
1481      * and process the effect suggestion callback.
1482      *
1483      * @param result metadata got from callback from service layer.
1484      */
1485     void ProcessEffectSuggestionTypeUpdates(const std::shared_ptr<OHOS::Camera::CameraMetadata> &result);
1486 
1487     /**
1488      * @brief Get the supported portrait effects.
1489      *
1490      * @return Returns the array of portraiteffect.
1491      */
1492     std::vector<PortraitEffect> GetSupportedPortraitEffects();
1493 
1494     /**
1495      * @brief Get the supported virtual apertures.
1496      * @param apertures returns the array of virtual aperture.
1497      * @return Error code.
1498      */
1499     int32_t GetSupportedVirtualApertures(std::vector<float>& apertures);
1500 
1501     /**
1502      * @brief Get the virtual aperture.
1503      * @param aperture returns the current virtual aperture.
1504      * @return Error code.
1505      */
1506     int32_t GetVirtualAperture(float& aperture);
1507 
1508     /**
1509      * @brief Set the virtual aperture.
1510      * @param virtualAperture set virtual aperture value.
1511      * @return Error code.
1512      */
1513     int32_t SetVirtualAperture(const float virtualAperture);
1514 
1515     /**
1516      * @brief Get the supported physical apertures.
1517      * @param apertures returns the array of physical aperture.
1518      * @return Error code.
1519      */
1520     int32_t GetSupportedPhysicalApertures(std::vector<std::vector<float>>& apertures);
1521 
1522     /**
1523      * @brief Get the physical aperture.
1524      * @param aperture returns current physical aperture.
1525      * @return Error code.
1526      */
1527     int32_t GetPhysicalAperture(float& aperture);
1528 
1529     /**
1530      * @brief Set the physical aperture.
1531      * @param physicalAperture set physical aperture value.
1532      * @return Error code.
1533      */
1534     int32_t SetPhysicalAperture(float physicalAperture);
1535 
1536     /**
1537      * @brief Set quality prioritization.
1538      *
1539      * @param QualityPrioritization quality prioritization to be set.
1540      * @return Return errCode.
1541      */
1542     int32_t SetQualityPrioritization(QualityPrioritization qualityPrioritization);
1543 
1544     void SetMode(SceneMode modeName);
1545     SceneMode GetMode();
1546     SceneFeaturesMode GetFeaturesMode();
1547     std::vector<SceneFeaturesMode> GetSubFeatureMods();
1548     bool IsSetEnableMacro();
1549     sptr<CaptureOutput> GetMetaOutput();
1550     void ProcessSnapshotDurationUpdates(const uint64_t timestamp,
1551                                     const std::shared_ptr<OHOS::Camera::CameraMetadata> &result);
1552 
1553     virtual std::shared_ptr<OHOS::Camera::CameraMetadata> GetMetadata();
1554 
1555     void ExecuteAbilityChangeCallback();
1556     void SetAbilityCallback(std::shared_ptr<AbilityCallback> abilityCallback);
1557     void ProcessAREngineUpdates(const uint64_t timestamp,
1558                                     const std::shared_ptr<OHOS::Camera::CameraMetadata> &result);
1559 
1560     void EnableDeferredType(DeferredDeliveryImageType deferredType, bool isEnableByUser);
1561     void EnableAutoDeferredVideoEnhancement(bool isEnableByUser);
1562     void SetUserId();
1563     bool IsMovingPhotoEnabled();
1564     bool IsImageDeferred();
1565     bool IsVideoDeferred();
1566     virtual bool CanSetFrameRateRange(int32_t minFps, int32_t maxFps, CaptureOutput* curOutput);
1567     bool CanSetFrameRateRangeForOutput(int32_t minFps, int32_t maxFps, CaptureOutput* curOutput);
1568 
1569     int32_t EnableAutoHighQualityPhoto(bool enabled);
1570     int32_t EnableAutoCloudImageEnhancement(bool enabled);
1571     int32_t AddSecureOutput(sptr<CaptureOutput> &output);
1572 
1573     // White Balance
1574     /**
1575     * @brief Get Metering mode.
1576      * @param vector of Metering Mode.
1577      * @return errCode.
1578      */
1579     int32_t GetSupportedWhiteBalanceModes(std::vector<WhiteBalanceMode>& modes);
1580 
1581     /**
1582      * @brief Query whether given white-balance mode supported.
1583      *
1584      * @param camera_focus_mode_enum_t white-balance mode to query.
1585      * @param bool True if supported false otherwise.
1586      * @return errCode.
1587      */
1588     int32_t IsWhiteBalanceModeSupported(WhiteBalanceMode mode, bool &isSupported);
1589 
1590     /**
1591      * @brief Set WhiteBalanceMode.
1592      * @param mode WhiteBalanceMode to be set.
1593      * @return errCode.
1594      */
1595     int32_t SetWhiteBalanceMode(WhiteBalanceMode mode);
1596 
1597     /**
1598      * @brief Get WhiteBalanceMode.
1599      * @param mode current WhiteBalanceMode .
1600      * @return Returns errCode.
1601      */
1602     int32_t GetWhiteBalanceMode(WhiteBalanceMode& mode);
1603 
1604     /**
1605      * @brief Get ManualWhiteBalance Range.
1606      * @param whiteBalanceRange supported Manual WhiteBalance range .
1607      * @return Returns errCode.
1608      */
1609     int32_t GetManualWhiteBalanceRange(std::vector<int32_t> &whiteBalanceRange);
1610 
1611     /**
1612      * @brief Is Manual WhiteBalance Supported.
1613      * @param isSupported is Support Manual White Balance .
1614      * @return Returns errCode.
1615      */
1616     int32_t IsManualWhiteBalanceSupported(bool &isSupported);
1617 
1618     /**
1619      * @brief Set Manual WhiteBalance.
1620      * @param wbValue WhiteBalance value to be set.
1621      * @return Returns errCode.
1622      */
1623     int32_t SetManualWhiteBalance(int32_t wbValue);
1624 
1625     /**
1626      * @brief Get ManualWhiteBalance.
1627      * @param wbValue WhiteBalance value to be get.
1628      * @return Returns errCode.
1629      */
1630     int32_t GetManualWhiteBalance(int32_t &wbValue);
1631 
GetMetadataResultProcessor()1632     inline std::shared_ptr<MetadataResultProcessor> GetMetadataResultProcessor()
1633     {
1634         return metadataResultProcessor_;
1635     }
1636 
GetInputDevice()1637     inline sptr<CaptureInput> GetInputDevice()
1638     {
1639         std::lock_guard<std::mutex> lock(inputDeviceMutex_);
1640         return innerInputDevice_;
1641     }
1642 
1643     int32_t SetPreviewRotation(std::string &deviceClass);
1644 
GetCaptureSession()1645     inline sptr<ICaptureSession> GetCaptureSession()
1646     {
1647         std::lock_guard<std::mutex> lock(captureSessionMutex_);
1648         return innerCaptureSession_;
1649     }
1650 
1651     /**
1652      * @brief Checks if the LCD flash feature is supported.
1653      *
1654      * This function determines whether the current system or device supports the LCD flash feature.
1655      * It returns `true` if the feature is supported; otherwise, it returns `false`.
1656      *
1657      * @return `true` if the LCD flash feature is supported; `false` otherwise.
1658      */
1659     bool IsLcdFlashSupported();
1660 
1661     /**
1662      * @brief Enables or disables the LCD flash feature.
1663      *
1664      * This function enables or disables the LCD flash feature based on the provided `isEnable` flag.
1665      *
1666      * @param isEnable A boolean flag indicating whether to enable (`true`) or disable (`false`) the LCD flash feature.
1667      *
1668      * @return Returns an `int32_t` value indicating the result of the operation.
1669      *         Typically, a return value of 0 indicates success, while a non-zero value indicates an error.
1670      */
1671     int32_t EnableLcdFlash(bool isEnable);
1672 
1673     /**
1674      * @brief Enables or disables LCD flash detection.
1675      *
1676      * This function enables or disables the detection of the LCD flash feature based on the provided `isEnable` flag.
1677      *
1678      * @param isEnable A boolean flag indicating whether to enable (`true`) or disable (`false`) LCD flash detection.
1679      *
1680      * @return Returns an `int32_t` value indicating the outcome of the operation.
1681      *         A return value of 0 typically signifies success, while a non-zero value indicates an error.
1682      */
1683     int32_t EnableLcdFlashDetection(bool isEnable);
1684 
1685     void ProcessLcdFlashStatusUpdates(const std::shared_ptr<OHOS::Camera::CameraMetadata> &result);
1686 
1687     /**
1688      * @brief Sets the callback for LCD flash status updates.
1689      *
1690      * This function assigns a callback to be invoked whenever there is a change in the LCD flash status.
1691      * The callback is passed as a shared pointer, allowing for shared ownership and automatic memory management.
1692      *
1693      * @param lcdFlashStatusCallback A shared pointer to an LcdFlashStatusCallback object. This callback will
1694      *        be called to handle updates related to the LCD flash status. If the callback is already set,
1695      *        it will be overwritten with the new one.
1696      */
1697     void SetLcdFlashStatusCallback(std::shared_ptr<LcdFlashStatusCallback> lcdFlashStatusCallback);
1698 
1699     /**
1700      * @brief Retrieves the current LCD flash status callback.
1701      *
1702      * This function returns a shared pointer to the `LcdFlashStatusCallback` object that is used for receiving
1703      * notifications or callbacks related to the LCD flash status.
1704      *
1705      * @return A `std::shared_ptr<LcdFlashStatusCallback>` pointing to the current LCD flash status callback.
1706      *         If no callback is set, it may return a `nullptr`.
1707      */
1708     std::shared_ptr<LcdFlashStatusCallback> GetLcdFlashStatusCallback();
1709     void EnableFaceDetection(bool enable);
1710     /**
1711      * @brief Checks if tripod detection is supported.
1712      *
1713      * This function determines whether the current system or device supports tripod detection functionality.
1714      * It returns `true` if the feature is supported, otherwise `false`.
1715      *
1716      * @return `true` if tripod detection is supported; `false` otherwise.
1717      */
1718     bool IsTripodDetectionSupported();
1719 
1720     /**
1721      * @brief Enables or disables tripod stabilization.
1722      *
1723      * This function enables or disables the tripod stabilization feature based on the provided `enabled` flag.
1724      *
1725      * @param enabled A boolean flag that indicates whether to enable or disable tripod stabilization.
1726      *
1727      * @return Returns an `int32_t` value indicating the success or failure of the operation.
1728      *         Typically, a return value of 0 indicates success, while a non-zero value indicates an error.
1729      */
1730     int32_t EnableTripodStabilization(bool enabled);
1731 
1732     /**
1733      * @brief Enables or disables tripod detection.
1734      *
1735      * This function enables or disables the tripod detection feature based on the provided `enabled` flag.
1736      *
1737      * @param enabled A boolean flag that specifies whether to enable or disable tripod detection.
1738      *
1739      * @return Returns an `int32_t` value indicating the outcome of the operation.
1740      *         A return value of 0 typically indicates success, while a non-zero value indicates an error.
1741      */
1742     int32_t EnableTripodDetection(bool enabled);
1743 
1744     void ProcessTripodStatusChange(const std::shared_ptr<OHOS::Camera::CameraMetadata>& result);
1745 
1746     int32_t EnableRawDelivery(bool enabled);
1747 
1748     /**
1749      * @brief Checks if the automatic switchover device is supported.
1750      *
1751      * @return true if supported; false otherwise.
1752      */
1753     bool IsAutoDeviceSwitchSupported();
1754 
1755     /**
1756      * @brief Enables or disables the automatic switchover device.
1757      *
1758      * @param isEnable True to enable, false to disable.
1759      * @return 0 on success, or a negative error code on failure.
1760      */
1761     int32_t EnableAutoDeviceSwitch(bool isEnable);
1762 
1763     /**
1764      * @brief Switches the current device to a different one.
1765      *
1766      * @return true if the switch was successful; false if it failed or is not supported.
1767      */
1768     bool SwitchDevice();
1769 
1770     /**
1771      * @brief Enables or disables the automatic switchover device.
1772      *
1773      * @param isEnable True to enable, false to disable.
1774      */
1775     void SetIsAutoSwitchDeviceStatus(bool isEnable);
1776 
1777     /**
1778      * @brief Checks if the automatic switchover device is enabled.
1779      *
1780      * @return True if enabled, false otherwise.
1781      */
1782     bool GetIsAutoSwitchDeviceStatus();
1783 
1784     /**
1785      * @brief Sets the callback for automatic device switching.
1786      *
1787      * @param autoDeviceSwitchCallback A shared pointer to the callback.
1788      */
1789     void SetAutoDeviceSwitchCallback(shared_ptr<AutoDeviceSwitchCallback> autoDeviceSwitchCallback);
1790 
1791     /**
1792      * @brief Gets the current automatic device switch callback.
1793      *
1794      * @return A shared pointer to the callback, or nullptr if not set.
1795      */
1796     shared_ptr<AutoDeviceSwitchCallback> GetAutoDeviceSwitchCallback();
1797 
SetDeviceCapabilityChangeStatus(bool isDeviceCapabilityChanged)1798     inline void SetDeviceCapabilityChangeStatus(bool isDeviceCapabilityChanged)
1799     {
1800         isDeviceCapabilityChanged_ = isDeviceCapabilityChanged;
1801     }
1802 
GetDeviceCapabilityChangeStatus()1803     inline bool GetDeviceCapabilityChangeStatus()
1804     {
1805         return isDeviceCapabilityChanged_;
1806     }
1807 
1808     /**
1809      * @brief Adds a function to the mapping with the specified control tag.
1810      *
1811      * This function is used to register a callback that will be executed
1812      * when the automatic switchover device is enabled. The control target
1813      * must be set prior to switching the device. After the device is switched,
1814      * the target needs to be reset to HAL.
1815      *
1816      * @note This functionality is applicable only for SceneMode::CAPTURE
1817      *       and SceneMode::VIDEO modes.
1818      *
1819      * @param ctrlTag The control tag associated with the function.
1820      * @param func The function to be added to the map, which will be called
1821      *             when the corresponding control tag is triggered.
1822      */
1823     void AddFunctionToMap(std::string ctrlTag, std::function<void()> func);
1824     void ExecuteAllFunctionsInMap();
1825 
1826     /**
1827      * @brief Set usage for the capture session.
1828      * @param usage - The capture session usage.
1829      * @param enabled - Enable usage for session if TRUE.
1830      */
1831     void SetUsage(UsageType usageType, bool enabled);
1832 
1833 protected:
1834 
1835     static const std::unordered_map<camera_awb_mode_t, WhiteBalanceMode> metaWhiteBalanceModeMap_;
1836     static const std::unordered_map<WhiteBalanceMode, camera_awb_mode_t> fwkWhiteBalanceModeMap_;
1837 
1838     static const std::unordered_map<LightPaintingType, CameraLightPaintingType> fwkLightPaintingTypeMap_;
1839     static const std::unordered_map<CameraLightPaintingType, LightPaintingType> metaLightPaintingTypeMap_;
1840     static const std::unordered_map<TripodStatus, FwkTripodStatus> metaTripodStatusMap_;
1841     std::shared_ptr<OHOS::Camera::CameraMetadata> changedMetadata_;
1842     Profile photoProfile_;
1843     Profile previewProfile_;
1844     std::map<BeautyType, std::vector<int32_t>> beautyTypeAndRanges_;
1845     std::map<BeautyType, int32_t> beautyTypeAndLevels_;
1846     std::shared_ptr<MetadataResultProcessor> metadataResultProcessor_ = nullptr;
1847     bool isImageDeferred_ = false;
1848     std::atomic<bool> isRawImageDelivery_ { false };
1849     bool isVideoDeferred_ = false;
1850     std::atomic<bool> isMovingPhotoEnabled_ { false };
1851 
1852     std::shared_ptr<AbilityCallback> abilityCallback_;
1853     std::atomic<uint32_t> exposureDurationValue_ = 0;
1854 
1855     float apertureValue_ = 0.0;
1856 
ClearPreconfigProfiles()1857     inline void ClearPreconfigProfiles()
1858     {
1859         std::lock_guard<std::mutex> lock(preconfigProfilesMutex_);
1860         preconfigProfiles_ = nullptr;
1861     }
1862 
SetPreconfigProfiles(std::shared_ptr<PreconfigProfiles> preconfigProfiles)1863     inline void SetPreconfigProfiles(std::shared_ptr<PreconfigProfiles> preconfigProfiles)
1864     {
1865         std::lock_guard<std::mutex> lock(preconfigProfilesMutex_);
1866         preconfigProfiles_ = preconfigProfiles;
1867     }
1868 
GetPreconfigProfiles()1869     inline std::shared_ptr<PreconfigProfiles> GetPreconfigProfiles()
1870     {
1871         std::lock_guard<std::mutex> lock(preconfigProfilesMutex_);
1872         return preconfigProfiles_;
1873     }
1874 
SetInputDevice(sptr<CaptureInput> inputDevice)1875     inline void SetInputDevice(sptr<CaptureInput> inputDevice)
1876     {
1877         std::lock_guard<std::mutex> lock(inputDeviceMutex_);
1878         innerInputDevice_ = inputDevice;
1879     }
1880 
GetCameraAbilityContainer()1881     inline sptr<CameraAbilityContainer> GetCameraAbilityContainer()
1882     {
1883         std::lock_guard<std::mutex> lock(abilityContainerMutex_);
1884         return cameraAbilityContainer_;
1885     }
1886 
SetCaptureSession(sptr<ICaptureSession> captureSession)1887     inline void SetCaptureSession(sptr<ICaptureSession> captureSession)
1888     {
1889         std::lock_guard<std::mutex> lock(captureSessionMutex_);
1890         innerCaptureSession_ = captureSession;
1891     }
1892 
1893     virtual std::shared_ptr<PreconfigProfiles> GeneratePreconfigProfiles(
1894         PreconfigType preconfigType, ProfileSizeRatio preconfigRatio);
1895 
1896 private:
1897     std::mutex switchDeviceMutex_;
1898     std::mutex functionMapMutex_;
1899     std::mutex changeMetaMutex_;
1900     std::mutex sessionCallbackMutex_;
1901     std::mutex captureSessionMutex_;
1902     sptr<ICaptureSession> innerCaptureSession_ = nullptr;
1903     std::shared_ptr<SessionCallback> appCallback_;
1904     sptr<ICaptureSessionCallback> captureSessionCallback_;
1905     std::shared_ptr<ExposureCallback> exposureCallback_;
1906     std::shared_ptr<FocusCallback> focusCallback_;
1907     std::shared_ptr<MacroStatusCallback> macroStatusCallback_;
1908     std::shared_ptr<MoonCaptureBoostStatusCallback> moonCaptureBoostStatusCallback_;
1909     std::shared_ptr<FeatureDetectionStatusCallback> featureDetectionStatusCallback_;
1910     std::shared_ptr<SmoothZoomCallback> smoothZoomCallback_;
1911     std::shared_ptr<ARCallback> arCallback_;
1912     std::shared_ptr<EffectSuggestionCallback> effectSuggestionCallback_;
1913     std::shared_ptr<LcdFlashStatusCallback> lcdFlashStatusCallback_;
1914     std::shared_ptr<AutoDeviceSwitchCallback> autoDeviceSwitchCallback_;
1915     sptr<IFoldServiceCallback> foldStatusCallback_ = nullptr;
1916     std::vector<int32_t> skinSmoothBeautyRange_;
1917     std::vector<int32_t> faceSlendorBeautyRange_;
1918     std::vector<int32_t> skinToneBeautyRange_;
1919     std::mutex captureOutputSetsMutex_;
1920     std::set<wptr<CaptureOutput>, RefBaseCompare<CaptureOutput>> captureOutputSets_;
1921 
1922     std::mutex inputDeviceMutex_;
1923     sptr<CaptureInput> innerInputDevice_ = nullptr;
1924     volatile bool isSetMacroEnable_ = false;
1925     volatile bool isDepthFusionEnable_ = false;
1926     volatile bool isSetMoonCaptureBoostEnable_ = false;
1927     volatile bool isSetTripodDetectionEnable_ = false;
1928     volatile bool isSetSecureOutput_ = false;
1929     std::atomic<bool> isSetLowLightBoostEnable_ = false;
1930     static const std::unordered_map<camera_focus_state_t, FocusCallback::FocusState> metaFocusStateMap_;
1931     static const std::unordered_map<camera_exposure_state_t, ExposureCallback::ExposureState> metaExposureStateMap_;
1932 
1933     static const std::unordered_map<camera_filter_type_t, FilterType> metaFilterTypeMap_;
1934     static const std::unordered_map<FilterType, camera_filter_type_t> fwkFilterTypeMap_;
1935     static const std::unordered_map<BeautyType, camera_device_metadata_tag_t> fwkBeautyControlMap_;
1936     static const std::unordered_map<camera_device_metadata_tag_t, BeautyType> metaBeautyControlMap_;
1937     static const std::unordered_map<CameraEffectSuggestionType, EffectSuggestionType> metaEffectSuggestionTypeMap_;
1938     static const std::unordered_map<EffectSuggestionType, CameraEffectSuggestionType> fwkEffectSuggestionTypeMap_;
1939 
1940     sptr<CaptureOutput> metaOutput_ = nullptr;
1941     sptr<CaptureOutput> photoOutput_;
1942     std::atomic<int32_t> prevDuration_ = 0;
1943     sptr<CameraDeathRecipient> deathRecipient_ = nullptr;
1944     bool isColorSpaceSetted_ = false;
1945     atomic<bool> isDeferTypeSetted_ = false;
1946     atomic<bool> isAutoSwitchDevice_ = false;
1947     atomic<bool> isDeviceCapabilityChanged_ = false;
1948     atomic<bool> canAddFuncToMap_ = true;
1949 
1950     // Only for the SceneMode::CAPTURE and SceneMode::VIDEO mode
1951     map<std::string, std::function<void()>> functionMap;
1952 
1953     std::mutex preconfigProfilesMutex_;
1954     std::shared_ptr<PreconfigProfiles> preconfigProfiles_ = nullptr;
1955 
1956     // private tag
1957     uint32_t HAL_CUSTOM_AR_MODE = 0;
1958     uint32_t HAL_CUSTOM_LASER_DATA = 0;
1959     uint32_t HAL_CUSTOM_SENSOR_MODULE_TYPE = 0;
1960     uint32_t HAL_CUSTOM_LENS_FOCUS_DISTANCE = 0;
1961     uint32_t HAL_CUSTOM_SENSOR_SENSITIVITY = 0;
1962 
1963     std::mutex abilityContainerMutex_;
1964     sptr<CameraAbilityContainer> cameraAbilityContainer_ = nullptr;
1965     atomic<bool> supportSpecSearch_ = false;
1966     void CheckSpecSearch();
1967     void PopulateProfileLists(std::vector<Profile>& photoProfileList,
1968                               std::vector<Profile>& previewProfileList,
1969                               std::vector<VideoProfile>& videoProfileList);
1970     void PopulateSpecIdMaps(sptr<CameraDevice> device, int32_t modeName,
1971                             std::map<int32_t, std::vector<Profile>>& specIdPreviewMap,
1972                             std::map<int32_t, std::vector<Profile>>& specIdPhotoMap,
1973                             std::map<int32_t, std::vector<VideoProfile>>& specIdVideoMap);
1974     // Make sure you know what you are doing, you'd better to use {GetMode()} function instead of this variable.
1975     SceneMode currentMode_ = SceneMode::NORMAL;
1976     SceneMode guessMode_ = SceneMode::NORMAL;
1977     std::mutex moonCaptureBoostFeatureMutex_;
1978     std::shared_ptr<MoonCaptureBoostFeature> moonCaptureBoostFeature_ = nullptr;
1979     float focusDistance_ = 0.0;
1980     std::shared_ptr<MoonCaptureBoostFeature> GetMoonCaptureBoostFeature();
1981     void SetGuessMode(SceneMode mode);
1982     int32_t UpdateSetting(std::shared_ptr<OHOS::Camera::CameraMetadata> changedMetadata);
1983     Point CoordinateTransform(Point point);
1984     int32_t CalculateExposureValue(float exposureValue);
1985     Point VerifyFocusCorrectness(Point point);
1986     int32_t ConfigureOutput(sptr<CaptureOutput>& output);
1987     int32_t ConfigurePreviewOutput(sptr<CaptureOutput>& output);
1988     int32_t ConfigurePhotoOutput(sptr<CaptureOutput>& output);
1989     int32_t ConfigureVideoOutput(sptr<CaptureOutput>& output);
1990     std::shared_ptr<Profile> GetMaxSizePhotoProfile(ProfileSizeRatio sizeRatio);
1991     std::shared_ptr<Profile> GetPreconfigPreviewProfile();
1992     std::shared_ptr<Profile> GetPreconfigPhotoProfile();
1993     std::shared_ptr<VideoProfile> GetPreconfigVideoProfile();
1994     void CameraServerDied(pid_t pid);
1995     void InsertOutputIntoSet(sptr<CaptureOutput>& output);
1996     void RemoveOutputFromSet(sptr<CaptureOutput>& output);
1997     void OnSettingUpdated(std::shared_ptr<OHOS::Camera::CameraMetadata> changedMetadata);
1998     void OnResultReceived(std::shared_ptr<OHOS::Camera::CameraMetadata> changedMetadata);
1999     ColorSpaceInfo GetSupportedColorSpaceInfo();
2000     bool IsModeWithVideoStream();
2001     void SetDefaultColorSpace();
2002     void UpdateDeviceDeferredability();
2003     void ProcessProfilesAbilityId(const SceneMode supportModes);
2004     int32_t ProcessCaptureColorSpace(ColorSpaceInfo colorSpaceInfo, ColorSpace& fwkCaptureColorSpace);
2005     void ProcessFocusDistanceUpdates(const std::shared_ptr<OHOS::Camera::CameraMetadata>& result);
2006     void FindTagId();
2007     bool CheckFrameRateRangeWithCurrentFps(int32_t curMinFps, int32_t curMaxFps, int32_t minFps, int32_t maxFps);
2008     void SessionRemoveDeathRecipient();
2009     int32_t AdaptOutputVideoHighFrameRate(sptr<CaptureOutput>& output, sptr<ICaptureSession>& captureSession);
2010     CameraPosition GetUsedAsPosition();
2011     sptr<CameraDevice> FindFrontCamera();
2012     void StartVideoOutput();
2013     bool StopVideoOutput();
2014     void CreateAndSetFoldServiceCallback();
2015 };
2016 } // namespace CameraStandard
2017 } // namespace OHOS
2018 #endif // OHOS_CAMERA_CAPTURE_SESSION_H
2019