1 /*
2 * Copyright (c) 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 #include "OHAVSessionCallbackImpl.h"
17 #include "avcast_control_command.h"
18
19 namespace OHOS::AVSession {
~OHAVSessionCallbackImpl()20 OHAVSessionCallbackImpl::~OHAVSessionCallbackImpl()
21 {
22 }
23
OnPlay()24 void OHAVSessionCallbackImpl::OnPlay()
25 {
26 for (auto it = playCallbacks_.begin(); it != playCallbacks_.end(); ++it) {
27 it->first(avsession_, CONTROL_CMD_PLAY, it->second);
28 }
29 }
30
OnPause()31 void OHAVSessionCallbackImpl::OnPause()
32 {
33 for (auto it = pauseCallbacks_.begin(); it != pauseCallbacks_.end(); ++it) {
34 it->first(avsession_, CONTROL_CMD_PAUSE, it->second);
35 }
36 }
37
OnStop()38 void OHAVSessionCallbackImpl::OnStop()
39 {
40 for (auto it = stopCallbacks_.begin(); it != stopCallbacks_.end(); ++it) {
41 it->first(avsession_, CONTROL_CMD_STOP, it->second);
42 }
43 }
44
OnPlayNext()45 void OHAVSessionCallbackImpl::OnPlayNext()
46 {
47 for (auto it = playNextCallbacks_.begin(); it != playNextCallbacks_.end(); ++it) {
48 it->first(avsession_, CONTROL_CMD_PLAY_NEXT, it->second);
49 }
50 }
51
OnPlayPrevious()52 void OHAVSessionCallbackImpl::OnPlayPrevious()
53 {
54 for (auto it = playPreviousCallbacks_.begin(); it != playPreviousCallbacks_.end(); ++it) {
55 it->first(avsession_, CONTROL_CMD_PLAY_PREVIOUS, it->second);
56 }
57 }
58
OnFastForward(int64_t time)59 void OHAVSessionCallbackImpl::OnFastForward(int64_t time)
60 {
61 for (auto it = forwardCallbacks_.begin(); it != forwardCallbacks_.end(); ++it) {
62 it->first(avsession_, time, it->second);
63 }
64 }
65
OnRewind(int64_t time)66 void OHAVSessionCallbackImpl::OnRewind(int64_t time)
67 {
68 for (auto it = rewindCallbacks_.begin(); it != rewindCallbacks_.end(); ++it) {
69 it->first(avsession_, time, it->second);
70 }
71 }
72
OnSeek(int64_t time)73 void OHAVSessionCallbackImpl::OnSeek(int64_t time)
74 {
75 for (auto it = seekCallbacks_.begin(); it != seekCallbacks_.end(); ++it) {
76 it->first(avsession_, time, it->second);
77 }
78 }
79
OnSetLoopMode(int32_t loopMode)80 void OHAVSessionCallbackImpl::OnSetLoopMode(int32_t loopMode)
81 {
82 for (auto it = setLoopModeCallbacks_.begin(); it != setLoopModeCallbacks_.end(); ++it) {
83 it->first(avsession_, static_cast<AVSession_LoopMode>(loopMode), it->second);
84 }
85 }
86
OnToggleFavorite(const std::string & mediald)87 void OHAVSessionCallbackImpl::OnToggleFavorite(const std::string& mediald)
88 {
89 for (auto it = toggleFavoriteCallbacks_.begin(); it != toggleFavoriteCallbacks_.end(); ++it) {
90 it->first(avsession_, mediald.c_str(), it->second);
91 }
92 }
93
SetPlayCallback(OH_AVSession * avsession,AVSession_ControlCommand command,OH_AVSessionCallback_OnCommand callback,void * userData)94 AVSession_ErrCode OHAVSessionCallbackImpl::SetPlayCallback(OH_AVSession* avsession,
95 AVSession_ControlCommand command, OH_AVSessionCallback_OnCommand callback, void*userData)
96 {
97 if (avsession_ == nullptr) {
98 avsession_ = avsession;
99 }
100 auto it = std::find_if (playCallbacks_.begin(), playCallbacks_.end(),
101 [callback](const std::pair<OH_AVSessionCallback_OnCommand, void*> &element) {
102 return element.first == callback;
103 });
104 if (it == playCallbacks_.end()) {
105 playCallbacks_.emplace_back(std::make_pair(callback, userData));
106 }
107 return AV_SESSION_ERR_SUCCESS;
108 }
109
SetPauseCallback(OH_AVSession * avsession,AVSession_ControlCommand command,OH_AVSessionCallback_OnCommand callback,void * userData)110 AVSession_ErrCode OHAVSessionCallbackImpl::SetPauseCallback(OH_AVSession* avsession,
111 AVSession_ControlCommand command, OH_AVSessionCallback_OnCommand callback, void*userData)
112 {
113 if (avsession_ == nullptr) {
114 avsession_ = avsession;
115 }
116 auto it = std::find_if (pauseCallbacks_.begin(), pauseCallbacks_.end(),
117 [callback](const std::pair<OH_AVSessionCallback_OnCommand, void*> &element) {
118 return element.first == callback;
119 });
120 if (it== pauseCallbacks_.end()) {
121 pauseCallbacks_.emplace_back(std::make_pair(callback, userData));
122 }
123 return AV_SESSION_ERR_SUCCESS;
124 }
125
SetStopCallback(OH_AVSession * avsession,AVSession_ControlCommand command,OH_AVSessionCallback_OnCommand callback,void * userData)126 AVSession_ErrCode OHAVSessionCallbackImpl::SetStopCallback(OH_AVSession* avsession,
127 AVSession_ControlCommand command, OH_AVSessionCallback_OnCommand callback, void*userData)
128 {
129 if (avsession_ == nullptr) {
130 avsession_ = avsession;
131 }
132 auto it = std::find_if (stopCallbacks_.begin(), stopCallbacks_.end(),
133 [callback](const std::pair<OH_AVSessionCallback_OnCommand, void*> &element) {
134 return element.first == callback;
135 });
136 if (it == stopCallbacks_.end()) {
137 stopCallbacks_.emplace_back(std::make_pair(callback, userData));
138 }
139 return AV_SESSION_ERR_SUCCESS;
140 }
141
SetPlayNextCallback(OH_AVSession * avsession,AVSession_ControlCommand command,OH_AVSessionCallback_OnCommand callback,void * userData)142 AVSession_ErrCode OHAVSessionCallbackImpl::SetPlayNextCallback(OH_AVSession* avsession,
143 AVSession_ControlCommand command, OH_AVSessionCallback_OnCommand callback, void*userData)
144 {
145 if (avsession_ == nullptr) {
146 avsession_ = avsession;
147 }
148 auto it = std::find_if (playNextCallbacks_.begin(), playNextCallbacks_.end(),
149 [callback](const std::pair<OH_AVSessionCallback_OnCommand, void*> &element) {
150 return element.first == callback;
151 });
152 if (it == playNextCallbacks_.end()) {
153 playNextCallbacks_.emplace_back(std::make_pair(callback, userData));
154 }
155 return AV_SESSION_ERR_SUCCESS;
156 }
157
SetPlayPreviousCallback(OH_AVSession * avsession,AVSession_ControlCommand command,OH_AVSessionCallback_OnCommand callback,void * userData)158 AVSession_ErrCode OHAVSessionCallbackImpl::SetPlayPreviousCallback(OH_AVSession* avsession,
159 AVSession_ControlCommand command, OH_AVSessionCallback_OnCommand callback, void*userData)
160 {
161 if (avsession_ == nullptr) {
162 avsession_ = avsession;
163 }
164 auto it = std::find_if (playPreviousCallbacks_.begin(), playPreviousCallbacks_.end(),
165 [callback](const std::pair<OH_AVSessionCallback_OnCommand, void*> &element) {
166 return element.first == callback;
167 });
168 if (it == playPreviousCallbacks_.end()) {
169 playPreviousCallbacks_.emplace_back(std::make_pair(callback, userData));
170 }
171 return AV_SESSION_ERR_SUCCESS;
172 }
173
UnSetPlayCallback(OH_AVSession * avsession,AVSession_ControlCommand command,OH_AVSessionCallback_OnCommand callback)174 AVSession_ErrCode OHAVSessionCallbackImpl::UnSetPlayCallback(OH_AVSession* avsession,
175 AVSession_ControlCommand command, OH_AVSessionCallback_OnCommand callback)
176 {
177 std::remove_if (playCallbacks_.begin(), playCallbacks_.end(),
178 [callback](const std::pair<OH_AVSessionCallback_OnCommand, void*> &element) {
179 return element.first == callback;
180 });
181 return AV_SESSION_ERR_SUCCESS;
182 }
183
UnSetPauseCallback(OH_AVSession * avsession,AVSession_ControlCommand command,OH_AVSessionCallback_OnCommand callback)184 AVSession_ErrCode OHAVSessionCallbackImpl::UnSetPauseCallback(OH_AVSession* avsession,
185 AVSession_ControlCommand command, OH_AVSessionCallback_OnCommand callback)
186 {
187 std::remove_if (pauseCallbacks_.begin(), pauseCallbacks_.end(),
188 [callback](const std::pair<OH_AVSessionCallback_OnCommand, void*> &element) {
189 return element.first == callback;
190 });
191 return AV_SESSION_ERR_SUCCESS;
192 }
193
UnSetStopCallback(OH_AVSession * avsession,AVSession_ControlCommand command,OH_AVSessionCallback_OnCommand callback)194 AVSession_ErrCode OHAVSessionCallbackImpl::UnSetStopCallback(OH_AVSession* avsession,
195 AVSession_ControlCommand command, OH_AVSessionCallback_OnCommand callback)
196 {
197 std::remove_if (stopCallbacks_.begin(), stopCallbacks_.end(),
198 [callback](const std::pair<OH_AVSessionCallback_OnCommand, void*> &element) {
199 return element.first == callback;
200 });
201 return AV_SESSION_ERR_SUCCESS;
202 }
203
UnSetPlayNextCallback(OH_AVSession * avsession,AVSession_ControlCommand command,OH_AVSessionCallback_OnCommand callback)204 AVSession_ErrCode OHAVSessionCallbackImpl::UnSetPlayNextCallback(OH_AVSession* avsession,
205 AVSession_ControlCommand command, OH_AVSessionCallback_OnCommand callback)
206 {
207 std::remove_if (playNextCallbacks_.begin(), playNextCallbacks_.end(),
208 [callback](const std::pair<OH_AVSessionCallback_OnCommand, void*> &element) {
209 return element.first == callback;
210 });
211 return AV_SESSION_ERR_SUCCESS;
212 }
213
UnSetPlayPreviousCallback(OH_AVSession * avsession,AVSession_ControlCommand command,OH_AVSessionCallback_OnCommand callback)214 AVSession_ErrCode OHAVSessionCallbackImpl::UnSetPlayPreviousCallback(OH_AVSession* avsession,
215 AVSession_ControlCommand command, OH_AVSessionCallback_OnCommand callback)
216 {
217 std::remove_if (playPreviousCallbacks_.begin(), playPreviousCallbacks_.end(),
218 [callback](const std::pair<OH_AVSessionCallback_OnCommand, void*> &element) {
219 return element.first == callback;
220 });
221 return AV_SESSION_ERR_SUCCESS;
222 }
223
RegisterForwardCallback(OH_AVSession * avsession,OH_AVSessionCallback_OnFastForward callback,void * userData)224 AVSession_ErrCode OHAVSessionCallbackImpl::RegisterForwardCallback(OH_AVSession* avsession,
225 OH_AVSessionCallback_OnFastForward callback, void*userData)
226 {
227 if (avsession_ == nullptr) {
228 avsession_ = avsession;
229 }
230 auto it = std::find_if (forwardCallbacks_.begin(), forwardCallbacks_.end(),
231 [callback](const std::pair<OH_AVSessionCallback_OnFastForward, void*> &element) {
232 return element.first == callback;
233 });
234 if (it == forwardCallbacks_.end()) {
235 forwardCallbacks_.emplace_back(std::make_pair(callback, userData));
236 }
237 return AV_SESSION_ERR_SUCCESS;
238 }
239
UnregisterForwardCallback(OH_AVSession * avsession,OH_AVSessionCallback_OnFastForward callback)240 AVSession_ErrCode OHAVSessionCallbackImpl::UnregisterForwardCallback(OH_AVSession* avsession,
241 OH_AVSessionCallback_OnFastForward callback)
242 {
243 std::remove_if (forwardCallbacks_.begin(), forwardCallbacks_.end(),
244 [callback](const std::pair<OH_AVSessionCallback_OnFastForward, void*> &element) {
245 return element.first == callback;
246 });
247 return AV_SESSION_ERR_SUCCESS;
248 }
249
RegisterRewindCallback(OH_AVSession * avsession,OH_AVSessionCallback_OnRewind callback,void * userData)250 AVSession_ErrCode OHAVSessionCallbackImpl::RegisterRewindCallback(OH_AVSession* avsession,
251 OH_AVSessionCallback_OnRewind callback, void*userData)
252 {
253 if (avsession_ == nullptr) {
254 avsession_ = avsession;
255 }
256 auto it = std::find_if (rewindCallbacks_.begin(), rewindCallbacks_.end(),
257 [callback](const std::pair<OH_AVSessionCallback_OnRewind, void*> &element) {
258 return element.first == callback;
259 });
260 if (it == rewindCallbacks_.end()) {
261 rewindCallbacks_.emplace_back(std::make_pair(callback, userData));
262 }
263 return AV_SESSION_ERR_SUCCESS;
264 }
265
UnregisterRewindCallback(OH_AVSession * avsession,OH_AVSessionCallback_OnRewind callback)266 AVSession_ErrCode OHAVSessionCallbackImpl::UnregisterRewindCallback(OH_AVSession* avsession,
267 OH_AVSessionCallback_OnRewind callback)
268 {
269 std::remove_if (rewindCallbacks_.begin(), rewindCallbacks_.end(),
270 [callback](const std::pair<OH_AVSessionCallback_OnRewind, void*> &element) {
271 return element.first == callback;
272 });
273 return AV_SESSION_ERR_SUCCESS;
274 }
275
RegisterSeekCallback(OH_AVSession * avsession,OH_AVSessionCallback_OnSeek callback,void * userData)276 AVSession_ErrCode OHAVSessionCallbackImpl::RegisterSeekCallback(OH_AVSession* avsession,
277 OH_AVSessionCallback_OnSeek callback, void*userData)
278 {
279 if (avsession_ == nullptr) {
280 avsession_ = avsession;
281 }
282 auto it = std::find_if (seekCallbacks_.begin(), seekCallbacks_.end(),
283 [callback](const std::pair<OH_AVSessionCallback_OnSeek, void*> &element) {
284 return element.first == callback;
285 });
286 if (it == seekCallbacks_.end()) {
287 seekCallbacks_.emplace_back(std::make_pair(callback, userData));
288 }
289 return AV_SESSION_ERR_SUCCESS;
290 }
291
UnregisterSeekCallback(OH_AVSession * avsession,OH_AVSessionCallback_OnSeek callback)292 AVSession_ErrCode OHAVSessionCallbackImpl::UnregisterSeekCallback(OH_AVSession* avsession,
293 OH_AVSessionCallback_OnSeek callback)
294 {
295 std::remove_if (seekCallbacks_.begin(), seekCallbacks_.end(),
296 [callback](const std::pair<OH_AVSessionCallback_OnSeek, void*> &element) {
297 return element.first == callback;
298 });
299 return AV_SESSION_ERR_SUCCESS;
300 }
301
RegisterSetLoopModeCallback(OH_AVSession * avsession,OH_AVSessionCallback_OnSetLoopMode callback,void * userData)302 AVSession_ErrCode OHAVSessionCallbackImpl::RegisterSetLoopModeCallback(OH_AVSession* avsession,
303 OH_AVSessionCallback_OnSetLoopMode callback, void*userData)
304 {
305 if (avsession_ == nullptr) {
306 avsession_ = avsession;
307 }
308 auto it = std::find_if (setLoopModeCallbacks_.begin(), setLoopModeCallbacks_.end(),
309 [callback](const std::pair<OH_AVSessionCallback_OnSetLoopMode, void*> &element) {
310 return element.first == callback;
311 });
312 if (it == setLoopModeCallbacks_.end()) {
313 setLoopModeCallbacks_.emplace_back(std::make_pair(callback, userData));
314 }
315 return AV_SESSION_ERR_SUCCESS;
316 }
317
UnregisterSetLoopModeCallback(OH_AVSession * avsession,OH_AVSessionCallback_OnSetLoopMode callback)318 AVSession_ErrCode OHAVSessionCallbackImpl::UnregisterSetLoopModeCallback(OH_AVSession* avsession,
319 OH_AVSessionCallback_OnSetLoopMode callback)
320 {
321 std::remove_if (setLoopModeCallbacks_.begin(), setLoopModeCallbacks_.end(),
322 [callback](const std::pair<OH_AVSessionCallback_OnSetLoopMode, void*> &element) {
323 return element.first == callback;
324 });
325 return AV_SESSION_ERR_SUCCESS;
326 }
327
RegisterToggleFavoriteCallback(OH_AVSession * avsession,OH_AVSessionCallback_OnToggleFavorite callback,void * userData)328 AVSession_ErrCode OHAVSessionCallbackImpl::RegisterToggleFavoriteCallback(OH_AVSession* avsession,
329 OH_AVSessionCallback_OnToggleFavorite callback, void* userData)
330 {
331 if (avsession_ == nullptr) {
332 avsession_ = avsession;
333 }
334 auto it = std::find_if (toggleFavoriteCallbacks_.begin(), toggleFavoriteCallbacks_.end(),
335 [callback](const std::pair<OH_AVSessionCallback_OnToggleFavorite, void*> &element) {
336 return element.first == callback;
337 });
338 if (it == toggleFavoriteCallbacks_.end()) {
339 toggleFavoriteCallbacks_.emplace_back(std::make_pair(callback, userData));
340 }
341 return AV_SESSION_ERR_SUCCESS;
342 }
343
UnregisterToggleFavoriteCallback(OH_AVSession * avsession,OH_AVSessionCallback_OnToggleFavorite callback)344 AVSession_ErrCode OHAVSessionCallbackImpl::UnregisterToggleFavoriteCallback(OH_AVSession* avsession,
345 OH_AVSessionCallback_OnToggleFavorite callback)
346 {
347 std::remove_if (toggleFavoriteCallbacks_.begin(), toggleFavoriteCallbacks_.end(),
348 [callback](const std::pair<OH_AVSessionCallback_OnToggleFavorite, void*> &element) {
349 return element.first == callback;
350 });
351 return AV_SESSION_ERR_SUCCESS;
352 }
353 }