• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2023 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 "avcontroller_item.h"
17 #include "ipc_skeleton.h"
18 #include "avsession_errors.h"
19 #include "avsession_log.h"
20 #include "avsession_pixel_map_adapter.h"
21 #include "avsession_trace.h"
22 #include "command_send_limit.h"
23 #include "avsession_utils.h"
24 #include "permission_checker.h"
25 #include "avsession_sysevent.h"
26 #include "want_params.h"
27 
28 #if !defined(WINDOWS_PLATFORM) and !defined(MAC_PLATFORM) and !defined(IOS_PLATFORM)
29 #include <malloc.h>
30 #endif
31 
32 namespace OHOS::AVSession {
AVControllerItem(pid_t pid,const sptr<AVSessionItem> & session,int32_t userId)33 AVControllerItem::AVControllerItem(pid_t pid, const sptr<AVSessionItem>& session, int32_t userId)
34     : pid_(pid), session_(session), userId_(userId)
35 {
36     sessionId_ = session_->GetSessionId();
37     SLOGI("construct sessionId=%{public}s, pid=%{public}d, userId=%{public}d",
38         AVSessionUtils::GetAnonySessionId(sessionId_).c_str(), static_cast<int>(pid_), userId_);
39 }
40 
~AVControllerItem()41 AVControllerItem::~AVControllerItem()
42 {
43     SLOGI("destroy sessionId=%{public}s, pid=%{public}d, userId=%{public}d",
44         AVSessionUtils::GetAnonySessionId(sessionId_).c_str(), static_cast<int>(pid_), userId_);
45 }
46 
GetUserId() const47 int32_t AVControllerItem::GetUserId() const
48 {
49     return userId_;
50 }
51 
RegisterCallbackInner(const sptr<IRemoteObject> & callback)52 int32_t AVControllerItem::RegisterCallbackInner(const sptr<IRemoteObject>& callback)
53 {
54     std::lock_guard lockGuard(callbackMutex_);
55     SLOGD("do register callback for controller %{public}d", static_cast<int>(pid_));
56     callback_ = iface_cast<AVControllerCallbackProxy>(callback);
57     CHECK_AND_RETURN_RET_LOG(callback_ != nullptr, AVSESSION_ERROR, "RegisterCallbackInner callback_ is nullptr");
58     return AVSESSION_SUCCESS;
59 }
60 
RegisterAVControllerCallback(const std::shared_ptr<AVControllerCallback> & callback)61 int32_t AVControllerItem::RegisterAVControllerCallback(const std::shared_ptr<AVControllerCallback> &callback)
62 {
63     std::lock_guard lockGuard(callbackMutex_);
64     innerCallback_ = callback;
65     CHECK_AND_RETURN_RET_LOG(innerCallback_ != nullptr, AVSESSION_ERROR, "RegisterCallbackInner callback_ is nullptr");
66     return AVSESSION_SUCCESS;
67 }
68 
GetAVCallMetaData(AVCallMetaData & avCallMetaData)69 int32_t AVControllerItem::GetAVCallMetaData(AVCallMetaData& avCallMetaData)
70 {
71     std::lock_guard lockGuard(sessionMutex_);
72     CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "session not exist");
73     avCallMetaData = session_->GetAVCallMetaData();
74     return AVSESSION_SUCCESS;
75 }
76 
GetAVCallState(AVCallState & avCallState)77 int32_t AVControllerItem::GetAVCallState(AVCallState& avCallState)
78 {
79     std::lock_guard lockGuard(sessionMutex_);
80     CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "session not exist");
81     avCallState = session_->GetAVCallState();
82     return AVSESSION_SUCCESS;
83 }
84 
85 // LCOV_EXCL_START
GetAVPlaybackState(AVPlaybackState & state)86 int32_t AVControllerItem::GetAVPlaybackState(AVPlaybackState& state)
87 {
88     std::lock_guard lockGuard(sessionMutex_);
89     CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "session not exist");
90     state = session_->GetPlaybackState();
91     return AVSESSION_SUCCESS;
92 }
93 // LCOV_EXCL_STOP
94 
GetAVMetaData(AVMetaData & data)95 int32_t AVControllerItem::GetAVMetaData(AVMetaData& data)
96 {
97     std::lock_guard lockGuard(sessionMutex_);
98     CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "session not exist");
99     data = session_->GetMetaData();
100     if (data.GetMediaImage() != nullptr && !data.GetMediaImageUri().empty()) {
101         SLOGD("isFromSession %{public}d in metaGet", isFromSession_);
102         if (isFromSession_) {
103             data.GetMediaImage()->Clear();
104         } else {
105             return ERR_INVALID_PARAM;
106         }
107     }
108     return AVSESSION_SUCCESS;
109 }
110 
111 // LCOV_EXCL_START
GetAVQueueItems(std::vector<AVQueueItem> & items)112 int32_t AVControllerItem::GetAVQueueItems(std::vector<AVQueueItem>& items)
113 {
114     std::lock_guard lockGuard(sessionMutex_);
115     CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "session not exist");
116     items = session_->GetQueueItems();
117     return AVSESSION_SUCCESS;
118 }
119 
GetAVQueueTitle(std::string & title)120 int32_t AVControllerItem::GetAVQueueTitle(std::string& title)
121 {
122     std::lock_guard lockGuard(sessionMutex_);
123     CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "session not exist");
124     title = session_->GetQueueTitle();
125     return AVSESSION_SUCCESS;
126 }
127 
SkipToQueueItem(int32_t & itemId)128 int32_t AVControllerItem::SkipToQueueItem(int32_t& itemId)
129 {
130     std::lock_guard lockGuard(sessionMutex_);
131     CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "session not exist");
132     session_->HandleSkipToQueueItem(itemId);
133     return AVSESSION_SUCCESS;
134 }
135 
GetExtras(AAFwk::WantParams & extras)136 int32_t AVControllerItem::GetExtras(AAFwk::WantParams& extras)
137 {
138     std::lock_guard lockGuard(sessionMutex_);
139     CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "session not exist");
140     CHECK_AND_RETURN_RET_LOG(CommandSendLimit::GetInstance().IsCommandSendEnable(OHOS::IPCSkeleton::GetCallingPid()),
141         ERR_COMMAND_SEND_EXCEED_MAX, "command send number exceed max");
142     extras = session_->GetExtras();
143     return AVSESSION_SUCCESS;
144 }
145 
SendAVKeyEvent(const MMI::KeyEvent & keyEvent)146 int32_t AVControllerItem::SendAVKeyEvent(const MMI::KeyEvent& keyEvent)
147 {
148     std::lock_guard lockGuard(sessionMutex_);
149     CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "session not exist");
150     session_->HandleMediaKeyEvent(keyEvent);
151     return AVSESSION_SUCCESS;
152 }
153 
GetLaunchAbility(AbilityRuntime::WantAgent::WantAgent & ability)154 int32_t AVControllerItem::GetLaunchAbility(AbilityRuntime::WantAgent::WantAgent& ability)
155 {
156     std::lock_guard lockGuard(sessionMutex_);
157     CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "session not exist");
158     ability = session_->GetLaunchAbility();
159     return AVSESSION_SUCCESS;
160 }
161 
GetValidCommands(std::vector<int32_t> & cmds)162 int32_t AVControllerItem::GetValidCommands(std::vector<int32_t>& cmds)
163 {
164     std::lock_guard lockGuard(sessionMutex_);
165     CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "session not exist");
166     cmds = session_->GetSupportCommand();
167     return AVSESSION_SUCCESS;
168 }
169 // LCOV_EXCL_STOP
170 
IsSessionActive(bool & isActive)171 int32_t AVControllerItem::IsSessionActive(bool& isActive)
172 {
173     std::lock_guard lockGuard(sessionMutex_);
174     CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "session not exist");
175     isActive = session_->IsActive();
176     return AVSESSION_SUCCESS;
177 }
178 
179 // LCOV_EXCL_START
SendControlCommand(const AVControlCommand & cmd)180 int32_t AVControllerItem::SendControlCommand(const AVControlCommand& cmd)
181 {
182     std::lock_guard lockGuard(sessionMutex_);
183     CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "session not exist");
184     std::vector<int32_t> cmds = session_->GetSupportCommand();
185     CHECK_AND_RETURN_RET_LOG(std::find(cmds.begin(), cmds.end(), cmd.GetCommand()) != cmds.end(),
186                              ERR_COMMAND_NOT_SUPPORT, "command not support");
187     CHECK_AND_RETURN_RET_LOG(CommandSendLimit::GetInstance().IsCommandSendEnable(OHOS::IPCSkeleton::GetCallingPid()),
188         ERR_COMMAND_SEND_EXCEED_MAX, "command send number exceed max");
189     session_->ExecuteControllerCommand(cmd);
190     return AVSESSION_SUCCESS;
191 }
192 // LCOV_EXCL_STOP
193 
SendCommonCommand(const std::string & commonCommand,const AAFwk::WantParams & commandArgs)194 int32_t AVControllerItem::SendCommonCommand(const std::string& commonCommand, const AAFwk::WantParams& commandArgs)
195 {
196     std::lock_guard lockGuard(sessionMutex_);
197     CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "Session not exist");
198     CHECK_AND_RETURN_RET_LOG(CommandSendLimit::GetInstance().IsCommandSendEnable(OHOS::IPCSkeleton::GetCallingPid()),
199         ERR_COMMAND_SEND_EXCEED_MAX, "common command send number exceed max");
200     session_->ExecueCommonCommand(commonCommand, commandArgs);
201     return AVSESSION_SUCCESS;
202 }
203 
204 // LCOV_EXCL_START
SetAVCallMetaFilter(const AVCallMetaData::AVCallMetaMaskType & filter)205 int32_t AVControllerItem::SetAVCallMetaFilter(const AVCallMetaData::AVCallMetaMaskType& filter)
206 {
207     std::lock_guard lockGuard(avCallMetaMaskMutex_);
208     avCallMetaMask_ = filter;
209     return AVSESSION_SUCCESS;
210 }
211 
SetAVCallStateFilter(const AVCallState::AVCallStateMaskType & filter)212 int32_t AVControllerItem::SetAVCallStateFilter(const AVCallState::AVCallStateMaskType& filter)
213 {
214     std::lock_guard lockGuard(avCallStateMaskMutex_);
215     avCallStateMask_ = filter;
216     return AVSESSION_SUCCESS;
217 }
218 
SetMetaFilter(const AVMetaData::MetaMaskType & filter)219 int32_t AVControllerItem::SetMetaFilter(const AVMetaData::MetaMaskType& filter)
220 {
221     std::lock_guard lockGuard(metaMaskMutex_);
222     metaMask_ = filter;
223     return AVSESSION_SUCCESS;
224 }
225 
SetPlaybackFilter(const AVPlaybackState::PlaybackStateMaskType & filter)226 int32_t AVControllerItem::SetPlaybackFilter(const AVPlaybackState::PlaybackStateMaskType& filter)
227 {
228     std::lock_guard lockGuard(playbackMaskMutex_);
229     playbackMask_ = filter;
230     return AVSESSION_SUCCESS;
231 }
232 // LCOV_EXCL_STOP
233 
Destroy()234 int32_t AVControllerItem::Destroy()
235 {
236     SLOGI("do controller destroyfor pid %{public}d", static_cast<int>(pid_));
237     {
238         std::lock_guard callbackLockGuard(callbackMutex_);
239         callback_ = nullptr;
240         innerCallback_ = nullptr;
241     }
242     {
243         std::lock_guard sessionLockGuard(sessionMutex_);
244         if (session_ != nullptr) {
245             session_->HandleControllerRelease(pid_);
246             session_ = nullptr;
247             sessionId_.clear();
248         }
249     }
250     {
251         std::lock_guard serviceCallbacklockGuard(serviceCallbackMutex_);
252         if (serviceCallback_) {
253             serviceCallback_(*this);
254         }
255     }
256     return AVSESSION_SUCCESS;
257 }
258 
DestroyWithoutReply()259 int32_t AVControllerItem::DestroyWithoutReply()
260 {
261     SLOGI("do controller DestroyWithoutReply for pid %{public}d", static_cast<int>(pid_));
262     {
263         std::lock_guard callbackLockGuard(callbackMutex_);
264         innerCallback_ = nullptr;
265         callback_ = nullptr;
266     }
267     {
268         std::lock_guard sessionLockGuard(sessionMutex_);
269         if (session_ != nullptr) {
270             session_->HandleControllerRelease(pid_);
271             sessionId_.clear();
272             session_ = nullptr;
273         }
274     }
275     return AVSESSION_SUCCESS;
276 }
277 
278 // LCOV_EXCL_START
GetSessionId()279 std::string AVControllerItem::GetSessionId()
280 {
281     return sessionId_;
282 }
283 // LCOV_EXCL_STOP
284 
HandleSessionDestroy()285 void AVControllerItem::HandleSessionDestroy()
286 {
287     {
288         std::lock_guard callbackLockGuard(callbackMutex_);
289         if (callback_ != nullptr) {
290             callback_->OnSessionDestroy();
291         }
292         if (innerCallback_ != nullptr) {
293             innerCallback_->OnSessionDestroy();
294         }
295     }
296     std::lock_guard sessionLockGuard(sessionMutex_);
297     session_ = nullptr;
298     sessionId_.clear();
299 }
300 
301 // LCOV_EXCL_START
HandleAVCallStateChange(const AVCallState & avCallState)302 void AVControllerItem::HandleAVCallStateChange(const AVCallState& avCallState)
303 {
304     std::lock_guard callbackLockGuard(callbackMutex_);
305     AVCallState stateOut;
306     std::lock_guard avCallStateLockGuard(avCallStateMaskMutex_);
307     if (avCallState.CopyToByMask(avCallStateMask_, stateOut)) {
308         SLOGI("update avcall state");
309         AVSESSION_TRACE_SYNC_START("AVControllerItem::OnAVCallStateChange");
310         if (callback_ != nullptr) {
311             callback_->OnAVCallStateChange(stateOut);
312         }
313         if (innerCallback_ != nullptr) {
314             innerCallback_->OnAVCallStateChange(stateOut);
315         }
316     }
317 }
318 
HandleAVCallMetaDataChange(const AVCallMetaData & avCallMetaData)319 void AVControllerItem::HandleAVCallMetaDataChange(const AVCallMetaData& avCallMetaData)
320 {
321     std::lock_guard callbackLockGuard(callbackMutex_);
322     AVCallMetaData metaOut;
323     std::lock_guard avCallMetaDataMaskLockGuard(avCallMetaMaskMutex_);
324     if (avCallMetaData.CopyToByMask(avCallMetaMask_, metaOut)) {
325         if (avCallMetaMask_.test(AVCallMetaData::AVCALL_META_KEY_MEDIA_IMAGE)) {
326             std::shared_ptr<AVSessionPixelMap> innerPixelMap = nullptr;
327             if (metaOut.GetMediaImage() != nullptr) {
328                 std::string fileDir = AVSessionUtils::GetCachePathName(userId_);
329                 std::string fileName = sessionId_ + AVSessionUtils::GetFileSuffix();
330                 innerPixelMap = metaOut.GetMediaImage();
331                 AVSessionUtils::ReadImageFromFile(innerPixelMap, fileDir, fileName);
332             }
333             metaOut.SetMediaImage(innerPixelMap);
334         }
335 
336         if (avCallMetaMask_.test(AVCallMetaData::AVCALL_META_KEY_NAME)) {
337             metaOut.SetName(avCallMetaData.GetName());
338         }
339 
340         if (avCallMetaMask_.test(AVCallMetaData::AVCALL_META_KEY_PHONE_NUMBER)) {
341             metaOut.SetPhoneNumber(avCallMetaData.GetPhoneNumber());
342         }
343         SLOGI("update avcall meta data");
344     }
345 
346     if (callback_ != nullptr) {
347         callback_->OnAVCallMetaDataChange(metaOut);
348     }
349     if (innerCallback_ != nullptr) {
350         innerCallback_->OnAVCallMetaDataChange(metaOut);
351     }
352     AVSESSION_TRACE_SYNC_START("AVControllerItem::OnAVCallMetaDataChange");
353 }
354 
HandlePlaybackStateChange(const AVPlaybackState & state)355 void AVControllerItem::HandlePlaybackStateChange(const AVPlaybackState& state)
356 {
357     std::lock_guard callbackLockGuard(callbackMutex_);
358     AVPlaybackState stateOut;
359     std::lock_guard playbackLockGuard(playbackMaskMutex_);
360     if (state.CopyToByMask(playbackMask_, stateOut)) {
361         SLOGI("update playback pid %{public}d, state %{public}d",
362             static_cast<int>(pid_), static_cast<int>(stateOut.GetState()));
363         AVSESSION_TRACE_SYNC_START("AVControllerItem::OnPlaybackStateChange");
364         if (callback_ != nullptr) {
365             callback_->OnPlaybackStateChange(stateOut);
366         }
367         if (innerCallback_ != nullptr) {
368             innerCallback_->OnPlaybackStateChange(stateOut);
369         }
370     }
371 }
372 
HandleMetaDataChange(const AVMetaData & data)373 void AVControllerItem::HandleMetaDataChange(const AVMetaData& data)
374 {
375     std::lock_guard callbackLockGuard(callbackMutex_);
376     AVMetaData metaOut;
377     std::lock_guard metaMaskLockGuard(metaMaskMutex_);
378     if (data.CopyToByMask(metaMask_, metaOut)) {
379         if ((metaMask_.test(AVMetaData::META_KEY_MEDIA_IMAGE)) && (metaOut.GetMediaImage() != nullptr)) {
380             std::string fileDir = AVSessionUtils::GetCachePathName(userId_);
381             std::shared_ptr<AVSessionPixelMap> innerPixelMap = metaOut.GetMediaImage();
382             AVSessionUtils::ReadImageFromFile(innerPixelMap, fileDir, sessionId_ + AVSessionUtils::GetFileSuffix());
383             metaOut.SetMediaImage(innerPixelMap);
384         }
385         if ((metaMask_.test(AVMetaData::META_KEY_AVQUEUE_IMAGE)) && (metaOut.GetAVQueueImage() != nullptr)) {
386             std::string avQueueFileDir = AVSessionUtils::GetFixedPathName(userId_);
387             CHECK_AND_RETURN_LOG(session_ != nullptr, "Session not exist");
388             std::string avQueueFileName =
389                 session_->GetBundleName() + "_" + metaOut.GetAVQueueId() + AVSessionUtils::GetFileSuffix();
390             std::shared_ptr<AVSessionPixelMap> avQueuePixelMap = metaOut.GetAVQueueImage();
391             AVSessionUtils::ReadImageFromFile(avQueuePixelMap, avQueueFileDir, avQueueFileName);
392             metaOut.SetAVQueueImage(avQueuePixelMap);
393         }
394         if (!metaMask_.test(AVMetaData::META_KEY_ASSET_ID)) {
395             metaOut.SetAssetId(data.GetAssetId());
396         }
397         SLOGI("update metaData pid %{public}d, title %{public}s", static_cast<int>(pid_), metaOut.GetTitle().c_str());
398         AVSESSION_TRACE_SYNC_START("AVControllerItem::OnMetaDataChange");
399         if (metaOut.GetMediaImage() != nullptr && !metaOut.GetMediaImageUri().empty()) {
400             SLOGI("isFromSession %{public}d in metaChange", isFromSession_);
401             if (isFromSession_) {
402                 metaOut.GetMediaImage()->Clear();
403             } else {
404                 metaOut.SetMediaImageUri("");
405             }
406         }
407         if (callback_ != nullptr) {
408             callback_->OnMetaDataChange(metaOut);
409         }
410         if (innerCallback_ != nullptr) {
411             innerCallback_->OnMetaDataChange(metaOut);
412         }
413     }
414     std::shared_ptr<AVSessionPixelMap> innerQueuePixelMap = metaOut.GetAVQueueImage();
415     AVSessionPixelMapAdapter::CleanAVSessionPixelMap(innerQueuePixelMap);
416     std::shared_ptr<AVSessionPixelMap> innerMediaPixelMap = metaOut.GetMediaImage();
417     AVSessionPixelMapAdapter::CleanAVSessionPixelMap(innerMediaPixelMap);
418 }
419 
HandleOutputDeviceChange(const int32_t connectionState,const OutputDeviceInfo & outputDeviceInfo)420 void AVControllerItem::HandleOutputDeviceChange(const int32_t connectionState, const OutputDeviceInfo& outputDeviceInfo)
421 {
422     SLOGD("Connection state %{public}d", connectionState);
423     std::lock_guard lockGuard(callbackMutex_);
424     CHECK_AND_RETURN_LOG(callback_ != nullptr, "callback_ is nullptr");
425     callback_->OnOutputDeviceChange(connectionState, outputDeviceInfo);
426 }
427 // LCOV_EXCL_STOP
428 
HandleActiveStateChange(bool isActive)429 void AVControllerItem::HandleActiveStateChange(bool isActive)
430 {
431     std::lock_guard lockGuard(callbackMutex_);
432     CHECK_AND_RETURN_LOG(callback_ != nullptr, "callback_ is nullptr");
433     callback_->OnActiveStateChange(isActive);
434 }
435 
436 // LCOV_EXCL_START
HandleValidCommandChange(const std::vector<int32_t> & cmds)437 void AVControllerItem::HandleValidCommandChange(const std::vector<int32_t>& cmds)
438 {
439     std::lock_guard lockGuard(callbackMutex_);
440     CHECK_AND_RETURN_LOG(callback_ != nullptr, "callback_ is nullptr");
441     SLOGD("do OnValidCommandChange with pid %{public}d cmd list size %{public}d",
442         static_cast<int>(pid_), static_cast<int>(cmds.size()));
443     callback_->OnValidCommandChange(cmds);
444 }
445 // LCOV_EXCL_STOP
446 
HandleSetSessionEvent(const std::string & event,const AAFwk::WantParams & args)447 void AVControllerItem::HandleSetSessionEvent(const std::string& event, const AAFwk::WantParams& args)
448 {
449     std::lock_guard lockGuard(callbackMutex_);
450     CHECK_AND_RETURN_LOG(callback_ != nullptr, "callback_ is nullptr");
451     AVSESSION_TRACE_SYNC_START("AVControllerItem::OnSessionEventChange");
452     callback_->OnSessionEventChange(event, args);
453 }
454 
455 // LCOV_EXCL_START
HandleQueueItemsChange(const std::vector<AVQueueItem> & items)456 void AVControllerItem::HandleQueueItemsChange(const std::vector<AVQueueItem>& items)
457 {
458     std::lock_guard lockGuard(callbackMutex_);
459     CHECK_AND_RETURN_LOG(callback_ != nullptr, "callback_ is nullptr");
460     AVSESSION_TRACE_SYNC_START("AVControllerItem::OnQueueItemsChange");
461     callback_->OnQueueItemsChange(items);
462 }
463 
HandleQueueTitleChange(const std::string & title)464 void AVControllerItem::HandleQueueTitleChange(const std::string& title)
465 {
466     std::lock_guard lockGuard(callbackMutex_);
467     CHECK_AND_RETURN_LOG(callback_ != nullptr, "callback_ is nullptr");
468     AVSESSION_TRACE_SYNC_START("AVControllerItem::OnQueueTitleChange");
469     callback_->OnQueueTitleChange(title);
470 }
471 
HandleExtrasChange(const AAFwk::WantParams & extras)472 void AVControllerItem::HandleExtrasChange(const AAFwk::WantParams& extras)
473 {
474     std::lock_guard lockGuard(callbackMutex_);
475     CHECK_AND_RETURN_LOG(callback_ != nullptr, "callback_ is nullptr");
476     AVSESSION_TRACE_SYNC_START("AVControllerItem::OnSetExtras");
477     callback_->OnExtrasChange(extras);
478 }
479 // LCOV_EXCL_STOP
480 
GetPid() const481 pid_t AVControllerItem::GetPid() const
482 {
483     return pid_;
484 }
485 
HasSession(const std::string & sessionId)486 bool AVControllerItem::HasSession(const std::string& sessionId)
487 {
488     return sessionId_ == sessionId;
489 }
490 
SetServiceCallbackForRelease(const std::function<void (AVControllerItem &)> & callback)491 void AVControllerItem::SetServiceCallbackForRelease(const std::function<void(AVControllerItem&)>& callback)
492 {
493     std::lock_guard lockGuard(serviceCallbackMutex_);
494     serviceCallback_ = callback;
495 }
496 } // namespace OHOS::AVSession
497