From 3809e71b24146aa74abb2c1f779a7bf1b20c9110 Mon Sep 17 00:00:00 2001 From: timelessxp Date: Sat, 30 Aug 2025 17:50:11 +0800 Subject: [PATCH 1/6] fix audio ec bug Signed-off-by: timelessxp --- .../audio_policy/server/domain/pipe/include/audio_ec_manager.h | 1 + .../audio_policy/server/domain/pipe/src/audio_ec_manager.cpp | 1 + .../service/service_main/src/audio_core_service_private.cpp | 2 +- .../src/audio_ec_manager_unit_test.cpp | 1 + test/fuzztest/audioecmanager_fuzzer/audio_ec_manager_fuzzer.cpp | 1 + 5 files changed, 5 insertions(+), 1 deletion(-) diff --git a/services/audio_policy/server/domain/pipe/include/audio_ec_manager.h b/services/audio_policy/server/domain/pipe/include/audio_ec_manager.h index 2a06ba54d4..fe694abede 100644 --- a/services/audio_policy/server/domain/pipe/include/audio_ec_manager.h +++ b/services/audio_policy/server/domain/pipe/include/audio_ec_manager.h @@ -1,3 +1,4 @@ +dd /* * Copyright (c) 2021-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/services/audio_policy/server/domain/pipe/src/audio_ec_manager.cpp b/services/audio_policy/server/domain/pipe/src/audio_ec_manager.cpp index 5fd46c330a..36a5661dd3 100644 --- a/services/audio_policy/server/domain/pipe/src/audio_ec_manager.cpp +++ b/services/audio_policy/server/domain/pipe/src/audio_ec_manager.cpp @@ -1,3 +1,4 @@ +dd /* * Copyright (c) 2021-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/services/audio_policy/server/service/service_main/src/audio_core_service_private.cpp b/services/audio_policy/server/service/service_main/src/audio_core_service_private.cpp index 244843c365..2fff7e087a 100644 --- a/services/audio_policy/server/service/service_main/src/audio_core_service_private.cpp +++ b/services/audio_policy/server/service/service_main/src/audio_core_service_private.cpp @@ -2349,7 +2349,7 @@ void AudioCoreService::HandleCommonSourceOpened(std::shared_ptr & CHECK_AND_RETURN_LOG(streamDesc != nullptr, "streamDesc is null"); SourceType sourceType = streamDesc->capturerInfo_.sourceType; if (specialSourceTypeSet_.count(sourceType) == 0) { - audioEcManager_.PrepareNormalSource(pipeInfo->moduleInfo_, streamDesc); + audioEcManager_.PrepareNormalSource(pipeInfo, streamDesc); } } diff --git a/services/audio_policy/test/unittest/audio_ec_manager_unit_test/src/audio_ec_manager_unit_test.cpp b/services/audio_policy/test/unittest/audio_ec_manager_unit_test/src/audio_ec_manager_unit_test.cpp index 0d9a80ed9b..d84d4025c2 100644 --- a/services/audio_policy/test/unittest/audio_ec_manager_unit_test/src/audio_ec_manager_unit_test.cpp +++ b/services/audio_policy/test/unittest/audio_ec_manager_unit_test/src/audio_ec_manager_unit_test.cpp @@ -1,3 +1,4 @@ +dd /* * Copyright (c) 2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/test/fuzztest/audioecmanager_fuzzer/audio_ec_manager_fuzzer.cpp b/test/fuzztest/audioecmanager_fuzzer/audio_ec_manager_fuzzer.cpp index e99bcda38d..4cb1a29b21 100644 --- a/test/fuzztest/audioecmanager_fuzzer/audio_ec_manager_fuzzer.cpp +++ b/test/fuzztest/audioecmanager_fuzzer/audio_ec_manager_fuzzer.cpp @@ -1,3 +1,4 @@ +ddd /* * Copyright (c) 2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); -- Gitee From 68577b42fb7ffdca2757ce116319476fd3e507e8 Mon Sep 17 00:00:00 2001 From: timelessxp Date: Mon, 1 Sep 2025 12:59:23 +0000 Subject: [PATCH 2/6] update services/audio_policy/server/domain/pipe/include/audio_ec_manager.h. Signed-off-by: timelessxp --- .../server/domain/pipe/include/audio_ec_manager.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/services/audio_policy/server/domain/pipe/include/audio_ec_manager.h b/services/audio_policy/server/domain/pipe/include/audio_ec_manager.h index fe694abede..38a1043f66 100644 --- a/services/audio_policy/server/domain/pipe/include/audio_ec_manager.h +++ b/services/audio_policy/server/domain/pipe/include/audio_ec_manager.h @@ -1,4 +1,3 @@ -dd /* * Copyright (c) 2021-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); @@ -69,7 +68,8 @@ public: bool GetMicRefFeatureEnable(); void UpdateStreamEcAndMicRefInfo(AudioModuleInfo &moduleInfo, SourceType sourceType); void SetOpenedNormalSource(SourceType sourceType); - void PrepareNormalSource(AudioModuleInfo &moduleInfo, std::shared_ptr &streamDesc); + void PrepareNormalSource(std::shared_ptr &pipeInfo, + std::shared_ptr &streamDesc); void SetOpenedNormalSourceSessionId(uint64_t sessionId); uint64_t GetOpenedNormalSourceSessionId(); int32_t ReloadNormalSource(SessionInfo &sessionInfo, PipeStreamPropInfo &targetInfo, SourceType targetSource); @@ -84,6 +84,7 @@ private: ~AudioEcManager() {} void UpdateEnhanceEffectState(SourceType source); + void UpdatePrimaryMicModuleInfo(std::shared_ptr &pipeInfo, SourceType sourceType); void UpdateStreamCommonInfo(AudioModuleInfo &moduleInfo, PipeStreamPropInfo &targetInfo, SourceType sourceType); void UpdateAudioEcInfo(const AudioDeviceDescriptor &inputDevice, const AudioDeviceDescriptor &outputDevice); void UpdateModuleInfoForEc(AudioModuleInfo &moduleInfo); -- Gitee From 6cd33734377c0131e297038a48fda9962fd10930 Mon Sep 17 00:00:00 2001 From: timelessxp Date: Mon, 1 Sep 2025 13:02:46 +0000 Subject: [PATCH 3/6] update services/audio_policy/server/domain/pipe/src/audio_ec_manager.cpp. Signed-off-by: timelessxp --- .../domain/pipe/src/audio_ec_manager.cpp | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/services/audio_policy/server/domain/pipe/src/audio_ec_manager.cpp b/services/audio_policy/server/domain/pipe/src/audio_ec_manager.cpp index 36a5661dd3..c3e5b50078 100644 --- a/services/audio_policy/server/domain/pipe/src/audio_ec_manager.cpp +++ b/services/audio_policy/server/domain/pipe/src/audio_ec_manager.cpp @@ -1,4 +1,3 @@ -dd /* * Copyright (c) 2021-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); @@ -217,6 +216,29 @@ void AudioEcManager::UpdateEnhanceEffectState(SourceType source) isEcFeatureEnable_, isMicRefFeatureEnable_, isMicRefRecordOn_, isMicRefVoipUpOn_); } +void AudioEcManager::UpdatePrimaryMicModuleInfo(std::shared_ptr &pipeInfo, SourceType sourceType) +{ + if (pipeInfo->adapterName_ != "primary") { + return; + } + if (!isEcFeatureEnable_) { + return; + } + shared_ptr inputDesc = audioRouterCenter_.FetchInputDevice(sourceType, -1); + if (inputDesc == nullptr || inputDesc->deviceType_ == DEVICE_TYPE_USB_ARM_HEADSET + || inputDesc->deviceType_ == DEVICE_TYPE_BLUETOOTH_A2DP_IN) { + return; + } + + // update primary info for ec config to get later + primaryMicModuleInfo_.channels = pipeInfo->moduleInfo_.channels; + primaryMicModuleInfo_.rate = pipeInfo->moduleInfo_.rate; + primaryMicModuleInfo_.format = pipeInfo->moduleInfo_.format; + AUDIO_INFO_LOG("channels: %{public}s, rate: %{public}s, format: %{public}s", + primaryMicModuleInfo_.channels.c_str(), primaryMicModuleInfo_.rate.c_str(), + primaryMicModuleInfo_.format.c_str()); +} + void AudioEcManager::UpdateStreamCommonInfo(AudioModuleInfo &moduleInfo, PipeStreamPropInfo &targetInfo, SourceType sourceType) { @@ -755,13 +777,14 @@ void AudioEcManager::SetOpenedNormalSource(SourceType sourceType) normalSourceOpened_ = sourceType; } -void AudioEcManager::PrepareNormalSource(AudioModuleInfo &moduleInfo, +void AudioEcManager::PrepareNormalSource(std::shared_ptr &pipeInfo, std::shared_ptr &streamDesc) { SourceType sourceType = streamDesc->capturerInfo_.sourceType; AUDIO_INFO_LOG("prepare normal source for source type: %{public}d", sourceType); UpdateEnhanceEffectState(sourceType); - UpdateStreamEcAndMicRefInfo(moduleInfo, sourceType); + UpdatePrimaryMicModuleInfo(pipeInfo, sourceType); + UpdateStreamEcAndMicRefInfo(pipeInfo->moduleInfo_, sourceType); SetOpenedNormalSource(sourceType); SetOpenedNormalSourceSessionId(streamDesc->sessionId_); } -- Gitee From fc86b44151af00e843c1fb8a6428cb48c6e83ae1 Mon Sep 17 00:00:00 2001 From: timelessxp Date: Mon, 1 Sep 2025 13:13:38 +0000 Subject: [PATCH 4/6] update audio_ec_manager_unit_test.cpp. Signed-off-by: timelessxp --- .../src/audio_ec_manager_unit_test.cpp | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/services/audio_policy/test/unittest/audio_ec_manager_unit_test/src/audio_ec_manager_unit_test.cpp b/services/audio_policy/test/unittest/audio_ec_manager_unit_test/src/audio_ec_manager_unit_test.cpp index d84d4025c2..1ff1bd2efa 100644 --- a/services/audio_policy/test/unittest/audio_ec_manager_unit_test/src/audio_ec_manager_unit_test.cpp +++ b/services/audio_policy/test/unittest/audio_ec_manager_unit_test/src/audio_ec_manager_unit_test.cpp @@ -1,4 +1,3 @@ -dd /* * Copyright (c) 2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); @@ -763,10 +762,10 @@ HWTEST_F(AudioEcManagerUnitTest, AudioEcManager_033, TestSize.Level4) HWTEST_F(AudioEcManagerUnitTest, AudioEcManager_034, TestSize.Level4) { AudioEcManager& ecManager(AudioEcManager::GetInstance()); - AudioModuleInfo moduleInfo = {}; + std::shared_ptr pipeInfo = std::make_shared(); std::shared_ptr streamDesc = std::make_shared(); EXPECT_NO_THROW( - ecManager.PrepareNormalSource(moduleInfo, streamDesc); + ecManager.PrepareNormalSource(pipeInfo, streamDesc); ); } @@ -853,5 +852,22 @@ HWTEST_F(AudioEcManagerUnitTest, AudioEcManager_039, TestSize.Level4) ret = ecManager.FetchTargetInfoForSessionAdd(sessionInfo, targetInfo, targetSourceType); EXPECT_EQ(ret, ERROR); } + +/** +* @tc.name : Test AudioEcManager. +* @tc.number: AudioEcManager_040 +* @tc.desc : Test UpdatePrimaryMicModuleInfo interface. +*/ +HWTEST_F(AudioEcManagerUnitTest, AudioEcManager_040, TestSize.Level4) +{ + SourceType sourceType = SOURCE_TYPE_VOICE_COMMUNICATION; + auto ecManager = std::make_shared(); + ASSERT_TRUE(ecManager != nullptr); + + std::shared_ptr pipeInfo = std::make_shared(); + ecManager->isEcFeatureEnable_ = true; + ecManager->UpdatePrimaryMicModuleInfo(pipeInfo, sourceType); + EXPECT_EQ(ecManager->primaryMicModuleInfo_.rate, "48000"); +} } // namespace AudioStandard } // namespace OHOS \ No newline at end of file -- Gitee From bc9760f945529e25fbdc62ab5f6e554e2e4fead1 Mon Sep 17 00:00:00 2001 From: timelessxp Date: Mon, 1 Sep 2025 13:14:53 +0000 Subject: [PATCH 5/6] update test/fuzztest/audioecmanager_fuzzer/audio_ec_manager_fuzzer.cpp. Signed-off-by: timelessxp --- .../audio_ec_manager_fuzzer.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/test/fuzztest/audioecmanager_fuzzer/audio_ec_manager_fuzzer.cpp b/test/fuzztest/audioecmanager_fuzzer/audio_ec_manager_fuzzer.cpp index 4cb1a29b21..93d152c275 100644 --- a/test/fuzztest/audioecmanager_fuzzer/audio_ec_manager_fuzzer.cpp +++ b/test/fuzztest/audioecmanager_fuzzer/audio_ec_manager_fuzzer.cpp @@ -1,4 +1,3 @@ -ddd /* * Copyright (c) 2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); @@ -119,6 +118,15 @@ void UpdateEnhanceEffectStateFuzzTest() ecManager.UpdateEnhanceEffectState(source); } +void UpdatePrimaryMicModuleInfoFuzzTest() +{ + AudioEcManager& ecManager(AudioEcManager::GetInstance()); + SourceType source = g_fuzzUtils.GetData(); + std::shared_ptr pipeInfo = std::make_shared(); + CHECK_AND_RETURN(pipeInfo != nullptr); + ecManager.UpdatePrimaryMicModuleInfo(pipeInfo, source); +} + void UpdateStreamCommonInfoFuzzTest() { AudioEcManager& ecManager(AudioEcManager::GetInstance()); @@ -309,11 +317,12 @@ void GetHalNameForDeviceFuzzTest() void PrepareNormalSourceFuzzTest() { - AudioModuleInfo moduleInfo; + std::shared_ptr pipeInfo = std::make_shared(); + CHECK_AND_RETURN(pipeInfo != nullptr); std::shared_ptr streamDesc = std::make_shared(); CHECK_AND_RETURN(streamDesc != nullptr); AudioEcManager& ecManager(AudioEcManager::GetInstance()); - ecManager.PrepareNormalSource(moduleInfo, streamDesc); + ecManager.PrepareNormalSource(pipeInfo, streamDesc); } void GetOpenedNormalSourceSessionIdFuzzTest() -- Gitee From 0cef1073d4f5dc14b1800e901d2bf3360706d727 Mon Sep 17 00:00:00 2001 From: timelessxp Date: Mon, 1 Sep 2025 13:25:47 +0000 Subject: [PATCH 6/6] update audio_ec_manager_unit_test.cpp. Signed-off-by: timelessxp --- .../src/audio_ec_manager_unit_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/audio_policy/test/unittest/audio_ec_manager_unit_test/src/audio_ec_manager_unit_test.cpp b/services/audio_policy/test/unittest/audio_ec_manager_unit_test/src/audio_ec_manager_unit_test.cpp index 1ff1bd2efa..08b2cfcd9a 100644 --- a/services/audio_policy/test/unittest/audio_ec_manager_unit_test/src/audio_ec_manager_unit_test.cpp +++ b/services/audio_policy/test/unittest/audio_ec_manager_unit_test/src/audio_ec_manager_unit_test.cpp @@ -866,7 +866,7 @@ HWTEST_F(AudioEcManagerUnitTest, AudioEcManager_040, TestSize.Level4) std::shared_ptr pipeInfo = std::make_shared(); ecManager->isEcFeatureEnable_ = true; - ecManager->UpdatePrimaryMicModuleInfo(pipeInfo, sourceType); + ecManager->UpdatePrimaryMicModuleInfo(pipeInfo, sourceType); EXPECT_EQ(ecManager->primaryMicModuleInfo_.rate, "48000"); } } // namespace AudioStandard -- Gitee