1 /*
2 * Copyright (c) 2023 Shenzhen Kaihong Digital Industry Development 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_SHARING_EVENT_COMM_H
17 #define OHOS_SHARING_EVENT_COMM_H
18
19 #include <memory>
20 #include <string>
21 #include "agent/agent_def.h"
22 #include "const_def.h"
23 #include "sharing_log.h"
24 #include "surface.h"
25
26 #define MAKE_EVENT_TYPE(type, event) (((type) << 7) | (event) << 4)
27
28 #define EVENT_COMMON EVENT_COMMON_BASE = MAKE_EVENT_TYPE(0, 0)
29 #define EVENT_CONTEXT \
30 EVENT_CONTEXT_BASE = MAKE_EVENT_TYPE(1, 0), EVENT_CONTEXTMGR_CREATE, EVENT_CONTEXTMGR_DESTROY, \
31 EVENT_CONTEXTMGR_AGENT_CREATE, EVENT_CONTEXT_AGENT_CREATE, EVENT_CONTEXT_AGENT_DESTROY, \
32 EVENT_CONTEXT_MIXPLAYER_WINDOW_CREATE, EVENT_CONTEXT_MIXPLAYER_WINDOW_SETTING, \
33 EVENT_CONTEXT_MIXPLAYER_WINDOW_CLOSE, EVENT_CONTEXT_MIXPLAYER_CREATE, EVENT_CONTEXT_MIXPLAYER_DESTROY, \
34 EVENT_CONTEXT_MIXPLAYER_ADD, EVENT_CONTEXT_MIXPLAYER_REMOVE, EVENT_CONTEXT_MIXPLAYER_START, \
35 EVENT_CONTEXT_MIXPLAYER_STOP, EVENT_CONTEXT_STATE_PRODUCER_DESTROY, EVENT_CONTEXTMGR_STATE_CHANNEL_DESTROY, \
36 EVENT_CONTEXT_STATE_AGENT_DESTROY, EVENT_CONTEXT_STATE_MIXPLAYER_DESTROY
37
38 #define EVENT_AGENT \
39 EVENT_AGENT_BASE = MAKE_EVENT_TYPE(2, 0), EVENT_AGENT_START, EVENT_AGENT_PAUSE, EVENT_AGENT_RESUME, \
40 EVENT_AGENT_DESTROY, EVENT_AGENT_PLAY_START, EVENT_AGENT_PLAY_STOP, EVENT_AGENT_PLAY_PAUSE, \
41 EVENT_AGENT_PLAY_RESUME, EVENT_AGENT_CHANNEL_SETSCENETYPE, EVENT_AGENT_CHANNEL_SETKEYREDIRECT, \
42 EVENT_AGENT_CHANNEL_APPENDSURFACE, EVENT_AGENT_CHANNEL_REMOVESURFACE, EVENT_AGENT_STATE_CHANNEL_REMOVESURFACE, \
43 EVENT_AGENT_STATE_CHANNEL_APPENDSURFACE, EVENT_AGENT_PROSUMER_START, EVENT_AGENT_PROSUMER_STOP, \
44 EVENT_AGENT_PROSUMER_PAUSE, EVENT_AGENT_PROSUMER_RESUME, EVENT_AGENT_STATE_PROSUMER_CREATE, \
45 EVENT_AGENT_STATE_PROSUMER_START, EVENT_AGENT_STATE_PROSUMER_STOP, EVENT_AGENT_STATE_PROSUMER_PAUSE, \
46 EVENT_AGENT_STATE_PROSUMER_RESUME, EVENT_AGENT_STATE_PROSUMER_DESTROY, EVENT_AGENT_STATE_PLAY_START, \
47 EVENT_AGENT_STATE_PLAY_STOP, EVENT_AGENT_PROSUMER_ERROR, EVENT_AGENT_CHANNEL_SETVOLUME, EVENT_AGENT_KEYMODE_START, \
48 EVENT_AGENT_KEYMODE_STOP, EVENT_AGEINT_ACCELERATION_DONE, EVENT_AGENT_DECODER_DIED, \
49 EVENT_AGENT_STATE_PROSUMER_INIT
50
51 #define EVENT_SESSION EVENT_SESSION_BASE = MAKE_EVENT_TYPE(3, 0), EVENT_SESSION_INIT, EVENT_SESSION_TEARDOWN
52 #define EVENT_MEDIA \
53 EVENT_MEDIA_BASE = MAKE_EVENT_TYPE(4, 0), EVENT_MEDIA_CHANNEL_CREATE, EVENT_MEDIA_CHANNEL_DESTROY, \
54 EVENT_MEDIA_CONSUMER_CREATE, EVENT_MEDIA_CONSUMER_DESTROY, EVENT_MEDIA_CONSUMER_START, EVENT_MEDIA_CONSUMER_STOP, \
55 EVENT_MEDIA_CONSUMER_PAUSE, EVENT_MEDIA_CONSUMER_RESUME, EVENT_MEDIA_PLAY_START, EVENT_MEDIA_PLAY_STOP, \
56 EVENT_MEDIA_PRODUCER_CREATE, EVENT_MEDIA_PRODUCER_DESTROY, EVENT_MEDIA_PRODUCER_START, EVENT_MEDIA_PRODUCER_STOP, \
57 EVENT_MEDIA_PRODUCER_PAUSE, EVENT_MEDIA_PRODUCER_RESUME, EVENT_MEDIA_MIXPLAYER_CREATE, \
58 EVENT_MEDIA_MIXPLAYER_DESTROY, EVENT_MEDIA_MIXPLAYER_START, EVENT_MEDIA_MIXPLAYER_STOP, \
59 EVENT_MEDIA_CHANNEL_APPENDSURFACE, EVENT_MEDIA_CHANNEL_REMOVESURFACE, EVENT_MEDIA_CHANNEL_SETSCENETYPE, \
60 EVENT_MEDIA_CHANNEL_SETVOLUME, EVENT_MEDIA_CHANNEL_KEY_REDIRECT, EVENT_AGENT_STATE_WRITE_WARNING
61
62 #define EVENT_SCHEDULER EVENT_SCHEDULER_BASE = MAKE_EVENT_TYPE(5, 0)
63
64 #define EVENT_INTERACTION \
65 EVENT_INTERACTION_BASE = MAKE_EVENT_TYPE(6, 0), EVENT_INTERACTIONMGR_REMOVE_INTERACTION, \
66 EVENT_INTERACTION_MSG_ERROR, EVENT_INTERACTION_STATE_AGENT_DESTROYED, EVENT_INTERACTION_STATE_CONTEXT_DESTROYED, \
67 EVENT_INTERACTIONMGR_DESTROY_INTERACTION, EVENT_INTERACTION_ACCELERATION_DONE, \
68 EVENT_INTERACTION_STATE_REMOVE_SURFACE, EVENT_INTERACTION_DECODER_DIED
69
70 #define EVENT_CONFIGURE \
71 EVENT_CONFIGURE_BASE = MAKE_EVENT_TYPE(7, 0), EVENT_CONFIGURE_READY, EVENT_CONFIGURE_INTERACT, \
72 EVENT_CONFIGURE_MEDIACHANNEL, EVENT_CONFIGURE_CONTEXT, EVENT_CONFIGURE_WINDOW
73
74 #define EVENT_WFD \
75 EVENT_WFD_BASE = MAKE_EVENT_TYPE(9, 0), EVENT_WFD_MEDIA_INIT, EVENT_WFD_STATE_MEDIA_INIT, \
76 EVENT_WFD_NOTIFY_RTSP_PLAYED, EVENT_WFD_NOTIFY_RTSP_TEARDOWN, EVENT_WFD_REQUEST_IDR
77
78 #define EVENT_SCREEN_CAPTURE \
79 EVENT_SCREEN_CAPTURE_BASE = MAKE_EVENT_TYPE(11, 0), EVENT_SCREEN_CAPTURE_INIT
80
81 namespace OHOS {
82 namespace Sharing {
83
84 enum ClassType {
85 CLASS_TYPE_INTERACTION,
86 CLASS_TYPE_SCHEDULER,
87 CLASS_TYPE_CONTEXT,
88 CLASS_TYPE_AGENT,
89 CLASS_TYPE_SESSION,
90 CLASS_TYPE_CONSUMER,
91 CLASS_TYPE_PRODUCER,
92 };
93
94 enum EventType {
95 EVENT_COMMON,
96 EVENT_CONTEXT,
97 EVENT_AGENT,
98 EVENT_SESSION,
99 EVENT_MEDIA,
100 EVENT_SCHEDULER,
101 EVENT_INTERACTION,
102 EVENT_CONFIGURE,
103 EVENT_VIDEOCHAT,
104 EVENT_WFD,
105 // player custom event
106 EVENT_PLAYER,
107 EVENT_SCREEN_CAPTURE,
108 };
109
110 enum ModuleType {
111 MODULE_CONTEXT = 1000,
112 MODULE_AGENT,
113 MODULE_MEDIACHANNEL,
114 MODULE_INTERACTION,
115 MODULE_WINDOW,
116 MODULE_CONFIGURE,
117 MODULE_DATACENTER,
118 };
119
120 struct FromMsg {
121 using Ptr = std::shared_ptr<FromMsg>;
122
123 uint32_t srcId = INVALID_ID;
124 uint32_t fromMgr = INVALID_ID;
125 };
126
127 struct ToMsg {
128 using Ptr = std::shared_ptr<ToMsg>;
129
130 uint32_t toMgr = INVALID_ID;
131 uint32_t dstId = INVALID_ID;
132 };
133
134 struct EventMsg : public FromMsg,
135 public ToMsg {
136 using Ptr = std::shared_ptr<EventMsg>;
137
138 virtual ~EventMsg() = default;
139
140 int32_t requestId = 0;
141 EventType type;
142 SharingErrorCode errorCode = ERR_OK;
143 };
144
145 struct ContextEventMsg : public EventMsg {
146 using Ptr = std::shared_ptr<ContextEventMsg>;
147
148 uint32_t agentId = INVALID_ID;
149 uint64_t surfaceId = INVALID_ID;
150 std::string className;
151 sptr<Surface> surface = nullptr;
152 AgentType agentType;
153 MediaType mediaType;
154 };
155
156 struct AgentEventMsg : public ContextEventMsg {
157 using Ptr = std::shared_ptr<AgentEventMsg>;
158
159 bool keyRedirect;
160 float volume;
161 uint32_t prosumerId = INVALID_ID;
162 SceneType sceneType;
163 };
164
165 struct SessionEventMsg : public AgentEventMsg {
166 using Ptr = std::shared_ptr<SessionEventMsg>;
167 };
168
169 struct AgentStatusMsg {
170 using Ptr = std::shared_ptr<AgentStatusMsg>;
171
172 uint32_t status;
173 uint32_t agentId = INVALID_ID;
174 SharingErrorCode errorCode = ERR_OK;
175 EventMsg::Ptr msg = nullptr;
176 };
177
178 struct SessionStatusMsg : public AgentStatusMsg {
179 using Ptr = std::shared_ptr<SessionStatusMsg>;
180
181 bool keyRedirect;
182 float volume;
183 uint32_t prosumerId = INVALID_ID;
184 uint64_t surfaceId = 0;
185 std::string className;
186 sptr<Surface> surface = nullptr;
187 MediaType mediaType;
188 SceneType sceneType;
189 };
190
191 struct WindowProperty {
192 using Ptr = std::shared_ptr<WindowProperty>;
193
194 bool isShow = true;
195 bool isFull = true;
196 uint32_t width = 0;
197 uint32_t height = 0;
198 int32_t startX = -1;
199 int32_t startY = -1;
200 };
201
202 struct MixPlayerEventMsg : public ContextEventMsg {
203 using Ptr = std::shared_ptr<MixPlayerEventMsg>;
204
205 uint32_t channelId = INVALID_ID;
206 uint32_t mixPlayerId = INVALID_ID;
207 WindowProperty::Ptr windowProperty = nullptr;
208 };
209
210 struct InteractionEventMsg : public EventMsg {
211 using Ptr = std::shared_ptr<InteractionEventMsg>;
212
213 uint32_t agentId = INVALID_ID;
214 uint32_t contextId = INVALID_ID;
215 uint64_t surfaceId = INVALID_ID;
216 AgentType agentType = NONE_AGENT;
217 };
218
219 struct AudioTrack {
220 using Ptr = std::shared_ptr<AudioTrack>;
221
222 uint32_t channels = 0;
223 uint32_t sampleBit = 0;
224 uint32_t sampleRate = 0;
225 CodecId codecId = CodecId::CODEC_NONE;
226 };
227
228 struct VideoTrack {
229 using Ptr = std::shared_ptr<VideoTrack>;
230
231 uint32_t width = 0;
232 uint32_t height = 0;
233 uint32_t frameRate = 0;
234 CodecId codecId = CodecId::CODEC_NONE;
235 };
236
237 struct SharingEvent {
238 std::string description;
239 EventMsg::Ptr eventMsg;
240 ClassType emitterType = CLASS_TYPE_SCHEDULER;
241 ClassType listenerType = CLASS_TYPE_SCHEDULER;
242 };
243
244 template <typename T>
ConvertEventMsg(SharingEvent & event)245 std::shared_ptr<T> ConvertEventMsg(SharingEvent &event)
246 {
247 if (event.eventMsg == nullptr) {
248 SHARING_LOGE("event msg null.");
249 return nullptr;
250 }
251 auto eventMsg = std::static_pointer_cast<T>(event.eventMsg);
252 if (eventMsg == nullptr) {
253 SHARING_LOGE("null.");
254 return nullptr;
255 }
256
257 return eventMsg;
258 }
259
260 } // namespace Sharing
261 } // namespace OHOS
262 #endif
263