From fb681eda4315ae09e44102bd1f7b07cd93573f28 Mon Sep 17 00:00:00 2001 From: ruiyangsun Date: Fri, 22 Aug 2025 11:56:19 +0800 Subject: [PATCH 1/6] fix pc bug in power on Signed-off-by: ruiyangsun --- .../service_main/include/audio_core_service.h | 2 ++ .../service/service_main/src/audio_core_service.cpp | 13 ++++++++++--- .../service_main/src/audio_policy_server.cpp | 10 ++++------ .../src/audio_core_service_entry_unit_test.cpp | 10 +++++++--- 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/services/audio_policy/server/service/service_main/include/audio_core_service.h b/services/audio_policy/server/service/service_main/include/audio_core_service.h index b154ad5b5a..6159923ff1 100644 --- a/services/audio_policy/server/service/service_main/include/audio_core_service.h +++ b/services/audio_policy/server/service/service_main/include/audio_core_service.h @@ -304,6 +304,7 @@ private: void ClearStreamPropInfo(const std::string &adapterName, const std::string &pipeName); uint32_t GetStreamPropInfoSize(const std::string &adapterName, const std::string &pipeName); int32_t CaptureConcurrentCheck(uint32_t sessionId); + void SetFirstScreenOn(); private: static std::string GetEncryptAddr(const std::string &addr); @@ -577,6 +578,7 @@ private: }; std::unordered_map voiceMuteStateMap_; std::shared_mutex muteMutex_; + bool isFirstScreenOn_ = false; }; } } diff --git a/services/audio_policy/server/service/service_main/src/audio_core_service.cpp b/services/audio_policy/server/service/service_main/src/audio_core_service.cpp index 5c817f90c5..5cd221299c 100644 --- a/services/audio_policy/server/service/service_main/src/audio_core_service.cpp +++ b/services/audio_policy/server/service/service_main/src/audio_core_service.cpp @@ -1265,9 +1265,11 @@ int32_t AudioCoreService::FetchOutputDeviceAndRoute(std::string caller, const Au } streamUsage = (streamUsage != StreamUsage::STREAM_USAGE_INVALID) ? streamUsage : streamDesc->rendererInfo_.streamUsage; - streamDesc->newDeviceDescs_ = - audioRouterCenter_.FetchOutputDevices(streamUsage, GetRealUid(streamDesc), - caller + "FetchOutputDeviceAndRoute"); + if (!isFirstScreenOn_) { + streamDesc->newDeviceDescs_ = + audioRouterCenter_.FetchOutputDevices(streamUsage, GetRealUid(streamDesc), + caller + "FetchOutputDeviceAndRoute"); + } AUDIO_INFO_LOG("[AudioSession] streamUsage %{public}d renderer streamUsage %{public}d", streamUsage, streamDesc->rendererInfo_.streamUsage); AUDIO_INFO_LOG("[DeviceFetchInfo] device %{public}s for stream %{public}d with status %{public}u", @@ -1416,5 +1418,10 @@ int32_t AudioCoreService::CaptureConcurrentCheck(uint32_t sessionId) WriteCapturerConcurrentEvent(dfxResult); return SUCCESS; } + +int32_t AudioCoreService::SetFirstScreenOn() +{ + isFirstScreenOn_ = true; +} } // namespace AudioStandard } // namespace OHOS diff --git a/services/audio_policy/server/service/service_main/src/audio_policy_server.cpp b/services/audio_policy/server/service/service_main/src/audio_policy_server.cpp index 1ef8492636..ad1014ea43 100644 --- a/services/audio_policy/server/service/service_main/src/audio_policy_server.cpp +++ b/services/audio_policy/server/service/service_main/src/audio_policy_server.cpp @@ -274,7 +274,7 @@ void AudioPolicyServer::OnStart() SubscribeVolumeKeyEvents(); #endif if (getpid() > FIRST_SCREEN_ON_PID) { - audioDeviceCommon_.SetFirstScreenOn(); + coreService_->SetFirstScreenOn(); } // Restart to reload the volume. InitKVStore(); @@ -1059,11 +1059,9 @@ void AudioPolicyServer::OnReceiveEvent(const EventFwk::CommonEventData &eventDat eventEntry_->OnReceiveUpdateDeviceNameEvent(macAddress, deviceName); } else if (action == "usual.event.SCREEN_ON") { AUDIO_INFO_LOG("receive SCREEN_ON action, control audio focus if need"); - audioDeviceCommon_.SetFirstScreenOn(); - if (powerStateListener_ == nullptr) { - AUDIO_ERR_LOG("powerStateListener_ is nullptr"); - return; - } + CHECK_AND_RETURN_RET_LOG(coreService_, "coreService_ is nullptr"); + coreService_->SetFirstScreenOn(); + CHECK_AND_RETURN_RET_LOG(powerStateListener_, "coreService_ is nullptr"); powerStateListener_->ControlAudioFocus(false); } else if (action == "usual.event.SCREEN_LOCKED") { AUDIO_INFO_LOG("receive SCREEN_OFF or SCREEN_LOCKED action, control audio volume change if stream is active"); diff --git a/services/audio_policy/test/unittest/audio_core_service_entry_unit_test/src/audio_core_service_entry_unit_test.cpp b/services/audio_policy/test/unittest/audio_core_service_entry_unit_test/src/audio_core_service_entry_unit_test.cpp index 59b56f5fcd..bb6db2fe7a 100644 --- a/services/audio_policy/test/unittest/audio_core_service_entry_unit_test/src/audio_core_service_entry_unit_test.cpp +++ b/services/audio_policy/test/unittest/audio_core_service_entry_unit_test/src/audio_core_service_entry_unit_test.cpp @@ -875,15 +875,19 @@ HWTEST(AudioCoreServiceEntryTest, AudioCoreService_040, TestSize.Level1) HWTEST(AudioCoreServiceEntryTest, FetchOutputDeviceAndRoute_041, TestSize.Level1) { auto audioCoreService = std::make_shared(); - EXPECT_NE(audioCoreService, nullptr); + ASSERT_NE(audioCoreService, nullptr); auto eventEntry = std::make_shared(audioCoreService); - EXPECT_NE(eventEntry, nullptr); + ASSERT_NE(eventEntry, nullptr); std::string caller; AudioStreamDeviceChangeReasonExt reason; auto ret = eventEntry->FetchOutputDeviceAndRoute(caller, reason); - EXPECT_NE(ret, ERR_UNKNOWN); + EXPECT_EQ(ret, SUCCESS); + + audioCoreService->isFirstScreenOn_ = false; + ret = eventEntry->FetchOutputDeviceAndRoute(caller, reason); + EXPECT_EQ(ret, SUCCESS); } /** -- Gitee From 7e800d76c93d44066757ee798dccc6242c689be7 Mon Sep 17 00:00:00 2001 From: ruiyangsun Date: Fri, 22 Aug 2025 15:00:13 +0800 Subject: [PATCH 2/6] fix pc bug in power on Signed-off-by: ruiyangsun --- .../server/service/service_main/src/audio_core_service.cpp | 2 +- .../server/service/service_main/src/audio_policy_server.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/services/audio_policy/server/service/service_main/src/audio_core_service.cpp b/services/audio_policy/server/service/service_main/src/audio_core_service.cpp index 5cd221299c..a07b99ecd4 100644 --- a/services/audio_policy/server/service/service_main/src/audio_core_service.cpp +++ b/services/audio_policy/server/service/service_main/src/audio_core_service.cpp @@ -1419,7 +1419,7 @@ int32_t AudioCoreService::CaptureConcurrentCheck(uint32_t sessionId) return SUCCESS; } -int32_t AudioCoreService::SetFirstScreenOn() +void AudioCoreService::SetFirstScreenOn() { isFirstScreenOn_ = true; } diff --git a/services/audio_policy/server/service/service_main/src/audio_policy_server.cpp b/services/audio_policy/server/service/service_main/src/audio_policy_server.cpp index ad1014ea43..8118c53fd0 100644 --- a/services/audio_policy/server/service/service_main/src/audio_policy_server.cpp +++ b/services/audio_policy/server/service/service_main/src/audio_policy_server.cpp @@ -1059,9 +1059,9 @@ void AudioPolicyServer::OnReceiveEvent(const EventFwk::CommonEventData &eventDat eventEntry_->OnReceiveUpdateDeviceNameEvent(macAddress, deviceName); } else if (action == "usual.event.SCREEN_ON") { AUDIO_INFO_LOG("receive SCREEN_ON action, control audio focus if need"); - CHECK_AND_RETURN_RET_LOG(coreService_, "coreService_ is nullptr"); + CHECK_AND_RETURN_LOG(coreService_, "coreService_ is nullptr"); coreService_->SetFirstScreenOn(); - CHECK_AND_RETURN_RET_LOG(powerStateListener_, "coreService_ is nullptr"); + CHECK_AND_RETURN_LOG(powerStateListener_, "coreService_ is nullptr"); powerStateListener_->ControlAudioFocus(false); } else if (action == "usual.event.SCREEN_LOCKED") { AUDIO_INFO_LOG("receive SCREEN_OFF or SCREEN_LOCKED action, control audio volume change if stream is active"); -- Gitee From add99a12f4717e5eef9c37fdfdb1ac5e60767930 Mon Sep 17 00:00:00 2001 From: ruiyangsun Date: Sat, 23 Aug 2025 10:10:48 +0800 Subject: [PATCH 3/6] fix bug Signed-off-by: ruiyangsun --- .../service/service_main/src/audio_core_service.cpp | 10 ++++++---- .../src/audio_core_service_entry_unit_test.cpp | 10 +++------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/services/audio_policy/server/service/service_main/src/audio_core_service.cpp b/services/audio_policy/server/service/service_main/src/audio_core_service.cpp index a07b99ecd4..b99af4f465 100644 --- a/services/audio_policy/server/service/service_main/src/audio_core_service.cpp +++ b/services/audio_policy/server/service/service_main/src/audio_core_service.cpp @@ -1265,10 +1265,12 @@ int32_t AudioCoreService::FetchOutputDeviceAndRoute(std::string caller, const Au } streamUsage = (streamUsage != StreamUsage::STREAM_USAGE_INVALID) ? streamUsage : streamDesc->rendererInfo_.streamUsage; - if (!isFirstScreenOn_) { - streamDesc->newDeviceDescs_ = - audioRouterCenter_.FetchOutputDevices(streamUsage, GetRealUid(streamDesc), - caller + "FetchOutputDeviceAndRoute"); + if (VolumeUtils::IsPCVolumeEnable() && !isFirstScreenOn_) { + streamDesc->AddNewDevice(AudioDeviceManager::GetAudioDeviceManager().GetRenderDefaultDevice()); + } else { + auto device = audioRouterCenter_.FetchOutputDevices(streamUsage, GetRealUid(streamDesc), + caller + "FetchOutputDeviceAndRoute"); + streamDesc->UpdateNewDevice(device); } AUDIO_INFO_LOG("[AudioSession] streamUsage %{public}d renderer streamUsage %{public}d", streamUsage, streamDesc->rendererInfo_.streamUsage); diff --git a/services/audio_policy/test/unittest/audio_core_service_entry_unit_test/src/audio_core_service_entry_unit_test.cpp b/services/audio_policy/test/unittest/audio_core_service_entry_unit_test/src/audio_core_service_entry_unit_test.cpp index bb6db2fe7a..1038e0c1d5 100644 --- a/services/audio_policy/test/unittest/audio_core_service_entry_unit_test/src/audio_core_service_entry_unit_test.cpp +++ b/services/audio_policy/test/unittest/audio_core_service_entry_unit_test/src/audio_core_service_entry_unit_test.cpp @@ -875,19 +875,15 @@ HWTEST(AudioCoreServiceEntryTest, AudioCoreService_040, TestSize.Level1) HWTEST(AudioCoreServiceEntryTest, FetchOutputDeviceAndRoute_041, TestSize.Level1) { auto audioCoreService = std::make_shared(); - ASSERT_NE(audioCoreService, nullptr); + EXPECT_NE(audioCoreService, nullptr); auto eventEntry = std::make_shared(audioCoreService); - ASSERT_NE(eventEntry, nullptr); + EXPECT_NE(eventEntry, nullptr); std::string caller; AudioStreamDeviceChangeReasonExt reason; auto ret = eventEntry->FetchOutputDeviceAndRoute(caller, reason); - EXPECT_EQ(ret, SUCCESS); - - audioCoreService->isFirstScreenOn_ = false; - ret = eventEntry->FetchOutputDeviceAndRoute(caller, reason); - EXPECT_EQ(ret, SUCCESS); + EXPECT_EQ(ret, ERR_UNKNOW); } /** -- Gitee From d6c87a8b186d32325edb5d898eb4bc25371fbc8d Mon Sep 17 00:00:00 2001 From: ruiyangsun Date: Sat, 23 Aug 2025 10:11:59 +0800 Subject: [PATCH 4/6] fix pc bug in power on Signed-off-by: ruiyangsun --- .../src/audio_core_service_entry_unit_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/audio_policy/test/unittest/audio_core_service_entry_unit_test/src/audio_core_service_entry_unit_test.cpp b/services/audio_policy/test/unittest/audio_core_service_entry_unit_test/src/audio_core_service_entry_unit_test.cpp index 1038e0c1d5..59b56f5fcd 100644 --- a/services/audio_policy/test/unittest/audio_core_service_entry_unit_test/src/audio_core_service_entry_unit_test.cpp +++ b/services/audio_policy/test/unittest/audio_core_service_entry_unit_test/src/audio_core_service_entry_unit_test.cpp @@ -883,7 +883,7 @@ HWTEST(AudioCoreServiceEntryTest, FetchOutputDeviceAndRoute_041, TestSize.Level1 AudioStreamDeviceChangeReasonExt reason; auto ret = eventEntry->FetchOutputDeviceAndRoute(caller, reason); - EXPECT_EQ(ret, ERR_UNKNOW); + EXPECT_NE(ret, ERR_UNKNOWN); } /** -- Gitee From c53b63223c98a3a01e37af6d3789c52a1f059899 Mon Sep 17 00:00:00 2001 From: ruiyangsun Date: Sat, 23 Aug 2025 10:23:11 +0800 Subject: [PATCH 5/6] fix pc bug in power on Signed-off-by: ruiyangsun --- .../server/service/service_main/src/audio_core_service.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/services/audio_policy/server/service/service_main/src/audio_core_service.cpp b/services/audio_policy/server/service/service_main/src/audio_core_service.cpp index b99af4f465..df3f4b43cf 100644 --- a/services/audio_policy/server/service/service_main/src/audio_core_service.cpp +++ b/services/audio_policy/server/service/service_main/src/audio_core_service.cpp @@ -1265,13 +1265,14 @@ int32_t AudioCoreService::FetchOutputDeviceAndRoute(std::string caller, const Au } streamUsage = (streamUsage != StreamUsage::STREAM_USAGE_INVALID) ? streamUsage : streamDesc->rendererInfo_.streamUsage; + std::vector> devices; if (VolumeUtils::IsPCVolumeEnable() && !isFirstScreenOn_) { - streamDesc->AddNewDevice(AudioDeviceManager::GetAudioDeviceManager().GetRenderDefaultDevice()); + devices.push_back(AudioDeviceManager::GetAudioDeviceManager().GetRenderDefaultDevice()); } else { - auto device = audioRouterCenter_.FetchOutputDevices(streamUsage, GetRealUid(streamDesc), + devices = audioRouterCenter_.FetchOutputDevices(streamUsage, GetRealUid(streamDesc), caller + "FetchOutputDeviceAndRoute"); - streamDesc->UpdateNewDevice(device); } + streamDesc->UpdateNewDevice(devices); AUDIO_INFO_LOG("[AudioSession] streamUsage %{public}d renderer streamUsage %{public}d", streamUsage, streamDesc->rendererInfo_.streamUsage); AUDIO_INFO_LOG("[DeviceFetchInfo] device %{public}s for stream %{public}d with status %{public}u", -- Gitee From 703258a960ed4aa9d5136eb7d67f6a2f871ef38a Mon Sep 17 00:00:00 2001 From: ruiyangsun Date: Sat, 23 Aug 2025 11:46:02 +0800 Subject: [PATCH 6/6] fix pc bug in power on Signed-off-by: ruiyangsun --- .../server/service/service_main/src/audio_policy_server.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/audio_policy/server/service/service_main/src/audio_policy_server.cpp b/services/audio_policy/server/service/service_main/src/audio_policy_server.cpp index 8118c53fd0..b803d70982 100644 --- a/services/audio_policy/server/service/service_main/src/audio_policy_server.cpp +++ b/services/audio_policy/server/service/service_main/src/audio_policy_server.cpp @@ -1061,7 +1061,7 @@ void AudioPolicyServer::OnReceiveEvent(const EventFwk::CommonEventData &eventDat AUDIO_INFO_LOG("receive SCREEN_ON action, control audio focus if need"); CHECK_AND_RETURN_LOG(coreService_, "coreService_ is nullptr"); coreService_->SetFirstScreenOn(); - CHECK_AND_RETURN_LOG(powerStateListener_, "coreService_ is nullptr"); + CHECK_AND_RETURN_LOG(powerStateListener_, "powerStateListener_ is nullptr"); powerStateListener_->ControlAudioFocus(false); } else if (action == "usual.event.SCREEN_LOCKED") { AUDIO_INFO_LOG("receive SCREEN_OFF or SCREEN_LOCKED action, control audio volume change if stream is active"); -- Gitee