From b710de1dcec103cd7a4ce4d852a944105c0a0154 Mon Sep 17 00:00:00 2001 From: wangm Date: Wed, 17 Jul 2024 16:12:57 +0800 Subject: [PATCH 1/5] fix bug Signed-off-by: wangm --- .../server/include/audio_stream_collector.h | 2 ++ .../server/src/audio_stream_collector.cpp | 32 +++++++++++++++++++ .../src/service/audio_policy_service.cpp | 3 ++ 3 files changed, 37 insertions(+) diff --git a/services/audio_policy/server/include/audio_stream_collector.h b/services/audio_policy/server/include/audio_stream_collector.h index 98a1a99fbb..e08279943c 100644 --- a/services/audio_policy/server/include/audio_stream_collector.h +++ b/services/audio_policy/server/include/audio_stream_collector.h @@ -71,6 +71,8 @@ public: int32_t SetAudioConcurrencyCallback(const uint32_t sessionID, const sptr &object); int32_t UnsetAudioConcurrencyCallback(const uint32_t sessionID); int32_t ActivateAudioConcurrency(const AudioPipeType &pipeType); + void ResetRendererStreamDeviceInfo(const AudioDeviceDescriptor& updatedDesc); + void ResetCapturerStreamDeviceInfo(const AudioDeviceDescriptor& updatedDesc); private: std::mutex streamsInfoMutex_; std::map, int32_t> rendererStatequeue_; diff --git a/services/audio_policy/server/src/audio_stream_collector.cpp b/services/audio_policy/server/src/audio_stream_collector.cpp index 8c65b75ebb..b1cb2127e4 100644 --- a/services/audio_policy/server/src/audio_stream_collector.cpp +++ b/services/audio_policy/server/src/audio_stream_collector.cpp @@ -293,6 +293,38 @@ bool AudioStreamCollector::CheckRendererStateInfoChanged(AudioStreamChangeInfo & return true; } +void AudioStreamCollector::ResetRendererStreamDeviceInfo(const AudioDeviceDescriptor& updatedDesc) +{ + AUDIO_INFO_LOG("ResetRendererStreamDeviceInfo, deviceType:[%{public}d]", updatedDesc.deviceType_); + for (auto it = audioRendererChangeInfos_.begin(); it != audioRendererChangeInfos_.end(); it++) { + AudioRendererChangeInfo audioRendererChangeInfo = **it; + if (audioRendererChangeInfo.outputDeviceInfo.deviceType == updatedDesc.deviceType_ && + audioRendererChangeInfo.outputDeviceInfo.macAddress == updatedDesc.macAddress_ && + audioRendererChangeInfo.outputDeviceInfo.networkId == updatedDesc.networkId_) + { + audioRendererChangeInfo.outputDeviceInfo.deviceType = DEVICE_TYPE_NONE; + audioRendererChangeInfo.outputDeviceInfo.macAddress = ""; + audioRendererChangeInfo.outputDeviceInfo.networkId = LOCAL_NETWORK_ID; + } + } +} + +void AudioStreamCollector::ResetCapturerStreamDeviceInfo(const AudioDeviceDescriptor& updatedDesc) +{ + AUDIO_INFO_LOG("ResetCapturerStreamDeviceInfo, deviceType:[%{public}d]", updatedDesc.deviceType_); + for (auto it = audioCapturerChangeInfos_.begin(); it != audioCapturerChangeInfos_.end(); it++) { + AudioCapturerChangeInfo audioCapturerChangeInfo = **it; + if (audioCapturerChangeInfo.inputDeviceInfo.deviceType == updatedDesc.deviceType_ && + audioCapturerChangeInfo.inputDeviceInfo.macAddress == updatedDesc.macAddress_ && + audioCapturerChangeInfo.inputDeviceInfo.networkId == updatedDesc.networkId_) + { + audioCapturerChangeInfo.inputDeviceInfo.deviceType = DEVICE_TYPE_NONE; + audioCapturerChangeInfo.inputDeviceInfo.macAddress = ""; + audioCapturerChangeInfo.inputDeviceInfo.networkId = LOCAL_NETWORK_ID; + } + } +} + int32_t AudioStreamCollector::UpdateRendererStream(AudioStreamChangeInfo &streamChangeInfo) { AUDIO_INFO_LOG("UpdateRendererStream client %{public}d state %{public}d session %{public}d", diff --git a/services/audio_policy/server/src/service/audio_policy_service.cpp b/services/audio_policy/server/src/service/audio_policy_service.cpp index 50f08c5b94..f97bc825f4 100644 --- a/services/audio_policy/server/src/service/audio_policy_service.cpp +++ b/services/audio_policy/server/src/service/audio_policy_service.cpp @@ -3401,6 +3401,9 @@ void AudioPolicyService::UpdateConnectedDevicesWhenDisconnecting(const AudioDevi } } + // reset disconnected device info in stream + streamCollector_.ResetRendererStreamDeviceInfo(updatedDesc); + streamCollector_.ResetCapturerStreamDeviceInfo(updatedDesc); sptr devDesc = new (std::nothrow) AudioDeviceDescriptor(updatedDesc); CHECK_AND_RETURN_LOG(devDesc != nullptr, "Create device descriptor failed"); audioDeviceManager_.RemoveNewDevice(devDesc); -- Gitee From 901e4f06ad558b02bc71c67969019dc493061c18 Mon Sep 17 00:00:00 2001 From: wangm Date: Wed, 17 Jul 2024 17:13:14 +0800 Subject: [PATCH 2/5] resolve conflict Signed-off-by: wangm --- .../server/src/audio_stream_collector.cpp | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/services/audio_policy/server/src/audio_stream_collector.cpp b/services/audio_policy/server/src/audio_stream_collector.cpp index b1cb2127e4..675640c463 100644 --- a/services/audio_policy/server/src/audio_stream_collector.cpp +++ b/services/audio_policy/server/src/audio_stream_collector.cpp @@ -277,22 +277,6 @@ void AudioStreamCollector::SetCapturerStreamParam(AudioStreamChangeInfo &streamC capturerChangeInfo->inputDeviceInfo = streamChangeInfo.audioCapturerChangeInfo.inputDeviceInfo; } -bool AudioStreamCollector::CheckRendererStateInfoChanged(AudioStreamChangeInfo &streamChangeInfo) -{ - if (rendererStatequeue_.find(make_pair(streamChangeInfo.audioRendererChangeInfo.clientUID, - streamChangeInfo.audioRendererChangeInfo.sessionId)) != rendererStatequeue_.end()) { - if (streamChangeInfo.audioRendererChangeInfo.rendererState == - rendererStatequeue_[make_pair(streamChangeInfo.audioRendererChangeInfo.clientUID, - streamChangeInfo.audioRendererChangeInfo.sessionId)]) { - // Renderer state not changed - return false; - } - } else { - AUDIO_INFO_LOG("client %{public}d not found ", streamChangeInfo.audioRendererChangeInfo.clientUID); - } - return true; -} - void AudioStreamCollector::ResetRendererStreamDeviceInfo(const AudioDeviceDescriptor& updatedDesc) { AUDIO_INFO_LOG("ResetRendererStreamDeviceInfo, deviceType:[%{public}d]", updatedDesc.deviceType_); @@ -325,6 +309,22 @@ void AudioStreamCollector::ResetCapturerStreamDeviceInfo(const AudioDeviceDescri } } +bool AudioStreamCollector::CheckRendererStateInfoChanged(AudioStreamChangeInfo &streamChangeInfo) +{ + if (rendererStatequeue_.find(make_pair(streamChangeInfo.audioRendererChangeInfo.clientUID, + streamChangeInfo.audioRendererChangeInfo.sessionId)) != rendererStatequeue_.end()) { + if (streamChangeInfo.audioRendererChangeInfo.rendererState == + rendererStatequeue_[make_pair(streamChangeInfo.audioRendererChangeInfo.clientUID, + streamChangeInfo.audioRendererChangeInfo.sessionId)]) { + // Renderer state not changed + return false; + } + } else { + AUDIO_INFO_LOG("client %{public}d not found ", streamChangeInfo.audioRendererChangeInfo.clientUID); + } + return true; +} + int32_t AudioStreamCollector::UpdateRendererStream(AudioStreamChangeInfo &streamChangeInfo) { AUDIO_INFO_LOG("UpdateRendererStream client %{public}d state %{public}d session %{public}d", -- Gitee From fd365085912cdac66fa9282f654119cf39d97dd2 Mon Sep 17 00:00:00 2001 From: wangm Date: Wed, 17 Jul 2024 17:33:24 +0800 Subject: [PATCH 3/5] resolve clean code Signed-off-by: wangm --- services/audio_policy/server/src/audio_stream_collector.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/services/audio_policy/server/src/audio_stream_collector.cpp b/services/audio_policy/server/src/audio_stream_collector.cpp index 675640c463..e65f8463d5 100644 --- a/services/audio_policy/server/src/audio_stream_collector.cpp +++ b/services/audio_policy/server/src/audio_stream_collector.cpp @@ -284,8 +284,7 @@ void AudioStreamCollector::ResetRendererStreamDeviceInfo(const AudioDeviceDescri AudioRendererChangeInfo audioRendererChangeInfo = **it; if (audioRendererChangeInfo.outputDeviceInfo.deviceType == updatedDesc.deviceType_ && audioRendererChangeInfo.outputDeviceInfo.macAddress == updatedDesc.macAddress_ && - audioRendererChangeInfo.outputDeviceInfo.networkId == updatedDesc.networkId_) - { + audioRendererChangeInfo.outputDeviceInfo.networkId == updatedDesc.networkId_) { audioRendererChangeInfo.outputDeviceInfo.deviceType = DEVICE_TYPE_NONE; audioRendererChangeInfo.outputDeviceInfo.macAddress = ""; audioRendererChangeInfo.outputDeviceInfo.networkId = LOCAL_NETWORK_ID; @@ -300,8 +299,7 @@ void AudioStreamCollector::ResetCapturerStreamDeviceInfo(const AudioDeviceDescri AudioCapturerChangeInfo audioCapturerChangeInfo = **it; if (audioCapturerChangeInfo.inputDeviceInfo.deviceType == updatedDesc.deviceType_ && audioCapturerChangeInfo.inputDeviceInfo.macAddress == updatedDesc.macAddress_ && - audioCapturerChangeInfo.inputDeviceInfo.networkId == updatedDesc.networkId_) - { + audioCapturerChangeInfo.inputDeviceInfo.networkId == updatedDesc.networkId_) { audioCapturerChangeInfo.inputDeviceInfo.deviceType = DEVICE_TYPE_NONE; audioCapturerChangeInfo.inputDeviceInfo.macAddress = ""; audioCapturerChangeInfo.inputDeviceInfo.networkId = LOCAL_NETWORK_ID; -- Gitee From 2bf6d0333bdc844193910d425e8b93078f220843 Mon Sep 17 00:00:00 2001 From: wangm Date: Wed, 17 Jul 2024 18:11:58 +0800 Subject: [PATCH 4/5] modify for clean code Signed-off-by: wangm --- .../server/src/audio_stream_collector.cpp | 26 +++++++++---------- .../src/service/audio_policy_service.cpp | 9 +++++-- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/services/audio_policy/server/src/audio_stream_collector.cpp b/services/audio_policy/server/src/audio_stream_collector.cpp index e65f8463d5..0b22499df6 100644 --- a/services/audio_policy/server/src/audio_stream_collector.cpp +++ b/services/audio_policy/server/src/audio_stream_collector.cpp @@ -281,13 +281,12 @@ void AudioStreamCollector::ResetRendererStreamDeviceInfo(const AudioDeviceDescri { AUDIO_INFO_LOG("ResetRendererStreamDeviceInfo, deviceType:[%{public}d]", updatedDesc.deviceType_); for (auto it = audioRendererChangeInfos_.begin(); it != audioRendererChangeInfos_.end(); it++) { - AudioRendererChangeInfo audioRendererChangeInfo = **it; - if (audioRendererChangeInfo.outputDeviceInfo.deviceType == updatedDesc.deviceType_ && - audioRendererChangeInfo.outputDeviceInfo.macAddress == updatedDesc.macAddress_ && - audioRendererChangeInfo.outputDeviceInfo.networkId == updatedDesc.networkId_) { - audioRendererChangeInfo.outputDeviceInfo.deviceType = DEVICE_TYPE_NONE; - audioRendererChangeInfo.outputDeviceInfo.macAddress = ""; - audioRendererChangeInfo.outputDeviceInfo.networkId = LOCAL_NETWORK_ID; + if ((*it)->outputDeviceInfo.deviceType == updatedDesc.deviceType_ && + (*it)->.outputDeviceInfo.macAddress == updatedDesc.macAddress_ && + (*it)->.outputDeviceInfo.networkId == updatedDesc.networkId_) { + (*it)->.outputDeviceInfo.deviceType = DEVICE_TYPE_NONE; + (*it)->.outputDeviceInfo.macAddress = ""; + (*it)->.outputDeviceInfo.networkId = LOCAL_NETWORK_ID; } } } @@ -296,13 +295,12 @@ void AudioStreamCollector::ResetCapturerStreamDeviceInfo(const AudioDeviceDescri { AUDIO_INFO_LOG("ResetCapturerStreamDeviceInfo, deviceType:[%{public}d]", updatedDesc.deviceType_); for (auto it = audioCapturerChangeInfos_.begin(); it != audioCapturerChangeInfos_.end(); it++) { - AudioCapturerChangeInfo audioCapturerChangeInfo = **it; - if (audioCapturerChangeInfo.inputDeviceInfo.deviceType == updatedDesc.deviceType_ && - audioCapturerChangeInfo.inputDeviceInfo.macAddress == updatedDesc.macAddress_ && - audioCapturerChangeInfo.inputDeviceInfo.networkId == updatedDesc.networkId_) { - audioCapturerChangeInfo.inputDeviceInfo.deviceType = DEVICE_TYPE_NONE; - audioCapturerChangeInfo.inputDeviceInfo.macAddress = ""; - audioCapturerChangeInfo.inputDeviceInfo.networkId = LOCAL_NETWORK_ID; + if ((*it)->inputDeviceInfo.deviceType == updatedDesc.deviceType_ && + (*it)->inputDeviceInfo.macAddress == updatedDesc.macAddress_ && + (*it)->inputDeviceInfo.networkId == updatedDesc.networkId_) { + (*it)->inputDeviceInfo.deviceType = DEVICE_TYPE_NONE; + (*it)->inputDeviceInfo.macAddress = ""; + (*it)->inputDeviceInfo.networkId = LOCAL_NETWORK_ID; } } } diff --git a/services/audio_policy/server/src/service/audio_policy_service.cpp b/services/audio_policy/server/src/service/audio_policy_service.cpp index f97bc825f4..01c5796fcf 100644 --- a/services/audio_policy/server/src/service/audio_policy_service.cpp +++ b/services/audio_policy/server/src/service/audio_policy_service.cpp @@ -3402,8 +3402,13 @@ void AudioPolicyService::UpdateConnectedDevicesWhenDisconnecting(const AudioDevi } // reset disconnected device info in stream - streamCollector_.ResetRendererStreamDeviceInfo(updatedDesc); - streamCollector_.ResetCapturerStreamDeviceInfo(updatedDesc); + if (IsOutputDevice(updatedDesc.deviceType_)) { + streamCollector_.ResetRendererStreamDeviceInfo(updatedDesc); + } + if (IsInputDevice(updatedDesc.deviceType_)) { + streamCollector_.ResetCapturerStreamDeviceInfo(updatedDesc); + } + sptr devDesc = new (std::nothrow) AudioDeviceDescriptor(updatedDesc); CHECK_AND_RETURN_LOG(devDesc != nullptr, "Create device descriptor failed"); audioDeviceManager_.RemoveNewDevice(devDesc); -- Gitee From 8a74d10d8e3c10c0c0584fff69b27837ee5e79ca Mon Sep 17 00:00:00 2001 From: wangm Date: Wed, 17 Jul 2024 18:57:49 +0800 Subject: [PATCH 5/5] modify for clean code Signed-off-by: wangm --- .../audio_policy/server/src/audio_stream_collector.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/services/audio_policy/server/src/audio_stream_collector.cpp b/services/audio_policy/server/src/audio_stream_collector.cpp index 0b22499df6..15adf2743a 100644 --- a/services/audio_policy/server/src/audio_stream_collector.cpp +++ b/services/audio_policy/server/src/audio_stream_collector.cpp @@ -282,11 +282,11 @@ void AudioStreamCollector::ResetRendererStreamDeviceInfo(const AudioDeviceDescri AUDIO_INFO_LOG("ResetRendererStreamDeviceInfo, deviceType:[%{public}d]", updatedDesc.deviceType_); for (auto it = audioRendererChangeInfos_.begin(); it != audioRendererChangeInfos_.end(); it++) { if ((*it)->outputDeviceInfo.deviceType == updatedDesc.deviceType_ && - (*it)->.outputDeviceInfo.macAddress == updatedDesc.macAddress_ && - (*it)->.outputDeviceInfo.networkId == updatedDesc.networkId_) { - (*it)->.outputDeviceInfo.deviceType = DEVICE_TYPE_NONE; - (*it)->.outputDeviceInfo.macAddress = ""; - (*it)->.outputDeviceInfo.networkId = LOCAL_NETWORK_ID; + (*it)->outputDeviceInfo.macAddress == updatedDesc.macAddress_ && + (*it)->outputDeviceInfo.networkId == updatedDesc.networkId_) { + (*it)->outputDeviceInfo.deviceType = DEVICE_TYPE_NONE; + (*it)->outputDeviceInfo.macAddress = ""; + (*it)->outputDeviceInfo.networkId = LOCAL_NETWORK_ID; } } } -- Gitee