From 3828e5b4d7bcbf16c2c686d769efd57ef1792e3f Mon Sep 17 00:00:00 2001 From: huyue57 Date: Wed, 6 Dec 2023 15:12:51 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=BD=95=E9=9F=B3=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E7=9A=84=E9=80=89=E6=8B=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huyue57 Change-Id: I9af28aeeaa3657df434dd38cb02973f24948576e --- .../server/config/audio_strategy_router.xml | 4 +- .../server/config/audio_usage_strategy.xml | 6 +- .../include/service/audio_policy_service.h | 4 ++ .../src/service/audio_policy_service.cpp | 69 ++++++++++++------- .../service/routers/audio_router_center.cpp | 3 +- 5 files changed, 54 insertions(+), 32 deletions(-) diff --git a/services/audio_policy/server/config/audio_strategy_router.xml b/services/audio_policy/server/config/audio_strategy_router.xml index eff2d07edb..9120bd343f 100644 --- a/services/audio_policy/server/config/audio_strategy_router.xml +++ b/services/audio_policy/server/config/audio_strategy_router.xml @@ -15,9 +15,9 @@ --> - + - + diff --git a/services/audio_policy/server/config/audio_usage_strategy.xml b/services/audio_policy/server/config/audio_usage_strategy.xml index 45ed5a1ac5..d0f373aede 100644 --- a/services/audio_policy/server/config/audio_usage_strategy.xml +++ b/services/audio_policy/server/config/audio_usage_strategy.xml @@ -16,13 +16,13 @@ - + - + - + diff --git a/services/audio_policy/server/include/service/audio_policy_service.h b/services/audio_policy/server/include/service/audio_policy_service.h index 4d2ed3dbe5..3fd226f3e1 100644 --- a/services/audio_policy/server/include/service/audio_policy_service.h +++ b/services/audio_policy/server/include/service/audio_policy_service.h @@ -637,6 +637,10 @@ private: void UpdateConnectedDevicesWhenConnectingForInputDevice(const AudioDeviceDescriptor &deviceDescriptor, std::vector> &desc, sptr &audioDescriptor); + void AudioPolicyService::IsSameDevice(unique_ptr &desc, DeviceInfo &deviceInfo); + + void AudioPolicyService::IsSameDevice(unique_ptr &desc, AudioDeviceDescriptor &deviceDesc); + bool interruptEnabled_ = true; bool isUpdateRouteSupported_ = true; bool isCurrentRemoteRenderer = false; 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 000ab09e72..5a365fe276 100644 --- a/services/audio_policy/server/src/service/audio_policy_service.cpp +++ b/services/audio_policy/server/src/service/audio_policy_service.cpp @@ -788,6 +788,7 @@ int32_t AudioPolicyService::SelectOutputDevice(sptr audioRe audioDeviceDescriptors[0]->macAddress_, USER_SELECT_BT); } FetchDevice(true); + FetchDevice(false); return SUCCESS; } @@ -1570,9 +1571,7 @@ void AudioPolicyService::FetchOutputDeviceWhenNoRunningStream() { AUDIO_INFO_LOG("fetch output device when no running stream"); unique_ptr desc = audioRouterCenter_.FetchOutputDevice(STREAM_USAGE_MEDIA, -1); - if (desc->deviceType_ == DEVICE_TYPE_NONE || - (desc->deviceType_ == currentActiveDevice_.deviceType_ && - desc->macAddress_ == currentActiveDevice_.macAddress_)) { + if (desc->deviceType_ == DEVICE_TYPE_NONE || IsSameDevice(desc, currentActiveDevice_)) { AUDIO_INFO_LOG("output device is not change"); return; } @@ -1588,9 +1587,7 @@ void AudioPolicyService::FetchInputDeviceWhenNoRunningStream() { AUDIO_INFO_LOG("fetch input device when no running stream"); unique_ptr desc = audioRouterCenter_.FetchInputDevice(SOURCE_TYPE_MIC, -1); - if (desc->deviceType_ == DEVICE_TYPE_NONE || - (desc->deviceType_ == currentActiveInputDevice_.deviceType_ && - desc->macAddress_ == currentActiveInputDevice_.macAddress_)) { + if (desc->deviceType_ == DEVICE_TYPE_NONE || IsSameDevice(desc, currentActiveInputDevice_)) { AUDIO_INFO_LOG("input device is not change"); return; } @@ -1634,21 +1631,23 @@ int32_t AudioPolicyService::HandleScoDeviceFetched(unique_ptr> &rendererChangeInfos, bool isStreamStatusUpdated = false) { - AUDIO_INFO_LOG("Fecth output device for %{public}zu stream", rendererChangeInfos.size()); + AUDIO_INFO_LOG("Fetch output device for %{public}zu stream", rendererChangeInfos.size()); bool needUpdateActiveDevice = true; bool isUpdateActiveDevice = false; AudioDeviceDescriptor preActiveDevice = currentActiveDevice_; for (auto &rendererChangeInfo : rendererChangeInfos) { - if (rendererChangeInfo->rendererInfo.streamUsage != STREAM_USAGE_VOICE_MODEM_COMMUNICATION && - rendererChangeInfo->rendererState != RENDERER_RUNNING) { + StreamUsage usage = rendererChangeInfo->rendererInfo.streamUsage; + RendererState rendererState = rendererChangeInfo->rendererState; + if ((usage == STREAM_USAGE_VOICE_MODEM_COMMUNICATION && audioScene_ != AUDIO_SCENE_PHONE_CALL) || + (usage != STREAM_USAGE_VOICE_MODEM_COMMUNICATION && rendererState != RENDERER_RUNNING)) { AUDIO_INFO_LOG("stream %{public}d not running, no need fetch device", rendererChangeInfo->sessionId); continue; } - unique_ptr desc = audioRouterCenter_.FetchOutputDevice( - rendererChangeInfo->rendererInfo.streamUsage, rendererChangeInfo->clientUID); - if (desc->deviceType_ == DEVICE_TYPE_NONE || - (desc->deviceType_ == rendererChangeInfo->outputDeviceInfo.deviceType && - desc->macAddress_ == rendererChangeInfo->outputDeviceInfo.macAddress && !sameDeviceSwitchFlag_)) { + unique_ptr desc = audioRouterCenter_.FetchOutputDevice(usage, + rendererChangeInfo->clientUID); + DeviceInfo outputDeviceInfo = rendererChangeInfo->outputDeviceInfo; + if (desc->deviceType_ == DEVICE_TYPE_NONE || (IsSameDevice(desc, outputDeviceInfo) && + !sameDeviceSwitchFlag_)) { AUDIO_INFO_LOG("stream %{public}d device not change, no need move device", rendererChangeInfo->sessionId); continue; } @@ -1661,8 +1660,7 @@ void AudioPolicyService::FetchOutputDevice(vectormacAddress_.c_str()); } if (needUpdateActiveDevice) { - if (currentActiveDevice_.deviceType_ != desc->deviceType_ || - currentActiveDevice_.macAddress_ != desc->macAddress_) { + if (!IsSameDevice(desc, currentActiveDevice_)) { currentActiveDevice_ = AudioDeviceDescriptor(*desc); AUDIO_INFO_LOG("currentActiveDevice update %{public}d", currentActiveDevice_.deviceType_); isUpdateActiveDevice = true; @@ -1691,23 +1689,43 @@ void AudioPolicyService::OffloadStartPlayingIfOffloadMode(uint64_t sessionId) #endif } +void AudioPolicyService::IsSameDevice(unique_ptr &desc, DeviceInfo &deviceInfo) +{ + if (desc->networkId_ == deviceInfo.networkId && desc->deviceType_ == deviceInfo.deviceType && + desc->macAddress_ == deviceInfo.macAddress) { + return true; + } else { + return false; + } +} + +void AudioPolicyService::IsSameDevice(unique_ptr &desc, AudioDeviceDescriptor &deviceDesc) +{ + if (desc->networkId_ == deviceDesc.networkId_ && desc->deviceType_ == deviceDesc.deviceType_ && + desc->macAddress_ == deviceDesc.macAddress_) { + return true; + } else { + return false; + } +} + void AudioPolicyService::FetchInputDevice(vector> &capturerChangeInfos, bool isStreamStatusUpdated = false) { - AUDIO_INFO_LOG("Fecth input device for %{public}zu stream", capturerChangeInfos.size()); + AUDIO_INFO_LOG("Fetch input device for %{public}zu stream", capturerChangeInfos.size()); bool needUpdateActiveDevice = true; bool isUpdateActiveDevice = false; for (auto &capturerChangeInfo : capturerChangeInfos) { - if (capturerChangeInfo->capturerInfo.sourceType != SOURCE_TYPE_VIRTUAL_CAPTURE && - capturerChangeInfo->capturerState != CAPTURER_RUNNING) { + SourceType sourceType = capturerChangeInfo->capturerInfo.sourceType; + if ((sourceType == SOURCE_TYPE_VIRTUAL_CAPTURE && audioScene_ != AUDIO_SCENE_PHONE_CALL) || + (sourceType != SOURCE_TYPE_VIRTUAL_CAPTURE && capturerChangeInfo->capturerState != CAPTURER_RUNNING)) { AUDIO_INFO_LOG("stream %{public}d not running, no need fetch device", capturerChangeInfo->sessionId); continue; } - unique_ptr desc = audioRouterCenter_.FetchInputDevice( - capturerChangeInfo->capturerInfo.sourceType, capturerChangeInfo->clientUID); - if (desc->deviceType_ == DEVICE_TYPE_NONE || - (desc->deviceType_ == capturerChangeInfo->inputDeviceInfo.deviceType && - desc->macAddress_ == capturerChangeInfo->inputDeviceInfo.macAddress)) { + unique_ptr desc = audioRouterCenter_.FetchInputDevice(sourceType, + capturerChangeInfo->clientUID); + DeviceInfo inputDeviceInfo = capturerChangeInfo->inputDeviceInfo; + if (desc->deviceType_ == DEVICE_TYPE_NONE || IsSameDevice(desc, inputDeviceInfo)) { AUDIO_INFO_LOG("stream %{public}d device not change, no need move device", capturerChangeInfo->sessionId); continue; } @@ -1727,8 +1745,7 @@ void AudioPolicyService::FetchInputDevice(vectordeviceType_ || - currentActiveInputDevice_.macAddress_ != desc->macAddress_) { + if (!IsSameDevice(desc, currentActiveInputDevice_)) { currentActiveInputDevice_ = AudioDeviceDescriptor(*desc); AUDIO_INFO_LOG("currentActiveInputDevice update %{public}d", currentActiveInputDevice_.deviceType_); isUpdateActiveDevice = true; diff --git a/services/audio_policy/server/src/service/routers/audio_router_center.cpp b/services/audio_policy/server/src/service/routers/audio_router_center.cpp index 201b8fbd54..d024548e62 100644 --- a/services/audio_policy/server/src/service/routers/audio_router_center.cpp +++ b/services/audio_policy/server/src/service/routers/audio_router_center.cpp @@ -34,7 +34,7 @@ unordered_map AudioRouterCenter::renderConfigMap_ = { {STREAM_USAGE_MEDIA, MEDIA_RENDER_ROUTERS}, {STREAM_USAGE_MUSIC, MEDIA_RENDER_ROUTERS}, {STREAM_USAGE_VOICE_COMMUNICATION, CALL_RENDER_ROUTERS}, - {STREAM_USAGE_VOICE_ASSISTANT, CALL_RENDER_ROUTERS}, + {STREAM_USAGE_VOICE_ASSISTANT, TONE_RENDER_ROUTERS}, {STREAM_USAGE_ALARM, RING_RENDER_ROUTERS}, {STREAM_USAGE_VOICE_MESSAGE, CALL_RENDER_ROUTERS}, {STREAM_USAGE_NOTIFICATION_RINGTONE, TONE_RENDER_ROUTERS}, @@ -58,6 +58,7 @@ unordered_map AudioRouterCenter::capturerConfigMap_ = { {SOURCE_TYPE_VOICE_RECOGNITION, RECORD_CAPTURE_ROUTERS}, {SOURCE_TYPE_PLAYBACK_CAPTURE, RECORD_CAPTURE_ROUTERS}, {SOURCE_TYPE_WAKEUP, RECORD_CAPTURE_ROUTERS}, + {SOURCE_TYPE_VOICE_CALL, CALL_CAPTURE_ROUTERS}, {SOURCE_TYPE_VOICE_COMMUNICATION, CALL_CAPTURE_ROUTERS}, {SOURCE_TYPE_ULTRASONIC, RECORD_CAPTURE_ROUTERS}, {SOURCE_TYPE_VIRTUAL_CAPTURE, CALL_CAPTURE_ROUTERS} -- Gitee From 686fcc76e1b888fe7f90f903adc609c5c9b45b8f Mon Sep 17 00:00:00 2001 From: huyue57 Date: Wed, 6 Dec 2023 15:54:09 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=BD=95=E9=9F=B3=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E7=9A=84=E9=80=89=E6=8B=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huyue57 Change-Id: I7b54e2ceed01301a111a1d99aef968e3c76f70aa --- .../server/include/service/audio_policy_service.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/audio_policy/server/include/service/audio_policy_service.h b/services/audio_policy/server/include/service/audio_policy_service.h index 3fd226f3e1..83e7b0230f 100644 --- a/services/audio_policy/server/include/service/audio_policy_service.h +++ b/services/audio_policy/server/include/service/audio_policy_service.h @@ -637,9 +637,9 @@ private: void UpdateConnectedDevicesWhenConnectingForInputDevice(const AudioDeviceDescriptor &deviceDescriptor, std::vector> &desc, sptr &audioDescriptor); - void AudioPolicyService::IsSameDevice(unique_ptr &desc, DeviceInfo &deviceInfo); + void IsSameDevice(unique_ptr &desc, DeviceInfo &deviceInfo); - void AudioPolicyService::IsSameDevice(unique_ptr &desc, AudioDeviceDescriptor &deviceDesc); + void IsSameDevice(unique_ptr &desc, AudioDeviceDescriptor &deviceDesc); bool interruptEnabled_ = true; bool isUpdateRouteSupported_ = true; -- Gitee From 8908ba972263609de48a41beb23d26a0b5515327 Mon Sep 17 00:00:00 2001 From: huyue57 Date: Wed, 6 Dec 2023 16:35:41 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=BD=95=E9=9F=B3=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E7=9A=84=E9=80=89=E6=8B=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huyue57 Change-Id: I80802a8449a86b057942ec098786a517cea912ad --- .../server/include/service/audio_policy_service.h | 4 ++-- .../audio_policy/server/src/service/audio_policy_service.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/services/audio_policy/server/include/service/audio_policy_service.h b/services/audio_policy/server/include/service/audio_policy_service.h index 83e7b0230f..1dbbe829fb 100644 --- a/services/audio_policy/server/include/service/audio_policy_service.h +++ b/services/audio_policy/server/include/service/audio_policy_service.h @@ -637,9 +637,9 @@ private: void UpdateConnectedDevicesWhenConnectingForInputDevice(const AudioDeviceDescriptor &deviceDescriptor, std::vector> &desc, sptr &audioDescriptor); - void IsSameDevice(unique_ptr &desc, DeviceInfo &deviceInfo); + bool IsSameDevice(unique_ptr &desc, DeviceInfo &deviceInfo); - void IsSameDevice(unique_ptr &desc, AudioDeviceDescriptor &deviceDesc); + bool IsSameDevice(unique_ptr &desc, AudioDeviceDescriptor &deviceDesc); bool interruptEnabled_ = true; bool isUpdateRouteSupported_ = true; 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 5a365fe276..5ecc2956a6 100644 --- a/services/audio_policy/server/src/service/audio_policy_service.cpp +++ b/services/audio_policy/server/src/service/audio_policy_service.cpp @@ -1689,7 +1689,7 @@ void AudioPolicyService::OffloadStartPlayingIfOffloadMode(uint64_t sessionId) #endif } -void AudioPolicyService::IsSameDevice(unique_ptr &desc, DeviceInfo &deviceInfo) +bool AudioPolicyService::IsSameDevice(unique_ptr &desc, DeviceInfo &deviceInfo) { if (desc->networkId_ == deviceInfo.networkId && desc->deviceType_ == deviceInfo.deviceType && desc->macAddress_ == deviceInfo.macAddress) { @@ -1699,7 +1699,7 @@ void AudioPolicyService::IsSameDevice(unique_ptr &desc, D } } -void AudioPolicyService::IsSameDevice(unique_ptr &desc, AudioDeviceDescriptor &deviceDesc) +bool AudioPolicyService::IsSameDevice(unique_ptr &desc, AudioDeviceDescriptor &deviceDesc) { if (desc->networkId_ == deviceDesc.networkId_ && desc->deviceType_ == deviceDesc.deviceType_ && desc->macAddress_ == deviceDesc.macAddress_) { -- Gitee