From e22481d400a6a975ddb6ef64174d294d0aa9e769 Mon Sep 17 00:00:00 2001 From: lizihao Date: Thu, 11 Sep 2025 15:13:19 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E6=97=B6=E6=9B=B4a2dpOffloadFlag?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: lizihao --- .../pipe/src/audio_a2dp_offload_manager.cpp | 54 +++++++++---------- 1 file changed, 24 insertions(+), 30 deletions(-) diff --git a/services/audio_policy/server/domain/pipe/src/audio_a2dp_offload_manager.cpp b/services/audio_policy/server/domain/pipe/src/audio_a2dp_offload_manager.cpp index 1d0c9e81c0..3581db15d2 100644 --- a/services/audio_policy/server/domain/pipe/src/audio_a2dp_offload_manager.cpp +++ b/services/audio_policy/server/domain/pipe/src/audio_a2dp_offload_manager.cpp @@ -209,15 +209,9 @@ uint32_t AudioA2dpOffloadManager::UpdateA2dpOffloadFlagCommon( std::vector allRunningSessions; std::vector allStopSessions; - std::vector allRunningA2dpInfos; + std::vector allA2dpInfos; Bluetooth::A2dpStreamInfo tmpA2dpStreamInfo; for (auto &changeInfo : rendererChangeInfos) { - if (changeInfo->sessionId != startSessionId && changeInfo->rendererState != RENDERER_RUNNING) { - allStopSessions.push_back(changeInfo->sessionId); - continue; - } - allRunningSessions.push_back(changeInfo->sessionId); - // Generate a2dp info tmpA2dpStreamInfo.sessionId = changeInfo->sessionId; tmpA2dpStreamInfo.streamType = streamCollector_.GetStreamType(changeInfo->sessionId); @@ -225,13 +219,18 @@ uint32_t AudioA2dpOffloadManager::UpdateA2dpOffloadFlagCommon( changeInfo->sessionId, changeInfo->rendererInfo.streamUsage, sessionIDToSpatializationEnabledMap); - allRunningA2dpInfos.push_back(tmpA2dpStreamInfo); + allA2dpInfos.push_back(tmpA2dpStreamInfo); + if (changeInfo->sessionId != startSessionId && changeInfo->rendererState != RENDERER_RUNNING) { + allStopSessions.push_back(changeInfo->sessionId); + continue; + } + allRunningSessions.push_back(changeInfo->sessionId); } if (allStopSessions.size() > 0) { OffloadStopPlaying(allStopSessions); } - UpdateA2dpOffloadFlagInternal(allRunningA2dpInfos, allRunningSessions, deviceType); + UpdateA2dpOffloadFlagInternal(allA2dpInfos, allRunningSessions, deviceType); return allRunningSessions.size(); #endif @@ -279,46 +278,41 @@ void AudioA2dpOffloadManager::UpdateA2dpOffloadFlagForA2dpDeviceOut() #ifdef BLUETOOTH_ENABLE void AudioA2dpOffloadManager::UpdateA2dpOffloadFlagInternal( - const std::vector &allRunningA2dpInfos, + const std::vector &allA2dpInfos, std::vector &allRunningSessions, DeviceType deviceType) { - if (allRunningA2dpInfos.size() == 0) { - return; - } BluetoothOffloadState newA2dpOffloadFlag = NO_A2DP_DEVICE; BluetoothOffloadState oldA2dpOffloadFlag = GetA2dpOffloadFlag(); if (deviceType == DEVICE_TYPE_BLUETOOTH_A2DP) { newA2dpOffloadFlag = static_cast( - Bluetooth::AudioA2dpManager::A2dpOffloadSessionRequest(allRunningA2dpInfos)); + Bluetooth::AudioA2dpManager::A2dpOffloadSessionRequest(allA2dpInfos)); } else if (audioActiveDevice_.GetCurrentOutputDeviceType() == DEVICE_TYPE_BLUETOOTH_A2DP && audioActiveDevice_.GetCurrentOutputDeviceNetworkId() == LOCAL_NETWORK_ID && deviceType == DEVICE_TYPE_NONE) { newA2dpOffloadFlag = static_cast( - Bluetooth::AudioA2dpManager::A2dpOffloadSessionRequest(allRunningA2dpInfos)); + Bluetooth::AudioA2dpManager::A2dpOffloadSessionRequest(allA2dpInfos)); } std::lock_guard lock(switchA2dpOffloadMutex_); AUDIO_PRERELEASE_LOGI("device: %{public}d, currentOutputDevice: %{public}d, runningStreamSize: %{public}zu, " "oldA2dpOffloadFlag: %{public}d, newA2dpOffloadFlag: %{public}d", - deviceType, audioActiveDevice_.GetCurrentOutputDeviceType(), allRunningA2dpInfos.size(), + deviceType, audioActiveDevice_.GetCurrentOutputDeviceType(), allA2dpInfos.size(), oldA2dpOffloadFlag, newA2dpOffloadFlag); - if (newA2dpOffloadFlag == NO_A2DP_DEVICE) { - UpdateA2dpOffloadFlagForA2dpDeviceOut(); - } else if (newA2dpOffloadFlag != oldA2dpOffloadFlag) { - if (oldA2dpOffloadFlag == A2DP_OFFLOAD) { - HandleA2dpDeviceOutOffload(newA2dpOffloadFlag, allRunningSessions); - } else if (newA2dpOffloadFlag == A2DP_OFFLOAD) { - HandleA2dpDeviceInOffload(newA2dpOffloadFlag, allRunningSessions); - } else { - // Only NO_A2DP_DEVICE to A2DP_NOT_OFFLOAD case - AUDIO_INFO_LOG("a2dpOffloadFlag change from %{public}d to %{public}d", - oldA2dpOffloadFlag, newA2dpOffloadFlag); - SetA2dpOffloadFlag(newA2dpOffloadFlag); - } - } else if (oldA2dpOffloadFlag == A2DP_OFFLOAD) { + if (allRunningSessions.size() == 0) { + SetA2dpOffloadFlag(newA2dpOffloadFlag); + return ; + } + + if(oldA2dpOffloadFlag != newA2dpOffloadFlag && oldA2dpOffloadFlag == A2DP_OFFLOAD) { + OffloadStartPlaying(allRunningSessions); + SetA2dpOffloadFlag(newA2dpOffloadFlag); + } else if (newA2dpOffloadFlag == A2DP_OFFLOAD) { + SetA2dpOffloadFlag(newA2dpOffloadFlag); OffloadStartPlaying(allRunningSessions); AudioServerProxy::GetInstance().UpdateEffectBtOffloadSupportedProxy(true); GetA2dpOffloadCodecAndSendToDsp(); + } else { + SetA2dpOffloadFlag(newA2dpOffloadFlag); } } #endif -- Gitee From 158d4452d7b68abdb22b8f5f2ad4243b041fe2bf Mon Sep 17 00:00:00 2001 From: lizihao Date: Thu, 11 Sep 2025 15:39:23 +0800 Subject: [PATCH 2/3] codecheck Signed-off-by: lizihao --- .../server/domain/pipe/src/audio_a2dp_offload_manager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/audio_policy/server/domain/pipe/src/audio_a2dp_offload_manager.cpp b/services/audio_policy/server/domain/pipe/src/audio_a2dp_offload_manager.cpp index 3581db15d2..66ae40def8 100644 --- a/services/audio_policy/server/domain/pipe/src/audio_a2dp_offload_manager.cpp +++ b/services/audio_policy/server/domain/pipe/src/audio_a2dp_offload_manager.cpp @@ -300,10 +300,10 @@ void AudioA2dpOffloadManager::UpdateA2dpOffloadFlagInternal( if (allRunningSessions.size() == 0) { SetA2dpOffloadFlag(newA2dpOffloadFlag); - return ; + return; } - if(oldA2dpOffloadFlag != newA2dpOffloadFlag && oldA2dpOffloadFlag == A2DP_OFFLOAD) { + if (oldA2dpOffloadFlag != newA2dpOffloadFlag && oldA2dpOffloadFlag == A2DP_OFFLOAD) { OffloadStartPlaying(allRunningSessions); SetA2dpOffloadFlag(newA2dpOffloadFlag); } else if (newA2dpOffloadFlag == A2DP_OFFLOAD) { -- Gitee From 9cf490307fefdddcc5ecfc41dd89cda50dd251fb Mon Sep 17 00:00:00 2001 From: lizihao Date: Thu, 11 Sep 2025 15:44:45 +0800 Subject: [PATCH 3/3] bugfix Signed-off-by: lizihao --- .../server/domain/pipe/src/audio_a2dp_offload_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/audio_policy/server/domain/pipe/src/audio_a2dp_offload_manager.cpp b/services/audio_policy/server/domain/pipe/src/audio_a2dp_offload_manager.cpp index 66ae40def8..10af771111 100644 --- a/services/audio_policy/server/domain/pipe/src/audio_a2dp_offload_manager.cpp +++ b/services/audio_policy/server/domain/pipe/src/audio_a2dp_offload_manager.cpp @@ -304,7 +304,7 @@ void AudioA2dpOffloadManager::UpdateA2dpOffloadFlagInternal( } if (oldA2dpOffloadFlag != newA2dpOffloadFlag && oldA2dpOffloadFlag == A2DP_OFFLOAD) { - OffloadStartPlaying(allRunningSessions); + OffloadStopPlaying(allRunningSessions); SetA2dpOffloadFlag(newA2dpOffloadFlag); } else if (newA2dpOffloadFlag == A2DP_OFFLOAD) { SetA2dpOffloadFlag(newA2dpOffloadFlag); -- Gitee