1 /*
2  * Copyright (c) 2021-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_DCAMERA_SOURCE_EVENT_H
17 #define OHOS_DCAMERA_SOURCE_EVENT_H
18 
19 #include <variant>
20 
21 #include "v1_1/dcamera_types.h"
22 
23 #include "dcamera_event_cmd.h"
24 #include "dcamera_index.h"
25 
26 namespace OHOS {
27 namespace DistributedHardware {
28 using namespace OHOS::HDI::DistributedCamera::V1_1;
29 typedef enum {
30     DCAMERA_EVENT_REGIST = 0,
31     DCAMERA_EVENT_UNREGIST = 1,
32     DCAMERA_EVENT_OPEN = 2,
33     DCAMERA_EVENT_CLOSE = 3,
34     DCAMERA_EVENT_CONFIG_STREAMS = 4,
35     DCAMERA_EVENT_RELEASE_STREAMS = 5,
36     DCAMERA_EVENT_START_CAPTURE = 6,
37     DCAMERA_EVENT_STOP_CAPTURE = 7,
38     DCAMERA_EVENT_UPDATE_SETTINGS = 8,
39     DCAMERA_EVENT_NOFIFY = 9,
40     DCAMERA_EVENT_HICOLLIE = 10,
41     DCAMERA_EVENT_GET_FULLCAPS = 11,
42 } DCAMERA_EVENT;
43 
44 class DCameraRegistParam {
45 public:
46     DCameraRegistParam() = default;
DCameraRegistParam(std::string devId,std::string dhId,std::string reqId,std::string sinkParam,std::string srcParam)47     DCameraRegistParam(std::string devId, std::string dhId, std::string reqId, std::string sinkParam,
48         std::string srcParam) : devId_(devId), dhId_(dhId), reqId_(reqId), sinkParam_(sinkParam), srcParam_(srcParam)
49     {}
50     ~DCameraRegistParam() = default;
51     std::string devId_;
52     std::string dhId_;
53     std::string reqId_;
54     std::string sinkParam_;
55     std::string srcParam_;
56 };
57 
58 class DCameraSourceEvent {
59 public:
DCameraSourceEvent()60     explicit DCameraSourceEvent() {}
61     ~DCameraSourceEvent() = default;
DCameraSourceEvent(DCAMERA_EVENT eventType)62     explicit DCameraSourceEvent(DCAMERA_EVENT eventType)
63         : eventType_(eventType) {}
DCameraSourceEvent(DCAMERA_EVENT eventType,DCameraIndex & index)64     explicit DCameraSourceEvent(DCAMERA_EVENT eventType, DCameraIndex& index)
65         : eventType_(eventType)
66     {
67         eventParam_ = index;
68     }
69 
DCameraSourceEvent(DCAMERA_EVENT eventType,std::shared_ptr<DCameraRegistParam> & param)70     explicit DCameraSourceEvent(DCAMERA_EVENT eventType,
71         std::shared_ptr<DCameraRegistParam>& param) : eventType_(eventType)
72     {
73         eventParam_ = param;
74     }
75 
DCameraSourceEvent(DCAMERA_EVENT eventType,const std::vector<std::shared_ptr<DCStreamInfo>> & streamInfos)76     explicit DCameraSourceEvent(DCAMERA_EVENT eventType,
77         const std::vector<std::shared_ptr<DCStreamInfo>>& streamInfos) : eventType_(eventType)
78     {
79         eventParam_ = std::move(streamInfos);
80     }
81 
DCameraSourceEvent(DCAMERA_EVENT eventType,const std::vector<std::shared_ptr<DCCaptureInfo>> & captureInfos)82     explicit DCameraSourceEvent(DCAMERA_EVENT eventType,
83         const std::vector<std::shared_ptr<DCCaptureInfo>>& captureInfos) : eventType_(eventType)
84     {
85         eventParam_ = std::move(captureInfos);
86     }
87 
DCameraSourceEvent(DCAMERA_EVENT eventType,const std::vector<std::shared_ptr<DCameraSettings>> & settings)88     explicit DCameraSourceEvent(DCAMERA_EVENT eventType,
89         const std::vector<std::shared_ptr<DCameraSettings>>& settings) : eventType_(eventType)
90     {
91         eventParam_ = std::move(settings);
92     }
93 
DCameraSourceEvent(DCAMERA_EVENT eventType,const std::vector<int> & streamIds)94     explicit DCameraSourceEvent(DCAMERA_EVENT eventType, const std::vector<int>& streamIds)
95         : eventType_(eventType)
96     {
97         eventParam_ = std::move(streamIds);
98     }
99 
DCameraSourceEvent(DCAMERA_EVENT eventType,std::shared_ptr<DCameraEvent> & camEvent)100     explicit DCameraSourceEvent(DCAMERA_EVENT eventType, std::shared_ptr<DCameraEvent>& camEvent)
101         : eventType_(eventType)
102     {
103         eventParam_ = camEvent;
104     }
105 
106     int32_t GetDCameraIndex(DCameraIndex& index);
107     int32_t GetDCameraRegistParam(std::shared_ptr<DCameraRegistParam>& param);
108     int32_t GetStreamInfos(std::vector<std::shared_ptr<DCStreamInfo>>& streamInfos);
109     int32_t GetCaptureInfos(std::vector<std::shared_ptr<DCCaptureInfo>>& captureInfos);
110     int32_t GetCameraSettings(std::vector<std::shared_ptr<DCameraSettings>>& settings);
111     int32_t GetStreamIds(std::vector<int>& streamIds);
112     int32_t GetCameraEvent(std::shared_ptr<DCameraEvent>& camEvent);
113     DCAMERA_EVENT GetEventType();
114 
115 private:
116     using EventParam = std::variant<std::monostate,
117         DCameraIndex,
118         std::shared_ptr<DCameraRegistParam>,
119         std::vector<std::shared_ptr<DCStreamInfo>>,
120         std::vector<std::shared_ptr<DCCaptureInfo>>,
121         std::vector<std::shared_ptr<DCameraSettings>>,
122         std::vector<int>, std::shared_ptr<DCameraEvent>>;
123 
124 private:
125     DCAMERA_EVENT eventType_;
126     EventParam eventParam_;
127 };
128 } // namespace DistributedHardware
129 } // namespace OHOS
130 #endif // OHOS_DCAMERA_SOURCE_EVENT_H
131