• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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