From fe3dac720a4b71a508c07c313585066cd7502a6d Mon Sep 17 00:00:00 2001 From: s30056362 Date: Fri, 9 Aug 2024 09:31:59 +0800 Subject: [PATCH 1/7] bugfix Signed-off-by: s30056362 --- .../audioeffect/src/audio_enhance_chain.cpp | 49 ++++++++++++------- .../src/audio_enhance_chain_adapter.cpp | 22 +++++---- .../source/primary/audio_capturer_source.cpp | 19 ++++--- .../native/pulseaudio/modules/hdi/hdi_sink.c | 2 +- .../native/audiocommon/include/audio_effect.h | 2 +- 5 files changed, 58 insertions(+), 36 deletions(-) diff --git a/frameworks/native/audioeffect/src/audio_enhance_chain.cpp b/frameworks/native/audioeffect/src/audio_enhance_chain.cpp index 5f5deeae43..23677511dc 100644 --- a/frameworks/native/audioeffect/src/audio_enhance_chain.cpp +++ b/frameworks/native/audioeffect/src/audio_enhance_chain.cpp @@ -32,11 +32,6 @@ const uint32_t BITLENGTH = 8; const uint32_t MILLISECOND = 1000; const uint32_t DEFAULT_FRAMELENGTH = 20; const uint32_t DEFAULT_SAMPLE_RATE = 48000; -const uint32_t DEFAULT_DATAFORMAT = 16; -const uint32_t DEFAULT_EC_NUM = 0; -const uint32_t DEFAULT_MIC_NUM = 4; -const uint32_t DEFAULT_MIC_REF_NUM = 4; -const uint32_t DEFAULT_OUT_NUM = 4; AudioEnhanceChain::AudioEnhanceChain(const std::string &scene, const AudioEnhanceParamAdapter &algoParam, const AudioEnhanceDeviceAttr &deviceAttr, const bool defaultFlag) @@ -61,8 +56,17 @@ void AudioEnhanceChain::InitAudioEnhanceChain() enhanceLibHandles_.clear(); standByEnhanceHandles_.clear(); - algoSupportedConfig_ = {DEFAULT_FRAMELENGTH, DEFAULT_SAMPLE_RATE, DEFAULT_DATAFORMAT, DEFAULT_MIC_NUM, - DEFAULT_EC_NUM, DEFAULT_MIC_REF_NUM, DEFAULT_OUT_NUM}; + algoSupportedConfig_ = {DEFAULT_FRAMELENGTH, deviceAttr_.micRate, deviceAttr_.micFormat * BITLENGTH, + deviceAttr_.micChannels, deviceAttr_.ecChannels, deviceAttr_.micRefChannels, deviceAttr_.micChannels}; + + uint32_t byteLenPerFrame = DEFAULT_FRAMELENGTH * (deviceAttr_.micRate / MILLISECOND) * deviceAttr_.micFormat; + algoAttr_ = {deviceAttr_.micFormat, deviceAttr_.micChannels, byteLenPerFrame}; + + algoCache_.input.resize(algoAttr_.byteLenPerFrame * algoAttr_.batchLen); + algoCache_.output.resize(algoAttr_.byteLenPerFrame * deviceAttr_.micChannels); + AUDIO_INFO_LOG("micNum: %{public}u byteLenPerFrame: %{public}u inputsize:%{public}zu outputsize:%{public}zu", + algoSupportedConfig_.micNum, byteLenPerFrame, algoCache_.input.size(), algoCache_.output.size()); + if (count(NEED_EC_SCENE.begin(), NEED_EC_SCENE.end(), sceneType_)) { needEcFlag_ = true; } @@ -199,9 +203,9 @@ int32_t AudioEnhanceChain::UpdateAlgoConfig() algoCache_.input.resize(algoAttr_.byteLenPerFrame * algoAttr_.batchLen); algoCache_.output.resize(algoAttr_.byteLenPerFrame * algoSupportedConfig_.outNum); AUDIO_INFO_LOG("micNum: %{public}u ecNum: %{public}u micRefNum: %{public}u outNum: %{public}u \ - byteLenPerFrame: %{public}u", + byteLenPerFrame: %{public}u inputsize:%{public}zu outputsize:%{public}zu", algoSupportedConfig_.micNum, algoSupportedConfig_.ecNum, algoSupportedConfig_.micRefNum, - algoSupportedConfig_.outNum, byteLenPerFrame); + algoSupportedConfig_.outNum, byteLenPerFrame, algoCache_.input.size(), algoCache_.output.size()); return SUCCESS; } @@ -242,6 +246,8 @@ uint32_t AudioEnhanceChain::GetAlgoBufferSizeMicRef() int32_t AudioEnhanceChain::DeinterleaverData(uint8_t *src, uint32_t channel, uint8_t *dst, uint32_t offset) { + CHECK_AND_RETURN_RET_LOG(src != nullptr, ERROR, "src is nullptr"); + CHECK_AND_RETURN_RET_LOG(dst != nullptr, ERROR, "dst is nullptr"); int32_t ret = 0; uint32_t idx = 0; for (uint32_t i = 0; i < algoAttr_.byteLenPerFrame / algoAttr_.bitDepth; ++i) { @@ -261,19 +267,26 @@ int32_t AudioEnhanceChain::GetOneFrameInputData(std::unique_ptr & CHECK_AND_RETURN_RET_LOG(enhanceBuffer != nullptr, ERROR, "enhance buffer is null"); uint32_t offset = 0; - int32_t ret = DeinterleaverData(enhanceBuffer->ecBuffer.data(), deviceAttr_.ecChannels, &algoCache_.input[offset], - offset); - CHECK_AND_RETURN_RET_LOG(ret == 0, ERROR, "memcpy error in ec channel memcpy"); + int32_t ret = 0; + if (enhanceBuffer->ecBuffer.size() != 0) { + ret = DeinterleaverData(enhanceBuffer->ecBuffer.data(), deviceAttr_.ecChannels, + &algoCache_.input[offset], offset); + CHECK_AND_RETURN_RET_LOG(ret == 0, ERROR, "memcpy error in ec channel memcpy"); + } offset += algoAttr_.byteLenPerFrame * deviceAttr_.ecChannels; - ret = DeinterleaverData(enhanceBuffer->micBufferIn.data(), deviceAttr_.micChannels, &algoCache_.input[offset], - offset); - CHECK_AND_RETURN_RET_LOG(ret == 0, ERROR, "memcpy error in mic channel memcpy"); + if (enhanceBuffer->micBufferIn.size() != 0) { + ret = DeinterleaverData(enhanceBuffer->micBufferIn.data(), deviceAttr_.micChannels, + &algoCache_.input[offset], offset); + CHECK_AND_RETURN_RET_LOG(ret == 0, ERROR, "memcpy error in mic channel memcpy"); + } offset += algoAttr_.byteLenPerFrame * deviceAttr_.micChannels; - ret = DeinterleaverData(enhanceBuffer->micRefBuffer.data(), deviceAttr_.micRefChannels, &algoCache_.input[offset], - offset); - CHECK_AND_RETURN_RET_LOG(ret == 0, ERROR, "memcpy error in mic ref channel memcpy"); + if (enhanceBuffer->micRefBuffer.size() != 0) { + ret = DeinterleaverData(enhanceBuffer->micRefBuffer.data(), deviceAttr_.micRefChannels, + &algoCache_.input[offset], offset); + CHECK_AND_RETURN_RET_LOG(ret == 0, ERROR, "memcpy error in mic ref channel memcpy"); + } return SUCCESS; } diff --git a/frameworks/native/audioeffect/src/audio_enhance_chain_adapter.cpp b/frameworks/native/audioeffect/src/audio_enhance_chain_adapter.cpp index 46507efbce..2badfe04fc 100644 --- a/frameworks/native/audioeffect/src/audio_enhance_chain_adapter.cpp +++ b/frameworks/native/audioeffect/src/audio_enhance_chain_adapter.cpp @@ -41,18 +41,22 @@ int32_t EnhanceChainManagerCreateCb(const uint32_t sceneKeyCode, struct DeviceAt AudioEnhanceChainManager *audioEnhanceChainMananger = AudioEnhanceChainManager::GetInstance(); CHECK_AND_RETURN_RET_LOG(audioEnhanceChainMananger != nullptr, ERR_INVALID_HANDLE, "null audioEnhanceChainManager"); - AudioEnhanceDeviceAttr deviceAttr; + AudioEnhanceDeviceAttr deviceAttr = {}; deviceAttr.micRate = adapter.micRate; deviceAttr.micChannels = adapter.micChannels; deviceAttr.micFormat = adapter.micFormat; - deviceAttr.needEc = adapter.needEc; - deviceAttr.ecRate = adapter.ecRate; - deviceAttr.ecChannels = adapter.ecChannels; - deviceAttr.ecFormat = adapter.ecFormat; - deviceAttr.needMicRef = adapter.needMicRef; - deviceAttr.micRefRate = adapter.micRefRate; - deviceAttr.micRefChannels = adapter.micRefChannels; - deviceAttr.micRefFormat = adapter.micRefFormat; + if (adapter.needEc) { + deviceAttr.needEc = adapter.needEc; + deviceAttr.ecRate = adapter.ecRate; + deviceAttr.ecChannels = adapter.ecChannels; + deviceAttr.ecFormat = adapter.ecFormat; + } + if (adapter.needMicRef) { + deviceAttr.needMicRef = adapter.needMicRef; + deviceAttr.micRefRate = adapter.micRefRate; + deviceAttr.micRefChannels = adapter.micRefChannels; + deviceAttr.micRefFormat = adapter.micRefFormat; + } return audioEnhanceChainMananger->CreateAudioEnhanceChainDynamic(sceneKeyCode, deviceAttr); } diff --git a/frameworks/native/hdiadapter/source/primary/audio_capturer_source.cpp b/frameworks/native/hdiadapter/source/primary/audio_capturer_source.cpp index 6f6f43a335..38f6c6cf71 100644 --- a/frameworks/native/hdiadapter/source/primary/audio_capturer_source.cpp +++ b/frameworks/native/hdiadapter/source/primary/audio_capturer_source.cpp @@ -720,7 +720,6 @@ int32_t AudioCapturerSourceInner::CreateCapture(struct AudioPort &capturePort) currentActiveDevice_ = DEVICE_TYPE_INVALID; return ERR_NOT_STARTED; } - SetAudioRouteInfoForEnhanceChain(currentActiveDevice_); return 0; } @@ -1150,17 +1149,17 @@ int32_t AudioCapturerSourceInner::SetInputRoute(DeviceType inputDevice, AudioPor { if (inputDevice == currentActiveDevice_) { AUDIO_INFO_LOG("SetInputRoute input device not change. currentActiveDevice %{public}d", currentActiveDevice_); + int32_t ret = SetAudioRouteInfoForEnhanceChain(currentActiveDevice_); + if (ret != SUCCESS) { + AUDIO_WARNING_LOG("SetAudioRouteInfoForEnhanceChain failed"); + } return SUCCESS; } - currentActiveDevice_ = inputDevice; - int32_t ret = SetAudioRouteInfoForEnhanceChain(currentActiveDevice_); - if (ret != SUCCESS) { - AUDIO_WARNING_LOG("SetAudioRouteInfoForEnhanceChain failed"); - } + AudioRouteNode source = {}; AudioRouteNode sink = {}; - ret = SetInputPortPin(inputDevice, source); + int32_t ret = SetInputPortPin(inputDevice, source); CHECK_AND_RETURN_RET_LOG(ret == SUCCESS, ret, "SetOutputRoute FAILED: %{public}d", ret); inputPortPin = source.ext.device.type; @@ -1190,6 +1189,12 @@ int32_t AudioCapturerSourceInner::SetInputRoute(DeviceType inputDevice, AudioPor ret = audioAdapter_->UpdateAudioRoute(audioAdapter_, &route, &routeHandle_); CHECK_AND_RETURN_RET_LOG(ret == 0, ERR_OPERATION_FAILED, "UpdateAudioRoute failed"); + + currentActiveDevice_ = inputDevice; + ret = SetAudioRouteInfoForEnhanceChain(currentActiveDevice_); + if (ret != SUCCESS) { + AUDIO_WARNING_LOG("SetAudioRouteInfoForEnhanceChain failed"); + } return SUCCESS; } diff --git a/frameworks/native/pulseaudio/modules/hdi/hdi_sink.c b/frameworks/native/pulseaudio/modules/hdi/hdi_sink.c index f8d97e3027..1b52354238 100644 --- a/frameworks/native/pulseaudio/modules/hdi/hdi_sink.c +++ b/frameworks/native/pulseaudio/modules/hdi/hdi_sink.c @@ -116,7 +116,7 @@ bool g_effectAllStreamVolumeZeroMap[SCENE_TYPE_NUM] = {false}; bool g_effectHaveDisabledMap[SCENE_TYPE_NUM] = {false}; time_t g_effectStartVolZeroTimeMap[SCENE_TYPE_NUM] = {0}; char *const SCENE_TYPE_SET[SCENE_TYPE_NUM] = {"SCENE_DEFAULT", "SCENE_MUSIC", "SCENE_GAME", "SCENE_MOVIE", - "SCENE_SPEECH", "SCENE_RING", "SCENE_VOIP", "SCENE_OTHERS", "EFFECT_NONE"}; + "SCENE_SPEECH", "SCENE_RING", "SCENE_VOIP_DOWN", "SCENE_OTHERS", "EFFECT_NONE"}; const int32_t COMMON_SCENE_TYPE_INDEX = 0; enum HdiInputType { HDI_INPUT_TYPE_PRIMARY, HDI_INPUT_TYPE_OFFLOAD, HDI_INPUT_TYPE_MULTICHANNEL }; diff --git a/interfaces/inner_api/native/audiocommon/include/audio_effect.h b/interfaces/inner_api/native/audiocommon/include/audio_effect.h index c77ffe1860..6292502146 100644 --- a/interfaces/inner_api/native/audiocommon/include/audio_effect.h +++ b/interfaces/inner_api/native/audiocommon/include/audio_effect.h @@ -425,7 +425,7 @@ const std::unordered_map EFFECT_CHAIN_TYPE_MAP { {"SCENE_GAME", 5}, {"SCENE_SPEECH", 6}, {"SCENE_RING", 7}, - {"SCENE_VOIP", 8} + {"SCENE_VOIP_DOWN", 8} } ; struct AudioRendererInfoForSpatialization { -- Gitee From edfd9c6c7140d73e0ae4295647480e5d8b82c934 Mon Sep 17 00:00:00 2001 From: s30056362 Date: Fri, 9 Aug 2024 10:52:54 +0800 Subject: [PATCH 2/7] add set input device Signed-off-by: s30056362 --- .../audioeffect/include/audio_enhance_chain.h | 1 + .../audioeffect/src/audio_enhance_chain.cpp | 24 +++++++++++++++ .../src/audio_enhance_chain_manager.cpp | 29 ++++++++++++++++++- 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/frameworks/native/audioeffect/include/audio_enhance_chain.h b/frameworks/native/audioeffect/include/audio_enhance_chain.h index 51c0f0d689..520c153d66 100644 --- a/frameworks/native/audioeffect/include/audio_enhance_chain.h +++ b/frameworks/native/audioeffect/include/audio_enhance_chain.h @@ -91,6 +91,7 @@ public: int32_t SetEnhanceProperty(const std::string &effect, const std::string &property); int32_t SetEnhanceParamToHandle(AudioEffectHandle handle); bool IsDefaultChain(); + int32_t SetInputDeivce(const std::string &inputDevice); private: void InitAudioEnhanceChain(); diff --git a/frameworks/native/audioeffect/src/audio_enhance_chain.cpp b/frameworks/native/audioeffect/src/audio_enhance_chain.cpp index 23677511dc..5823e1dbbb 100644 --- a/frameworks/native/audioeffect/src/audio_enhance_chain.cpp +++ b/frameworks/native/audioeffect/src/audio_enhance_chain.cpp @@ -121,6 +121,30 @@ void AudioEnhanceChain::ReleaseEnhanceChain() enhanceLibHandles_.clear(); } +int32_t AudioEnhanceChain::SetInputDeivce(const std::string &inputDevice) +{ + std::lock_guard lock(chainMutex_); + + algoParam_.preDevice = inputDevice; + + AudioEffectTransInfo cmdInfo = {}; + AudioEffectTransInfo replyInfo = {}; + + AudioEnhanceParam setParam = {algoParam_.muteInfo, algoParam_.volumeInfo, algoParam_.preDevice.c_str(), + algoParam_.postDevice.c_str(), algoParam_.sceneType.c_str()}; + + cmdInfo.data = static_cast(&setParam); + cmdInfo.size = sizeof(setParam); + + for (AudioEffectHandle handle : standByEnhanceHandles_) { + int32_t ret = (*handle)->command(handle, EFFECT_CMD_SET_PARAM, &cmdInfo, &replyInfo); + CHECK_AND_CONTINUE_LOG(ret == 0, "[%{publc}s] either one of libs process fail", sceneType_.c_str()); + ret = (*handle)->command(handle, EFFECT_CMD_INIT, &cmdInfo, &replyInfo); + CHECK_AND_RETURN_LOG(ret == 0, "[%{public}s], either one of libs EFFECT_CMD_INIT fail", sceneType_.c_str()); + } + return SUCCESS; +} + int32_t AudioEnhanceChain::SetEnhanceParamToHandle(AudioEffectHandle handle) { AudioEffectTransInfo cmdInfo = {}; diff --git a/frameworks/native/audioeffect/src/audio_enhance_chain_manager.cpp b/frameworks/native/audioeffect/src/audio_enhance_chain_manager.cpp index a7ecf58cb9..cae0780719 100644 --- a/frameworks/native/audioeffect/src/audio_enhance_chain_manager.cpp +++ b/frameworks/native/audioeffect/src/audio_enhance_chain_manager.cpp @@ -569,7 +569,34 @@ int32_t AudioEnhanceChainManager::ApplyAudioEnhanceChain(const uint32_t sceneKey int32_t AudioEnhanceChainManager::SetInputDevice(const uint32_t &captureId, const DeviceType &inputDevice) { std::lock_guard lock(chainManagerMutex_); - captureIdToDeviceMap_.insert_or_assign(captureId, inputDevice); + auto item = captureIdToDeviceMap_.find(captureId); + if (item == captureIdToDeviceMap_.end()) { + captureIdToDeviceMap_[captureId] = inputDevice; + AUDIO_INFO_LOG("set new inputdevice, captureId: %{public}d, inputDevice: %{public}d", captureId, inputDevice); + return; + } + if (item->second == inputDevice) { + AUDIO_INFO_LOG("set same device, captureId: %{public}d, inputDevice: %{public}d", captureId, inputDevice); + return; + } + // item->second != inputDevice + std::string inputDeviceStr = ""; + auto deviceItem = SUPPORTED_DEVICE_TYPE.find(inputDevice); + if (deviceItem != SUPPORTED_DEVICE_TYPE.end()) { + inputDeviceStr = deviceItem->second; + } else { + return ERROR; + } + for (auto &[sceneKeyCode, chain] : sceneTypeToEnhanceChainMap_) { + uint32_t tempId = (sceneKeyCode & CAPTURER_ID_MASK) >> 8; + if (tempId == captureId) { + if (chain->SetInputDeivce(inputDeviceStr) != SUCCESS) { + AUDIO_ERR_LOG("chain:%{public}u set input device failed", tempId); + continue; + } + AUDIO_INFO_LOG("chain:%{public}u set input device success", tempId); + } + } AUDIO_INFO_LOG("success, captureId: %{public}d, inputDevice: %{public}d", captureId, inputDevice); return SUCCESS; } -- Gitee From 4dc53837781905e902bf0e1c0221425ae37915e2 Mon Sep 17 00:00:00 2001 From: s30056362 Date: Fri, 9 Aug 2024 11:05:51 +0800 Subject: [PATCH 3/7] bugfix Signed-off-by: s30056362 --- .../audioeffect/include/audio_enhance_chain.h | 2 +- .../audioeffect/src/audio_enhance_chain.cpp | 26 ++++++++----------- .../src/audio_enhance_chain_manager.cpp | 8 +++--- 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/frameworks/native/audioeffect/include/audio_enhance_chain.h b/frameworks/native/audioeffect/include/audio_enhance_chain.h index 520c153d66..76fe86423f 100644 --- a/frameworks/native/audioeffect/include/audio_enhance_chain.h +++ b/frameworks/native/audioeffect/include/audio_enhance_chain.h @@ -91,7 +91,7 @@ public: int32_t SetEnhanceProperty(const std::string &effect, const std::string &property); int32_t SetEnhanceParamToHandle(AudioEffectHandle handle); bool IsDefaultChain(); - int32_t SetInputDeivce(const std::string &inputDevice); + int32_t SetInputDevice(const std::string &inputDevice); private: void InitAudioEnhanceChain(); diff --git a/frameworks/native/audioeffect/src/audio_enhance_chain.cpp b/frameworks/native/audioeffect/src/audio_enhance_chain.cpp index 5823e1dbbb..7f08cea310 100644 --- a/frameworks/native/audioeffect/src/audio_enhance_chain.cpp +++ b/frameworks/native/audioeffect/src/audio_enhance_chain.cpp @@ -121,26 +121,22 @@ void AudioEnhanceChain::ReleaseEnhanceChain() enhanceLibHandles_.clear(); } -int32_t AudioEnhanceChain::SetInputDeivce(const std::string &inputDevice) +int32_t AudioEnhanceChain::SetInputDevice(const std::string &inputDevice) { + if (inputDevice.size() == 0) { + return SUCCESS; + } std::lock_guard lock(chainMutex_); - algoParam_.preDevice = inputDevice; - + int32_t size = standByEnhanceHandles_.size(); AudioEffectTransInfo cmdInfo = {}; AudioEffectTransInfo replyInfo = {}; - - AudioEnhanceParam setParam = {algoParam_.muteInfo, algoParam_.volumeInfo, algoParam_.preDevice.c_str(), - algoParam_.postDevice.c_str(), algoParam_.sceneType.c_str()}; - - cmdInfo.data = static_cast(&setParam); - cmdInfo.size = sizeof(setParam); - - for (AudioEffectHandle handle : standByEnhanceHandles_) { - int32_t ret = (*handle)->command(handle, EFFECT_CMD_SET_PARAM, &cmdInfo, &replyInfo); - CHECK_AND_CONTINUE_LOG(ret == 0, "[%{publc}s] either one of libs process fail", sceneType_.c_str()); - ret = (*handle)->command(handle, EFFECT_CMD_INIT, &cmdInfo, &replyInfo); - CHECK_AND_RETURN_LOG(ret == 0, "[%{public}s], either one of libs EFFECT_CMD_INIT fail", sceneType_.c_str()); + for (int32_t index = 0; index < size; index++) { + auto &handle = standByEnhanceHandles_[index]; + CHECK_AND_RETURN_RET_LOG(SetEnhanceParamToHandle(handle) == SUCCESS, ERROR, + "[%{public}s] effect EFFECT_CMD_SET_PARAM fail", sceneType_.c_str()); + CHECK_AND_RETURN_LOG((*handle)->command(handle, EFFECT_CMD_INIT, &cmdInfo, &replyInfo) == 0, + "[%{public}s] effect EFFECT_CMD_INIT fail", sceneType_.c_str()); } return SUCCESS; } diff --git a/frameworks/native/audioeffect/src/audio_enhance_chain_manager.cpp b/frameworks/native/audioeffect/src/audio_enhance_chain_manager.cpp index cae0780719..16e769d8c6 100644 --- a/frameworks/native/audioeffect/src/audio_enhance_chain_manager.cpp +++ b/frameworks/native/audioeffect/src/audio_enhance_chain_manager.cpp @@ -573,13 +573,14 @@ int32_t AudioEnhanceChainManager::SetInputDevice(const uint32_t &captureId, cons if (item == captureIdToDeviceMap_.end()) { captureIdToDeviceMap_[captureId] = inputDevice; AUDIO_INFO_LOG("set new inputdevice, captureId: %{public}d, inputDevice: %{public}d", captureId, inputDevice); - return; + return SUCCESS; } if (item->second == inputDevice) { AUDIO_INFO_LOG("set same device, captureId: %{public}d, inputDevice: %{public}d", captureId, inputDevice); - return; + return SUCCESS; } // item->second != inputDevice + captureIdToDeviceMap_[captureId] = inputDevice; std::string inputDeviceStr = ""; auto deviceItem = SUPPORTED_DEVICE_TYPE.find(inputDevice); if (deviceItem != SUPPORTED_DEVICE_TYPE.end()) { @@ -590,11 +591,10 @@ int32_t AudioEnhanceChainManager::SetInputDevice(const uint32_t &captureId, cons for (auto &[sceneKeyCode, chain] : sceneTypeToEnhanceChainMap_) { uint32_t tempId = (sceneKeyCode & CAPTURER_ID_MASK) >> 8; if (tempId == captureId) { - if (chain->SetInputDeivce(inputDeviceStr) != SUCCESS) { + if (chain->SetInputDevice(inputDeviceStr) != SUCCESS) { AUDIO_ERR_LOG("chain:%{public}u set input device failed", tempId); continue; } - AUDIO_INFO_LOG("chain:%{public}u set input device success", tempId); } } AUDIO_INFO_LOG("success, captureId: %{public}d, inputDevice: %{public}d", captureId, inputDevice); -- Gitee From 253e17d8ac4b52da157a265d7b7f0c14e42c5081 Mon Sep 17 00:00:00 2001 From: s30056362 Date: Fri, 9 Aug 2024 11:11:28 +0800 Subject: [PATCH 4/7] bugfix Signed-off-by: s30056362 --- frameworks/native/audioeffect/src/audio_enhance_chain.cpp | 5 +++-- .../native/audioeffect/src/audio_enhance_chain_manager.cpp | 3 +-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/frameworks/native/audioeffect/src/audio_enhance_chain.cpp b/frameworks/native/audioeffect/src/audio_enhance_chain.cpp index 7f08cea310..2bf3eda94b 100644 --- a/frameworks/native/audioeffect/src/audio_enhance_chain.cpp +++ b/frameworks/native/audioeffect/src/audio_enhance_chain.cpp @@ -126,8 +126,9 @@ int32_t AudioEnhanceChain::SetInputDevice(const std::string &inputDevice) if (inputDevice.size() == 0) { return SUCCESS; } - std::lock_guard lock(chainMutex_); algoParam_.preDevice = inputDevice; + AUDIO_INFO_LOG("update input device %{public}s", inputDevice.c_str()); + std::lock_guard lock(chainMutex_); int32_t size = standByEnhanceHandles_.size(); AudioEffectTransInfo cmdInfo = {}; AudioEffectTransInfo replyInfo = {}; @@ -135,7 +136,7 @@ int32_t AudioEnhanceChain::SetInputDevice(const std::string &inputDevice) auto &handle = standByEnhanceHandles_[index]; CHECK_AND_RETURN_RET_LOG(SetEnhanceParamToHandle(handle) == SUCCESS, ERROR, "[%{public}s] effect EFFECT_CMD_SET_PARAM fail", sceneType_.c_str()); - CHECK_AND_RETURN_LOG((*handle)->command(handle, EFFECT_CMD_INIT, &cmdInfo, &replyInfo) == 0, + CHECK_AND_RETURN_RET_LOG((*handle)->command(handle, EFFECT_CMD_INIT, &cmdInfo, &replyInfo) == 0, ERROR, "[%{public}s] effect EFFECT_CMD_INIT fail", sceneType_.c_str()); } return SUCCESS; diff --git a/frameworks/native/audioeffect/src/audio_enhance_chain_manager.cpp b/frameworks/native/audioeffect/src/audio_enhance_chain_manager.cpp index 16e769d8c6..a9195ecbc5 100644 --- a/frameworks/native/audioeffect/src/audio_enhance_chain_manager.cpp +++ b/frameworks/native/audioeffect/src/audio_enhance_chain_manager.cpp @@ -590,10 +590,9 @@ int32_t AudioEnhanceChainManager::SetInputDevice(const uint32_t &captureId, cons } for (auto &[sceneKeyCode, chain] : sceneTypeToEnhanceChainMap_) { uint32_t tempId = (sceneKeyCode & CAPTURER_ID_MASK) >> 8; - if (tempId == captureId) { + if ((tempId == captureId) && chain) { if (chain->SetInputDevice(inputDeviceStr) != SUCCESS) { AUDIO_ERR_LOG("chain:%{public}u set input device failed", tempId); - continue; } } } -- Gitee From a28e7ff905695f49e9e92322dd3fbb20de19802b Mon Sep 17 00:00:00 2001 From: s30056362 Date: Fri, 9 Aug 2024 11:15:46 +0800 Subject: [PATCH 5/7] bugfix Signed-off-by: s30056362 --- frameworks/native/audioeffect/src/audio_enhance_chain.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frameworks/native/audioeffect/src/audio_enhance_chain.cpp b/frameworks/native/audioeffect/src/audio_enhance_chain.cpp index 2bf3eda94b..2123e61d1e 100644 --- a/frameworks/native/audioeffect/src/audio_enhance_chain.cpp +++ b/frameworks/native/audioeffect/src/audio_enhance_chain.cpp @@ -293,16 +293,16 @@ int32_t AudioEnhanceChain::GetOneFrameInputData(std::unique_ptr & ret = DeinterleaverData(enhanceBuffer->ecBuffer.data(), deviceAttr_.ecChannels, &algoCache_.input[offset], offset); CHECK_AND_RETURN_RET_LOG(ret == 0, ERROR, "memcpy error in ec channel memcpy"); + offset += algoAttr_.byteLenPerFrame * deviceAttr_.ecChannels; } - offset += algoAttr_.byteLenPerFrame * deviceAttr_.ecChannels; if (enhanceBuffer->micBufferIn.size() != 0) { ret = DeinterleaverData(enhanceBuffer->micBufferIn.data(), deviceAttr_.micChannels, &algoCache_.input[offset], offset); CHECK_AND_RETURN_RET_LOG(ret == 0, ERROR, "memcpy error in mic channel memcpy"); + offset += algoAttr_.byteLenPerFrame * deviceAttr_.micChannels; } - offset += algoAttr_.byteLenPerFrame * deviceAttr_.micChannels; if (enhanceBuffer->micRefBuffer.size() != 0) { ret = DeinterleaverData(enhanceBuffer->micRefBuffer.data(), deviceAttr_.micRefChannels, &algoCache_.input[offset], offset); -- Gitee From aa3c8cee5984cacfc197b50e6dd17d90ab393512 Mon Sep 17 00:00:00 2001 From: s30056362 Date: Fri, 9 Aug 2024 11:24:38 +0800 Subject: [PATCH 6/7] bugfix Signed-off-by: s30056362 --- .../native/pulseaudio/modules/hdi/hdi_source.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/frameworks/native/pulseaudio/modules/hdi/hdi_source.c b/frameworks/native/pulseaudio/modules/hdi/hdi_source.c index 44d30c38be..a1446ee497 100644 --- a/frameworks/native/pulseaudio/modules/hdi/hdi_source.c +++ b/frameworks/native/pulseaudio/modules/hdi/hdi_source.c @@ -606,11 +606,12 @@ static void PostDataDefault(pa_source *source, pa_memchunk *chunk, struct Userda } } -static int32_t EcAndMicRefResampleAndCopy(const char *sceneKey, struct Userdata *u) +static int32_t EcResample(const char *sceneKey, struct Userdata *u) { pa_resampler *ecResampler = (pa_resampler *)pa_hashmap_get(u->sceneToEcResamplerMap, sceneKey); - pa_resampler *micRefResampler = (pa_resampler *)pa_hashmap_get(u->sceneToMicRefResamplerMap, sceneKey); - + if (ecResampler == NULL) { + return SUCCESS; + } CHECK_AND_RETURN_RET_LOG(u->bufferEc != NULL, ERROR, "bufferEc is null"); CHECK_AND_RETURN_RET_LOG(u->requestBytesEc != 0, ERROR, "requestBytesEc is 0"); if (ecResampler != NULL) { @@ -627,7 +628,14 @@ static int32_t EcAndMicRefResampleAndCopy(const char *sceneKey, struct Userdata } else { CopyEcdataToEnhanceBufferAdapter(u->bufferEc, u->requestBytesEc); } +} +static int32_t MicRefResample(const char *sceneKey, struct Userdata *u) +{ + pa_resampler *micRefResampler = (pa_resampler *)pa_hashmap_get(u->sceneToMicRefResamplerMap, sceneKey); + if (micRefResampler == NULL) { + return SUCCESS; + } CHECK_AND_RETURN_RET_LOG(u->bufferMicRef != NULL, ERROR, "bufferMicRef is null"); CHECK_AND_RETURN_RET_LOG(u->requestBytesMicRef != 0, ERROR, "requestBytesMicRef is 0"); if (micRefResampler != NULL) { @@ -680,7 +688,8 @@ static int32_t GetCapturerFrameFromHdiAndProcess(pa_memchunk *chunk, struct User enhanceChunk.memblock = pa_memblock_new(u->core->mempool, enhanceChunk.length); pa_memchunk_memcpy(&enhanceChunk, chunk); SampleAlignment((char *)sceneKey, &enhanceChunk, &rChunk, u); - EcAndMicRefResampleAndCopy((char *)sceneKey, u); + EcResample((char *)sceneKey, u); + MicRefResample((char *)sceneKey, u); EnhanceProcessAndPost(u, sceneKeyCode, &rChunk); pa_memblock_unref(enhanceChunk.memblock); if (rChunk.memblock) { -- Gitee From d3d09b7fe787423cf05d168ec1f981394db521fd Mon Sep 17 00:00:00 2001 From: s30056362 Date: Fri, 9 Aug 2024 11:41:15 +0800 Subject: [PATCH 7/7] bugfix Signed-off-by: s30056362 --- frameworks/native/pulseaudio/modules/hdi/hdi_source.c | 1 + 1 file changed, 1 insertion(+) diff --git a/frameworks/native/pulseaudio/modules/hdi/hdi_source.c b/frameworks/native/pulseaudio/modules/hdi/hdi_source.c index a1446ee497..0d9c121efa 100644 --- a/frameworks/native/pulseaudio/modules/hdi/hdi_source.c +++ b/frameworks/native/pulseaudio/modules/hdi/hdi_source.c @@ -628,6 +628,7 @@ static int32_t EcResample(const char *sceneKey, struct Userdata *u) } else { CopyEcdataToEnhanceBufferAdapter(u->bufferEc, u->requestBytesEc); } + return SUCCESS; } static int32_t MicRefResample(const char *sceneKey, struct Userdata *u) -- Gitee