From 59a759ca109d05cea3874b4b211c01627d48a42c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=92=8B=E5=BF=97=E5=BA=86?= Date: Wed, 20 Aug 2025 18:04:49 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E5=99=A8=EF=BC=8C=E9=98=B2=E6=AD=A2=E6=B7=A1=E5=87=BA=E4=B8=80?= =?UTF-8?q?=E7=9B=B4=E6=9C=AA=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 蒋志庆 --- .../manager/include/hpae_manager.h | 3 ++ .../audio_engine/manager/src/hpae_manager.cpp | 33 +++++++++++++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/services/audio_engine/manager/include/hpae_manager.h b/services/audio_engine/manager/include/hpae_manager.h index 87e4bb0014..c8d718146d 100644 --- a/services/audio_engine/manager/include/hpae_manager.h +++ b/services/audio_engine/manager/include/hpae_manager.h @@ -235,6 +235,7 @@ private: bool ShouldNotSkipProcess(const HpaeStreamClassType &streamType, const uint32_t &sessionId); bool CheckMoveSinkInput(uint32_t sinkInputId, const std::string &sinkName); bool CheckMoveSourceOutput(uint32_t sourceOutputId, const std::string &sourceName); + void ScheduleDelayedFadedOutUpdate(uint32_t sessionId, HpaeSessionState status, IOperation operation); private: std::unique_ptr hpaeManagerThread_ = nullptr; @@ -254,9 +255,11 @@ private: std::string coreSink_ = ""; std::unordered_map sourceNameSourceIdMap_; std::unordered_map sourceIdSourceNameMap_; + std::unordered_map rendererIdFadedOutMap_; std::string defaultSource_ = "Built_in_mic"; std::atomic sinkSourceIndex_ = 0; std::atomic isInit_ = false; + std::mutex mutex_; HpaeNoLockQueue hpaeNoLockQueue_; diff --git a/services/audio_engine/manager/src/hpae_manager.cpp b/services/audio_engine/manager/src/hpae_manager.cpp index 3152ebd137..e67b5fc3ab 100644 --- a/services/audio_engine/manager/src/hpae_manager.cpp +++ b/services/audio_engine/manager/src/hpae_manager.cpp @@ -34,6 +34,7 @@ namespace AudioStandard { namespace HPAE { namespace { constexpr uint32_t DEFAULT_SUSPEND_TIME_IN_MS = 3000; // 3s to stop hdi +constexpr uint32_t FADED_OUT_UPDATE_TIME_MAX = 60; // 60 ms static inline const std::unordered_set INNER_SOURCE_TYPE_SET = { SOURCE_TYPE_PLAYBACK_CAPTURE, SOURCE_TYPE_REMOTE_CAST}; } // namespace @@ -909,6 +910,7 @@ bool HpaeManager::MovingSinkStateChange(uint32_t sessionId, const std::shared_pt if (movingIds_[sessionId] == HPAE_SESSION_RELEASED) { rendererIdSinkNameMap_.erase(sessionId); rendererIdStreamInfoMap_.erase(sessionId); + rendererIdFadedOutMap_.erase(sessionId); if (auto serviceCallback = serviceCallback_.lock()) { serviceCallback->OnMoveSinkInputByIndexOrNameCb(SUCCESS); } @@ -1096,13 +1098,33 @@ void HpaeManager::HandleUpdateStatus( // maybe dosomething while move sink inputs return; } - auto it = streamClassType == HPAE_STREAM_CLASS_TYPE_PLAY ? rendererIdStreamInfoMap_.find(sessionId) - : capturerIdStreamInfoMap_.find(sessionId); - if (it != rendererIdStreamInfoMap_.end() && it != capturerIdStreamInfoMap_.end()) { + if (streamClassType == HPAE_STREAM_CLASS_TYPE_PLAY) { + auto it = rendererIdStreamInfoMap_.find(sessionId); + CHECK_AND_RETURN(it == rendererIdStreamInfoMap_.end()); + if (status == HPAE_SESSION_STOPPED || status == HPAE_SESSION_PAUSED) { + std::unique_lock lock(mutex_); + CHECK_AND_RETURN(!rendererIdFadedOutMap_[sessionId]); + rendererIdFadedOutMap_[sessionId] = true; + } + UpdateStatus(it->second.statusCallback, operation, sessionId); + } else { + auto it = capturerIdStreamInfoMap_.find(sessionId); + CHECK_AND_RETURN(it == capturerIdStreamInfoMap_.end()); UpdateStatus(it->second.statusCallback, operation, sessionId); } } +void HpaeManager::ScheduleDelayedFadedOutUpdate(uint32_t sessionId, HpaeSessionState status, IOperation operation) +{ + auto weakThis = weak_from_this(); + std::thread([weakThis, sessionId, status, operation]() { + std::this_thread::sleep_for(std::chrono::milliseconds(FADED_OUT_UPDATE_TIME_MAX)); + if (auto sharedThis = weakThis.lock()) { + sharedThis->HandleUpdateStatus(HPAE_STREAM_CLASS_TYPE_PLAY, sessionId, status, operation); + } + }).detach(); +} + void HpaeManager::UpdateStatus(const std::weak_ptr &callback, IOperation operation, uint32_t sessionId) { @@ -1341,6 +1363,7 @@ int32_t HpaeManager::DestroyStream(HpaeStreamClassType streamClassType, uint32_t } rendererIdSinkNameMap_.erase(sessionId); rendererIdStreamInfoMap_.erase(sessionId); + rendererIdFadedOutMap_.erase(sessionId); sinkInputs_.erase(sessionId); idPreferSinkNameMap_.erase(sessionId); } else if (streamClassType == HPAE_STREAM_CLASS_TYPE_RECORD) { @@ -1472,6 +1495,8 @@ int32_t HpaeManager::Pause(HpaeStreamClassType streamClassType, uint32_t session "cannot find device:%{public}s", rendererIdSinkNameMap_[sessionId].c_str()); rendererManagerMap_[rendererIdSinkNameMap_[sessionId]]->Pause(sessionId); rendererIdStreamInfoMap_[sessionId].state = HPAE_SESSION_PAUSING; + rendererIdFadedOutMap_[sessionId] = false; + ScheduleDelayedFadedOutUpdate(sessionId, HPAE_SESSION_PAUSED, OPERATION_PAUSED); } else if (streamClassType == HPAE_STREAM_CLASS_TYPE_RECORD && capturerIdSourceNameMap_.find(sessionId) != capturerIdSourceNameMap_.end()) { AUDIO_INFO_LOG("capturer Pause sessionId: %{public}u deviceName:%{public}s", @@ -1598,6 +1623,8 @@ int32_t HpaeManager::Stop(HpaeStreamClassType streamClassType, uint32_t sessionI "cannot find device:%{public}s", rendererIdSinkNameMap_[sessionId].c_str()); rendererManagerMap_[rendererIdSinkNameMap_[sessionId]]->Stop(sessionId); rendererIdStreamInfoMap_[sessionId].state = HPAE_SESSION_STOPPING; + rendererIdFadedOutMap_[sessionId] = false; + ScheduleDelayedFadedOutUpdate(sessionId, HPAE_SESSION_STOPPED, OPERATION_STOPPED); } else if (streamClassType == HPAE_STREAM_CLASS_TYPE_RECORD && capturerIdSourceNameMap_.find(sessionId) != capturerIdSourceNameMap_.end()) { AUDIO_INFO_LOG("capturer Stop sessionId: %{public}u deviceName:%{public}s", -- Gitee From 7ec14087a53525b59e70579ebd3745693ffc8483 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=92=8B=E5=BF=97=E5=BA=86?= Date: Wed, 20 Aug 2025 18:09:52 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E5=99=A8=EF=BC=8C=E9=98=B2=E6=AD=A2=E6=B7=A1=E5=87=BA=E4=B8=80?= =?UTF-8?q?=E7=9B=B4=E6=9C=AA=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 蒋志庆 --- services/audio_engine/manager/src/hpae_manager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/audio_engine/manager/src/hpae_manager.cpp b/services/audio_engine/manager/src/hpae_manager.cpp index e67b5fc3ab..232949cb06 100644 --- a/services/audio_engine/manager/src/hpae_manager.cpp +++ b/services/audio_engine/manager/src/hpae_manager.cpp @@ -1100,7 +1100,7 @@ void HpaeManager::HandleUpdateStatus( } if (streamClassType == HPAE_STREAM_CLASS_TYPE_PLAY) { auto it = rendererIdStreamInfoMap_.find(sessionId); - CHECK_AND_RETURN(it == rendererIdStreamInfoMap_.end()); + CHECK_AND_RETURN(it != rendererIdStreamInfoMap_.end()); if (status == HPAE_SESSION_STOPPED || status == HPAE_SESSION_PAUSED) { std::unique_lock lock(mutex_); CHECK_AND_RETURN(!rendererIdFadedOutMap_[sessionId]); @@ -1109,7 +1109,7 @@ void HpaeManager::HandleUpdateStatus( UpdateStatus(it->second.statusCallback, operation, sessionId); } else { auto it = capturerIdStreamInfoMap_.find(sessionId); - CHECK_AND_RETURN(it == capturerIdStreamInfoMap_.end()); + CHECK_AND_RETURN(it != capturerIdStreamInfoMap_.end()); UpdateStatus(it->second.statusCallback, operation, sessionId); } } -- Gitee From be685d6914297e45d1bbd3c90979b237be56c64c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=92=8B=E5=BF=97=E5=BA=86?= Date: Thu, 21 Aug 2025 11:48:24 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E5=99=A8=EF=BC=8C=E9=98=B2=E6=AD=A2=E6=B7=A1=E5=87=BA=E4=B8=80?= =?UTF-8?q?=E7=9B=B4=E6=9C=AA=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 蒋志庆 --- .../manager/include/hpae_manager.h | 6 +-- .../audio_engine/manager/src/hpae_manager.cpp | 47 ++++++++++++++----- 2 files changed, 39 insertions(+), 14 deletions(-) diff --git a/services/audio_engine/manager/include/hpae_manager.h b/services/audio_engine/manager/include/hpae_manager.h index c8d718146d..175544a12b 100644 --- a/services/audio_engine/manager/include/hpae_manager.h +++ b/services/audio_engine/manager/include/hpae_manager.h @@ -255,12 +255,12 @@ private: std::string coreSink_ = ""; std::unordered_map sourceNameSourceIdMap_; std::unordered_map sourceIdSourceNameMap_; - std::unordered_map rendererIdFadedOutMap_; std::string defaultSource_ = "Built_in_mic"; std::atomic sinkSourceIndex_ = 0; std::atomic isInit_ = false; - std::mutex mutex_; - + std::mutex timerCancelMutex_; + std::condition_variable timerCancelCv_; + std::unordered_set canceledTimers_; HpaeNoLockQueue hpaeNoLockQueue_; std::atomic receiveMsgCount_ = 0; diff --git a/services/audio_engine/manager/src/hpae_manager.cpp b/services/audio_engine/manager/src/hpae_manager.cpp index 232949cb06..74f21bd933 100644 --- a/services/audio_engine/manager/src/hpae_manager.cpp +++ b/services/audio_engine/manager/src/hpae_manager.cpp @@ -910,7 +910,6 @@ bool HpaeManager::MovingSinkStateChange(uint32_t sessionId, const std::shared_pt if (movingIds_[sessionId] == HPAE_SESSION_RELEASED) { rendererIdSinkNameMap_.erase(sessionId); rendererIdStreamInfoMap_.erase(sessionId); - rendererIdFadedOutMap_.erase(sessionId); if (auto serviceCallback = serviceCallback_.lock()) { serviceCallback->OnMoveSinkInputByIndexOrNameCb(SUCCESS); } @@ -1101,11 +1100,16 @@ void HpaeManager::HandleUpdateStatus( if (streamClassType == HPAE_STREAM_CLASS_TYPE_PLAY) { auto it = rendererIdStreamInfoMap_.find(sessionId); CHECK_AND_RETURN(it != rendererIdStreamInfoMap_.end()); - if (status == HPAE_SESSION_STOPPED || status == HPAE_SESSION_PAUSED) { - std::unique_lock lock(mutex_); - CHECK_AND_RETURN(!rendererIdFadedOutMap_[sessionId]); - rendererIdFadedOutMap_[sessionId] = true; + CHECK_AND_RETURN_LOG(!(status == HPAE_SESSION_STOPPED && it->second.state != HPAE_SESSION_STOPPING) || + !(status == HPAE_SESSION_PAUSED && it->second.state != HPAE_SESSION_PAUSING), "stopped or paused"); + if (status == HPAE_SESSION_PAUSED || status == HPAE_SESSION_STOPPED) { + { + std::lock_guard lock(timerCancelMutex_); + canceledTimers_.insert(sessionId); + } + timerCancelCv_.notify_all(); } + it->second.state = status; UpdateStatus(it->second.statusCallback, operation, sessionId); } else { auto it = capturerIdStreamInfoMap_.find(sessionId); @@ -1117,11 +1121,35 @@ void HpaeManager::HandleUpdateStatus( void HpaeManager::ScheduleDelayedFadedOutUpdate(uint32_t sessionId, HpaeSessionState status, IOperation operation) { auto weakThis = weak_from_this(); + + { + std::lock_guard lock(timerCancelMutex_); + canceledTimers_.erase(sessionId); + } + std::thread([weakThis, sessionId, status, operation]() { - std::this_thread::sleep_for(std::chrono::milliseconds(FADED_OUT_UPDATE_TIME_MAX)); - if (auto sharedThis = weakThis.lock()) { + auto sharedThis = weakThis.lock(); + CHECK_AND_RETURN(sharedThis != nullptr); + bool canceled = false; + + { + std::unique_lock lock(sharedThis->timerCancelMutex_); + if (sharedThis->timerCancelCv_.wait_for( + lock, + std::chrono::milliseconds(FADED_OUT_UPDATE_TIME_MAX), + [&]() { + return sharedThis->canceledTimers_.find(sessionId) != sharedThis->canceledTimers_.end(); + })){ + canceled = true; + } + sharedThis->canceledTimers_.erase(sessionId); + } + CHECK_AND_RETURN(!canceled); + auto request = [sharedThis, sessionId, status, operation]() { sharedThis->HandleUpdateStatus(HPAE_STREAM_CLASS_TYPE_PLAY, sessionId, status, operation); - } + }; + sharedThis->SendRequest(request, __func__); + }).detach(); } @@ -1363,7 +1391,6 @@ int32_t HpaeManager::DestroyStream(HpaeStreamClassType streamClassType, uint32_t } rendererIdSinkNameMap_.erase(sessionId); rendererIdStreamInfoMap_.erase(sessionId); - rendererIdFadedOutMap_.erase(sessionId); sinkInputs_.erase(sessionId); idPreferSinkNameMap_.erase(sessionId); } else if (streamClassType == HPAE_STREAM_CLASS_TYPE_RECORD) { @@ -1495,7 +1522,6 @@ int32_t HpaeManager::Pause(HpaeStreamClassType streamClassType, uint32_t session "cannot find device:%{public}s", rendererIdSinkNameMap_[sessionId].c_str()); rendererManagerMap_[rendererIdSinkNameMap_[sessionId]]->Pause(sessionId); rendererIdStreamInfoMap_[sessionId].state = HPAE_SESSION_PAUSING; - rendererIdFadedOutMap_[sessionId] = false; ScheduleDelayedFadedOutUpdate(sessionId, HPAE_SESSION_PAUSED, OPERATION_PAUSED); } else if (streamClassType == HPAE_STREAM_CLASS_TYPE_RECORD && capturerIdSourceNameMap_.find(sessionId) != capturerIdSourceNameMap_.end()) { @@ -1623,7 +1649,6 @@ int32_t HpaeManager::Stop(HpaeStreamClassType streamClassType, uint32_t sessionI "cannot find device:%{public}s", rendererIdSinkNameMap_[sessionId].c_str()); rendererManagerMap_[rendererIdSinkNameMap_[sessionId]]->Stop(sessionId); rendererIdStreamInfoMap_[sessionId].state = HPAE_SESSION_STOPPING; - rendererIdFadedOutMap_[sessionId] = false; ScheduleDelayedFadedOutUpdate(sessionId, HPAE_SESSION_STOPPED, OPERATION_STOPPED); } else if (streamClassType == HPAE_STREAM_CLASS_TYPE_RECORD && capturerIdSourceNameMap_.find(sessionId) != capturerIdSourceNameMap_.end()) { -- Gitee From f736c1f4715a457a7cd4ef9b7d0260d02a76c1ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=92=8B=E5=BF=97=E5=BA=86?= Date: Thu, 21 Aug 2025 14:27:53 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E5=99=A8=EF=BC=8C=E9=98=B2=E6=AD=A2=E6=B7=A1=E5=87=BA=E4=B8=80?= =?UTF-8?q?=E7=9B=B4=E6=9C=AA=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 蒋志庆 --- services/audio_engine/manager/src/hpae_manager.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/services/audio_engine/manager/src/hpae_manager.cpp b/services/audio_engine/manager/src/hpae_manager.cpp index 74f21bd933..875f00a92f 100644 --- a/services/audio_engine/manager/src/hpae_manager.cpp +++ b/services/audio_engine/manager/src/hpae_manager.cpp @@ -1100,7 +1100,7 @@ void HpaeManager::HandleUpdateStatus( if (streamClassType == HPAE_STREAM_CLASS_TYPE_PLAY) { auto it = rendererIdStreamInfoMap_.find(sessionId); CHECK_AND_RETURN(it != rendererIdStreamInfoMap_.end()); - CHECK_AND_RETURN_LOG(!(status == HPAE_SESSION_STOPPED && it->second.state != HPAE_SESSION_STOPPING) || + CHECK_AND_RETURN_LOG(!(status == HPAE_SESSION_STOPPED && it->second.state != HPAE_SESSION_STOPPING) && !(status == HPAE_SESSION_PAUSED && it->second.state != HPAE_SESSION_PAUSING), "stopped or paused"); if (status == HPAE_SESSION_PAUSED || status == HPAE_SESSION_STOPPED) { { @@ -1128,6 +1128,11 @@ void HpaeManager::ScheduleDelayedFadedOutUpdate(uint32_t sessionId, HpaeSessionS } std::thread([weakThis, sessionId, status, operation]() { + AUDIO_INFO_LOG("ScheduleDelayedFadedOutUpdate sessionid:%{public}u " + "status:%{public}d operation:%{public}d", + sessionId, + status, + operation); auto sharedThis = weakThis.lock(); CHECK_AND_RETURN(sharedThis != nullptr); bool canceled = false; @@ -1494,7 +1499,7 @@ int32_t HpaeManager::StartWithSyncId(HpaeStreamClassType streamClassType, uint32 rendererIdStreamInfoMap_[sessionId].state = HPAE_SESSION_RUNNING; UpdateStatus(rendererIdStreamInfoMap_[sessionId].statusCallback, OPERATION_STARTED, sessionId); } else { - AUDIO_WARNING_LOG("StartWithSyncId can not find sessionId streamClassType %{public}d," + AUDIO_WARNING_LOG("StartWithSyncId can not find sessionId streamClassType %{public}d," "sessionId %{public}u, syncId: %{public}d", streamClassType, sessionId, syncId); } -- Gitee From 49938b729e304bfb5919f3724ae809a45c8b3542 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=92=8B=E5=BF=97=E5=BA=86?= Date: Thu, 21 Aug 2025 16:09:27 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E5=99=A8=EF=BC=8C=E9=98=B2=E6=AD=A2=E6=B7=A1=E5=87=BA=E4=B8=80?= =?UTF-8?q?=E7=9B=B4=E6=9C=AA=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 蒋志庆 --- .../audio_engine/manager/src/hpae_manager.cpp | 26 +++++++------------ 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/services/audio_engine/manager/src/hpae_manager.cpp b/services/audio_engine/manager/src/hpae_manager.cpp index 875f00a92f..4b5079f098 100644 --- a/services/audio_engine/manager/src/hpae_manager.cpp +++ b/services/audio_engine/manager/src/hpae_manager.cpp @@ -910,6 +910,7 @@ bool HpaeManager::MovingSinkStateChange(uint32_t sessionId, const std::shared_pt if (movingIds_[sessionId] == HPAE_SESSION_RELEASED) { rendererIdSinkNameMap_.erase(sessionId); rendererIdStreamInfoMap_.erase(sessionId); + canceledTimers_.erase(sessionId); if (auto serviceCallback = serviceCallback_.lock()) { serviceCallback->OnMoveSinkInputByIndexOrNameCb(SUCCESS); } @@ -1103,10 +1104,7 @@ void HpaeManager::HandleUpdateStatus( CHECK_AND_RETURN_LOG(!(status == HPAE_SESSION_STOPPED && it->second.state != HPAE_SESSION_STOPPING) && !(status == HPAE_SESSION_PAUSED && it->second.state != HPAE_SESSION_PAUSING), "stopped or paused"); if (status == HPAE_SESSION_PAUSED || status == HPAE_SESSION_STOPPED) { - { - std::lock_guard lock(timerCancelMutex_); - canceledTimers_.insert(sessionId); - } + canceledTimers_.insert(sessionId); timerCancelCv_.notify_all(); } it->second.state = status; @@ -1122,34 +1120,27 @@ void HpaeManager::ScheduleDelayedFadedOutUpdate(uint32_t sessionId, HpaeSessionS { auto weakThis = weak_from_this(); - { - std::lock_guard lock(timerCancelMutex_); - canceledTimers_.erase(sessionId); - } + canceledTimers_.erase(sessionId); std::thread([weakThis, sessionId, status, operation]() { + auto sharedThis = weakThis.lock(); + CHECK_AND_RETURN_LOG(sharedThis != nullptr, "sharedThis is nullptr"); AUDIO_INFO_LOG("ScheduleDelayedFadedOutUpdate sessionid:%{public}u " "status:%{public}d operation:%{public}d", sessionId, status, operation); - auto sharedThis = weakThis.lock(); - CHECK_AND_RETURN(sharedThis != nullptr); bool canceled = false; { std::unique_lock lock(sharedThis->timerCancelMutex_); - if (sharedThis->timerCancelCv_.wait_for( - lock, - std::chrono::milliseconds(FADED_OUT_UPDATE_TIME_MAX), + canceled = sharedThis->timerCancelCv_.wait_for(lock, std::chrono::milliseconds(FADED_OUT_UPDATE_TIME_MAX), [&]() { return sharedThis->canceledTimers_.find(sessionId) != sharedThis->canceledTimers_.end(); - })){ - canceled = true; - } + }); sharedThis->canceledTimers_.erase(sessionId); } - CHECK_AND_RETURN(!canceled); + CHECK_AND_RETURN_LOG(!canceled, "Timer sessionid:%{public}u is canceled"); auto request = [sharedThis, sessionId, status, operation]() { sharedThis->HandleUpdateStatus(HPAE_STREAM_CLASS_TYPE_PLAY, sessionId, status, operation); }; @@ -1396,6 +1387,7 @@ int32_t HpaeManager::DestroyStream(HpaeStreamClassType streamClassType, uint32_t } rendererIdSinkNameMap_.erase(sessionId); rendererIdStreamInfoMap_.erase(sessionId); + canceledTimers_.erase(sessionId); sinkInputs_.erase(sessionId); idPreferSinkNameMap_.erase(sessionId); } else if (streamClassType == HPAE_STREAM_CLASS_TYPE_RECORD) { -- Gitee