From c74eb025f41c86dd9da668c83f321ae21ea5d56b Mon Sep 17 00:00:00 2001 From: huyue57 Date: Mon, 27 Nov 2023 15:49:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A0running=E6=B5=81=E6=97=B6=E4=BD=BF?= =?UTF-8?q?=E7=94=A8media=E7=B1=BB=E5=9E=8B=E9=87=8D=E9=80=89=E8=AE=BE?= =?UTF-8?q?=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huyue57 Change-Id: Ie41c64efd47b955ba9826387ed606db2ab13ec50 --- .../include/service/audio_policy_service.h | 2 ++ .../src/service/audio_policy_service.cpp | 20 ++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) 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 9439e5c78d..23353f18eb 100644 --- a/services/audio_policy/server/include/service/audio_policy_service.h +++ b/services/audio_policy/server/include/service/audio_policy_service.h @@ -559,6 +559,8 @@ private: void AddEarpiece(); + void FetchOutputDeviceWhenNoRunningStream(); + 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 71500c8226..06a8226aca 100644 --- a/services/audio_policy/server/src/service/audio_policy_service.cpp +++ b/services/audio_policy/server/src/service/audio_policy_service.cpp @@ -1358,12 +1358,28 @@ void AudioPolicyService::SelectNewInputDevice(unique_ptr desc = audioRouterCenter_.FetchOutputDevice(STREAM_USAGE_MEDIA, -1); + if (desc->deviceType_ == DEVICE_TYPE_NONE || desc->deviceType_ == currentActiveDevice_.deviceType_) { + return; + } + if (GetVolumeGroupType(currentActiveDevice_.deviceType_) != GetVolumeGroupType(desc->deviceType_)) { + SetVolumeForSwitchDevice(currentActiveDevice_.deviceType_); + } + currentActiveDevice_ = AudioDeviceDescriptor(*desc); + AUDIO_INFO_LOG("currentActiveDevice update %{public}d", currentActiveDevice_.deviceType_); + OnPreferredOutputDeviceUpdated(currentActiveDevice_); +} + void AudioPolicyService::FetchOutputDevice(vector> &rendererChangeInfos, bool isStreamStatusUpdated = false) { AUDIO_INFO_LOG("Fecth 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) { @@ -1400,10 +1416,12 @@ void AudioPolicyService::FetchOutputDevice(vector