1 /*
2  * Copyright (c) 2023-2024 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_SCAN_SESSION_H
17 #define OHOS_CAMERA_SCAN_SESSION_H
18 
19 #include <mutex>
20 #include "capture_session.h"
21 #include "icapture_session.h"
22 
23 namespace OHOS {
24 namespace CameraStandard {
25 
26 class BrightnessStatusCallback {
27 public:
28     BrightnessStatusCallback() = default;
29     virtual ~BrightnessStatusCallback() = default;
30     virtual void OnBrightnessStatusChanged(bool state) = 0;
31 };
32 
33 class ScanSession : public CaptureSession {
34 public:
35     class ScanSessionMetadataResultProcessor : public MetadataResultProcessor {
36     public:
ScanSessionMetadataResultProcessor(wptr<ScanSession> session)37         explicit ScanSessionMetadataResultProcessor(wptr<ScanSession> session) : session_(session) {}
38         void ProcessCallbacks(
39             const uint64_t timestamp, const std::shared_ptr<OHOS::Camera::CameraMetadata>& result) override;
40 
41     private:
42         wptr<ScanSession> session_;
43     };
44 
ScanSession(sptr<ICaptureSession> & ScanSession)45     explicit ScanSession(sptr<ICaptureSession> &ScanSession): CaptureSession(ScanSession)
46     {
47         metadataResultProcessor_ = std::make_shared<ScanSessionMetadataResultProcessor>(this);
48     }
49     ~ScanSession();
50 
51     int32_t AddOutput(sptr<CaptureOutput> &output) override;
52 
53     /**
54      * @brief Determine if the given Ouput can be added to session.
55      *
56      * @param CaptureOutput to be added to session.
57      */
58     bool CanAddOutput(sptr<CaptureOutput>& output) override;
59 
60     bool IsBrightnessStatusSupported();
61 
62     void RegisterBrightnessStatusCallback(std::shared_ptr<BrightnessStatusCallback> brightnessStatusCallback);
63 
64     void UnRegisterBrightnessStatusCallback();
65 
66 private:
67     void SetBrightnessStatusReport(uint8_t state);
68 
69     void ProcessBrightnessStatusChange(const std::shared_ptr<OHOS::Camera::CameraMetadata>& result);
70 
SetBrightnessStatusCallback(std::shared_ptr<BrightnessStatusCallback> callback)71     inline void SetBrightnessStatusCallback(std::shared_ptr<BrightnessStatusCallback> callback)
72     {
73         std::lock_guard<std::mutex> lock(brightnessStatusCallbackMutex_);
74         brightnessStatusCallback_ = callback;
75     }
GetBrightnessStatusCallback()76     inline std::shared_ptr<BrightnessStatusCallback> GetBrightnessStatusCallback()
77     {
78         std::lock_guard<std::mutex> lock(brightnessStatusCallbackMutex_);
79         return brightnessStatusCallback_;
80     }
81 
82     std::mutex brightnessStatusCallbackMutex_;
83     std::shared_ptr<BrightnessStatusCallback> brightnessStatusCallback_;
84     bool lastBrightnessStatus_ = false;
85     bool firstBrightnessStatusCome_ = false;
86 };
87 } // namespace CameraStandard
88 } // namespace OHOS
89 #endif // OHOS_CAMERA_SCAN_SESSION_H