diff --git a/config.gni b/config.gni index 12ebfbd06e1e8d92c5bd169b69c9d0823c7f9c6b..f87334bd1d7fce5a54f0e652b8ef8697982f5b9b 100644 --- a/config.gni +++ b/config.gni @@ -34,7 +34,7 @@ declare_args() { audio_framework_feature_file_io = true audio_framework_feature_inner_capturer = true audio_framework_feature_low_latency = true - audio_framework_feature_new_engine_flag = false + audio_framework_feature_new_engine_flag = true audio_framework_feature_usb_audio = false if (defined(global_parts_info) && diff --git a/frameworks/native/audioeffect/include/audio_effect_chain_manager.h b/frameworks/native/audioeffect/include/audio_effect_chain_manager.h index 8405aedc45c9beaa12626c329aaf1c850f81a80d..1984d523a3de17288a4b9d1bbb7f7f42583bbbf8 100644 --- a/frameworks/native/audioeffect/include/audio_effect_chain_manager.h +++ b/frameworks/native/audioeffect/include/audio_effect_chain_manager.h @@ -159,6 +159,7 @@ public: ProcessClusterOperation CheckProcessClusterInstances(const std::string &sceneType); int32_t GetOutputChannelInfo(const std::string &sceneType, uint32_t &channels, uint64_t &channelLayout); int32_t DeleteStreamVolume(const std::string StringSessionID); + bool ExistAudioEffectChainInner(const std::string sceneType, const AudioEffectMode effectMode); private: int32_t SetAudioEffectChainDynamic(std::string &sceneType, const std::string &effectMode); void UpdateSensorState(); diff --git a/frameworks/native/audioeffect/libaudio_effect.versionscript b/frameworks/native/audioeffect/libaudio_effect.versionscript index fd9563a1968da9a1d0b7eabab84291c13c62bb7e..992bebd8932d173dc116e763e4b335095a95db33 100644 --- a/frameworks/native/audioeffect/libaudio_effect.versionscript +++ b/frameworks/native/audioeffect/libaudio_effect.versionscript @@ -98,6 +98,7 @@ *ResetInfo*; *SetAbsVolumeStateToEffect*; *DeleteStreamVolume*; + *ExistAudioEffectChainInner*; local: *; }; \ No newline at end of file diff --git a/frameworks/native/audioeffect/src/audio_effect_chain_manager.cpp b/frameworks/native/audioeffect/src/audio_effect_chain_manager.cpp index 236ff00f59f91f09f8a9b4f938e2110321f8e1df..e557c37907b809595f9270d763e4151be2299fe8 100644 --- a/frameworks/native/audioeffect/src/audio_effect_chain_manager.cpp +++ b/frameworks/native/audioeffect/src/audio_effect_chain_manager.cpp @@ -2011,5 +2011,21 @@ int32_t AudioEffectChainManager::EffectApAbsVolumeStateUpdate(const bool absVolu return SUCCESS; } + +bool AudioEffectChainManager::ExistAudioEffectChainInner(const std::string sceneType, const AudioEffectMode effectMode) +{ + std::lock_guard lock(dynamicMutex_); + if (effectMode == EFFECT_NONE) { + return false; + } + const std::unordered_map &audioSupportedSceneModes = GetAudioSupportedSceneModes(); + std::string sceneMode = audioSupportedSceneModes.find(effectMode)->second; + std::string effectChainKey = sceneType + "_&_" + sceneMode + "_&_" + GetDeviceTypeName(); + if (!sceneTypeAndModeToEffectChainNameMap_.count(effectChainKey)) { + AUDIO_ERR_LOG("EffectChain key [%{public}s] does not exist", effectChainKey.c_str()); + return false; + } + return true; +} } // namespace AudioStandard } // namespace OHOS diff --git a/services/audio_engine/manager/src/hpae_renderer_manager.cpp b/services/audio_engine/manager/src/hpae_renderer_manager.cpp index fdb85edef9f20aec9944de184ed8cc3deab64fd2..f7010b4f438a881331dc59638ca8733a8df4a1a9 100644 --- a/services/audio_engine/manager/src/hpae_renderer_manager.cpp +++ b/services/audio_engine/manager/src/hpae_renderer_manager.cpp @@ -249,9 +249,11 @@ HpaeProcessorType HpaeRendererManager::TransToProperSceneType(StreamUsage stream HpaeProcessorType HpaeRendererManager::GetProcessorType(uint32_t sessionId) { HpaeNodeInfo nodeInfo = sinkInputNodeMap_[sessionId]->GetNodeInfo(); - if ((sessionNodeMap_[sessionId].bypass || nodeInfo.effectInfo.effectMode == EFFECT_NONE) && - (!isSplitProcessorType(nodeInfo.sceneType))) { - return HPAE_SCENE_EFFECT_NONE; + std::string sceneType = TransProcessorTypeToSceneType(nodeInfo.sceneType); + bool ret = AudioEffectChainManager::GetInstance()->ExistAudioEffectChainInner(sceneType, + nodeInfo.effectInfo.effectMode); + if ((!isSplitProcessorType(nodeInfo.sceneType)) && (sessionNodeMap_[sessionId].bypass || ret == false)) { + return HPAE_SCENE_EFFECT_NONE; } return nodeInfo.sceneType; } diff --git a/test/fuzztest/audioeffectchain_fuzzer/audio_effect_chain_fuzzer.cpp b/test/fuzztest/audioeffectchain_fuzzer/audio_effect_chain_fuzzer.cpp index 05d2d82281461edf0cfc7f7b1a755a8ca78227a8..09f5ac5298464290ef7ec57c0358dcadbaf6ee5e 100644 --- a/test/fuzztest/audioeffectchain_fuzzer/audio_effect_chain_fuzzer.cpp +++ b/test/fuzztest/audioeffectchain_fuzzer/audio_effect_chain_fuzzer.cpp @@ -1115,13 +1115,6 @@ void ReleaseAudioEffectChainDynamicInnerFuzzTest() audioEffectChainManager->ReleaseAudioEffectChainDynamicInner(sceneType); } -void EnhanceChainManagerGetAlgoConfigFuzzTest() -{ - struct DeviceAttrAdapter validAdapter; - EnhanceChainManagerCreateCb(0, &validAdapter); - EnhanceChainManagerSendInitCommand(); -} - void QueryEffectChannelInfoInnerFuzzTest() { AudioEffectChainManager *audioEffectChainManager = AudioEffectChainManager::GetInstance(); @@ -1205,7 +1198,7 @@ void EnhanceChainManagerUpdatePropertyAndSendToAlgoFuzzTest() audioEnhanceChainManagerImpl.UpdatePropertyAndSendToAlgo(deviceType); } -typedef void (*TestFuncs[59])(); +typedef void (*TestFuncs[58])(); TestFuncs g_testFuncs = { EffectChainManagerInitCbFuzzTest, @@ -1261,7 +1254,6 @@ TestFuncs g_testFuncs = { AudioEnhanceChainUpdateExtraSceneTypeFuzzTest, SetAbsVolumeStateToEffectFuzzTest, ReleaseAudioEffectChainDynamicInnerFuzzTest, - EnhanceChainManagerGetAlgoConfigFuzzTest, QueryEffectChannelInfoInnerFuzzTest, EffectChainManagerExistAudioEffectChainInnerFuzzTest1, EffectChainManagerExistAudioEffectChainInnerFuzzTest2,