From 2b6f5bf25126490304fa836beb90ec14572570d5 Mon Sep 17 00:00:00 2001 From: s30056362 Date: Thu, 31 Oct 2024 18:50:22 +0800 Subject: [PATCH 1/4] add MoveStartCb Signed-off-by: s30056362 --- .../audioeffect/src/audio_enhance_chain.cpp | 7 ++-- .../src/audio_enhance_chain_manager.cpp | 14 ++++--- .../pulseaudio/modules/hdi/hdi_source.c | 1 - .../modules/hdi/module_hdi_source.c | 41 +++++++++++++++---- 4 files changed, 44 insertions(+), 19 deletions(-) diff --git a/frameworks/native/audioeffect/src/audio_enhance_chain.cpp b/frameworks/native/audioeffect/src/audio_enhance_chain.cpp index 5fb3cb1d44..272c18c768 100644 --- a/frameworks/native/audioeffect/src/audio_enhance_chain.cpp +++ b/frameworks/native/audioeffect/src/audio_enhance_chain.cpp @@ -32,7 +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_FORMAT = 2; const uint32_t DEFAULT_ECNUM = 0; const uint32_t DEFAULT_MICREFNUM = 0; @@ -56,11 +55,11 @@ void AudioEnhanceChain::InitAudioEnhanceChain() enhanceLibHandles_.clear(); standByEnhanceHandles_.clear(); - algoSupportedConfig_ = {DEFAULT_FRAMELENGTH, DEFAULT_SAMPLE_RATE, DEFAULT_FORMAT * BITLENGTH, + algoSupportedConfig_ = {DEFAULT_FRAMELENGTH, DEFAULT_SAMPLE_RATE, deviceAttr_.micFormat * BITLENGTH, deviceAttr_.micChannels, DEFAULT_ECNUM, DEFAULT_MICREFNUM, deviceAttr_.micChannels}; - uint32_t byteLenPerFrame = DEFAULT_FRAMELENGTH * (DEFAULT_SAMPLE_RATE / MILLISECOND) * DEFAULT_FORMAT; - algoAttr_ = {DEFAULT_FORMAT, deviceAttr_.micChannels, byteLenPerFrame}; + uint32_t byteLenPerFrame = DEFAULT_FRAMELENGTH * (DEFAULT_SAMPLE_RATE / MILLISECOND) * deviceAttr_.micFormat; + algoAttr_ = {deviceAttr_.micFormat, deviceAttr_.micChannels, byteLenPerFrame}; if (count(NEED_EC_SCENE.begin(), NEED_EC_SCENE.end(), sceneType_)) { needEcFlag_ = true; diff --git a/frameworks/native/audioeffect/src/audio_enhance_chain_manager.cpp b/frameworks/native/audioeffect/src/audio_enhance_chain_manager.cpp index cbff6b5a80..64f9fb2935 100644 --- a/frameworks/native/audioeffect/src/audio_enhance_chain_manager.cpp +++ b/frameworks/native/audioeffect/src/audio_enhance_chain_manager.cpp @@ -287,8 +287,9 @@ int32_t AudioEnhanceChainManager::CreateAudioEnhanceChainDynamic(const uint32_t std::shared_ptr audioEnhanceChain = nullptr; auto it = sceneTypeToEnhanceChainMap_.find(sceneKeyCode); if (it != sceneTypeToEnhanceChainMap_.end() && it->second != nullptr) { - AUDIO_INFO_LOG("Now enhanceChain num is : %{public}u", chainNum_); sceneTypeToEnhanceChainCountMap_[sceneKeyCode]++; + AUDIO_INFO_LOG("Now enhanceChain num is:%{public}u scenKey[%{public}u] count: %{public}d", chainNum_, + sceneKeyCode, sceneTypeToEnhanceChainCountMap_[sceneKeyCode]); audioEnhanceChain = it->second; if (audioEnhanceChain->IsEmptyEnhanceHandles()) { return ERROR; @@ -300,6 +301,8 @@ int32_t AudioEnhanceChainManager::CreateAudioEnhanceChainDynamic(const uint32_t if (CreateEnhanceChainInner(audioEnhanceChain, sceneKeyCode, deviceAttr, createFlag, defaultFlag)) { return ERROR; } + AUDIO_INFO_LOG("Now enhanceChain num is:%{public}u scenKey[%{public}u] count: %{public}d", chainNum_, + sceneKeyCode, sceneTypeToEnhanceChainCountMap_[sceneKeyCode]); // means map to default chain if (!createFlag) { return audioEnhanceChain->IsDefaultChain(); @@ -404,7 +407,6 @@ int32_t AudioEnhanceChainManager::CreateEnhanceChainInner(std::shared_ptrsecond == nullptr) { - AUDIO_INFO_LOG("Now enhanceChain num is : %{public}u", chainNum_); + AUDIO_INFO_LOG("Now enhanceChain num is:%{public}u cannot find scenKey[%{public}u]", chainNum_, sceneKeyCode); sceneTypeToEnhanceChainCountMap_.erase(sceneKeyCode); sceneTypeToEnhanceChainMap_.erase(sceneKeyCode); return SUCCESS; @@ -462,7 +464,8 @@ int32_t AudioEnhanceChainManager::ReleaseAudioEnhanceChainDynamic(const uint32_t auto chainCountIter = sceneTypeToEnhanceChainCountMap_.find(sceneKeyCode); if (chainCountIter->second > 1) { chainCountIter->second--; - AUDIO_INFO_LOG("Now enhanceChain num is : %{public}u", chainNum_); + AUDIO_INFO_LOG("Now enhanceChain num is:%{public}u scenKey[%{public}u] count: %{public}d", chainNum_, + sceneKeyCode, chainCountIter->second); return SUCCESS; } if (DeleteEnhanceChainInner(chainMapIter->second, sceneKeyCode) != SUCCESS) { @@ -508,7 +511,8 @@ int32_t AudioEnhanceChainManager::DeleteEnhanceChainInner(std::shared_ptrrenderId; uint32_t sceneTypeCode = 0; if (GetSceneTypeCode(sceneType, &sceneTypeCode) != 0) { - AUDIO_ERR_LOG("GetSceneTypeCode failed"); + AUDIO_ERR_LOG("scenetype:%{public}s GetSceneTypeCode failed", sceneType); pa_proplist_sets(so->proplist, "scene.bypass", DEFAULT_SCENE_BYPASS); return PA_HOOK_OK; } @@ -299,7 +299,7 @@ static pa_hook_result_t HandleSourceOutputUnlink(pa_source_output *so, struct Us uint32_t renderId = u->renderId; uint32_t sceneTypeCode = 0; if (GetSceneTypeCode(sceneType, &sceneTypeCode) != 0) { - AUDIO_ERR_LOG("GetSceneTypeCode failed"); + AUDIO_ERR_LOG("scenetype:%{public}s GetSceneTypeCode failed", sceneType); return PA_HOOK_OK; } uint32_t sceneKeyCode = 0; @@ -335,10 +335,12 @@ static pa_hook_result_t CheckIfAvailSource(pa_source_output *so, struct Userdata static pa_hook_result_t SourceOutputPutCb(pa_core *c, pa_source_output *so, struct Userdata *u) { - AUDIO_INFO_LOG("Trigger SourceOutputPutCb"); - CHECK_AND_RETURN_RET_LOG(u != NULL, PA_HOOK_OK, "Get Userdata failed! userdata is NULL"); CHECK_AND_RETURN_RET_LOG(c != NULL, PA_HOOK_OK, "pa core is null"); + CHECK_AND_RETURN_RET_LOG(so != NULL, PA_HOOK_OK, "so is NULL"); + + const char *sessionID = pa_proplist_gets(so->proplist, "stream.sessionID"); + AUDIO_INFO_LOG("Trigger SourceOutputPutCb sessionID:%{public}s", sessionID); if (CheckIfAvailSource(so, u) == PA_HOOK_CANCEL) { return PA_HOOK_OK; @@ -348,11 +350,28 @@ static pa_hook_result_t SourceOutputPutCb(pa_core *c, pa_source_output *so, stru static pa_hook_result_t SourceOutputUnlinkCb(pa_core *c, pa_source_output *so, struct Userdata *u) { - AUDIO_INFO_LOG("Trigger SourceOutputUnlinkCb"); + CHECK_AND_RETURN_RET_LOG(u != NULL, PA_HOOK_OK, "Get Userdata failed! userdata is NULL"); + CHECK_AND_RETURN_RET_LOG(c != NULL, PA_HOOK_OK, "pa core is null"); + CHECK_AND_RETURN_RET_LOG(so != NULL, PA_HOOK_OK, "so is NULL"); + + const char *sessionID = pa_proplist_gets(so->proplist, "stream.sessionID"); + AUDIO_INFO_LOG("Trigger SourceOutputUnlinkCb sessionID:%{public}s", sessionID); + + if (CheckIfAvailSource(so, u) == PA_HOOK_CANCEL) { + return PA_HOOK_OK; + } + return HandleSourceOutputUnlink(so, u); +} +static pa_hook_result_t SourceOutputMoveStartCb(pa_core *c, pa_source_output *so, struct Userdata *u) +{ CHECK_AND_RETURN_RET_LOG(u != NULL, PA_HOOK_OK, "Get Userdata failed! userdata is NULL"); CHECK_AND_RETURN_RET_LOG(c != NULL, PA_HOOK_OK, "pa core is null"); - + CHECK_AND_RETURN_RET_LOG(so != NULL, PA_HOOK_OK, "so is NULL"); + + const char *sessionID = pa_proplist_gets(so->proplist, "stream.sessionID"); + AUDIO_INFO_LOG("Trigger SourceOutputMoveStartCb sessionID:%{public}s", sessionID); + if (CheckIfAvailSource(so, u) == PA_HOOK_CANCEL) { return PA_HOOK_OK; } @@ -360,11 +379,13 @@ static pa_hook_result_t SourceOutputUnlinkCb(pa_core *c, pa_source_output *so, s } static pa_hook_result_t SourceOutputMoveFinishCb(pa_core *c, pa_source_output *so, struct Userdata *u) -{ - AUDIO_INFO_LOG("Trigger SourceOutputMoveFinishCb"); - +{ CHECK_AND_RETURN_RET_LOG(u != NULL, PA_HOOK_OK, "Get Userdata failed! userdata is NULL"); CHECK_AND_RETURN_RET_LOG(c != NULL, PA_HOOK_OK, "pa core is null"); + CHECK_AND_RETURN_RET_LOG(so != NULL, PA_HOOK_OK, "so is NULL"); + + const char *sessionID = pa_proplist_gets(so->proplist, "stream.sessionID"); + AUDIO_INFO_LOG("Trigger SourceOutputMoveFinishCb sessionID:%{public}s", sessionID); if (CheckIfAvailSource(so, u) == PA_HOOK_CANCEL) { return PA_HOOK_OK; @@ -394,6 +415,8 @@ int pa__init(pa_module *m) (pa_hook_cb_t)SourceOutputUnlinkCb, source->userdata); pa_module_hook_connect(m, &m->core->hooks[PA_CORE_HOOK_SOURCE_OUTPUT_MOVE_FINISH], PA_HOOK_LATE, (pa_hook_cb_t)SourceOutputMoveFinishCb, source->userdata); + pa_module_hook_connect(m, &m->core->hooks[PA_CORE_HOOK_SOURCE_OUTPUT_MOVE_START], PA_HOOK_LATE, + (pa_hook_cb_t)SourceOutputMoveStartCb, source->userdata); pa_source_put(source); pa_modargs_free(ma); -- Gitee From b2eecbacef54813f7c71473da53cf5d2709f96d5 Mon Sep 17 00:00:00 2001 From: s30056362 Date: Thu, 31 Oct 2024 21:03:36 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0pa=5Fproplist=5Fgets?= =?UTF-8?q?=E5=88=A4=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: s30056362 --- .../pulseaudio/modules/hdi/module_hdi_source.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/frameworks/native/pulseaudio/modules/hdi/module_hdi_source.c b/frameworks/native/pulseaudio/modules/hdi/module_hdi_source.c index 53f2927e78..5a917142da 100644 --- a/frameworks/native/pulseaudio/modules/hdi/module_hdi_source.c +++ b/frameworks/native/pulseaudio/modules/hdi/module_hdi_source.c @@ -250,6 +250,9 @@ static pa_hook_result_t GetAlgoSpecs(uint32_t sceneKeyCode, struct AlgoSpecs *al static pa_hook_result_t HandleSourceOutputPut(pa_source_output *so, struct Userdata *u) { const char *sceneType = pa_proplist_gets(so->proplist, "scene.type"); + if (sceneType == NULL) { + sceneType = ""; + } const char *sceneBypass = pa_proplist_gets(so->proplist, "scene.bypass"); if (pa_safe_streq(sceneBypass, DEFAULT_SCENE_BYPASS)) { AUDIO_INFO_LOG("scene:%{public}s has been set to bypass", sceneType); @@ -295,6 +298,9 @@ static pa_hook_result_t HandleSourceOutputPut(pa_source_output *so, struct Userd static pa_hook_result_t HandleSourceOutputUnlink(pa_source_output *so, struct Userdata *u) { const char *sceneType = pa_proplist_gets(so->proplist, "scene.type"); + if (sceneType == NULL) { + sceneType = ""; + } uint32_t captureId = u->captureId; uint32_t renderId = u->renderId; uint32_t sceneTypeCode = 0; @@ -340,6 +346,9 @@ static pa_hook_result_t SourceOutputPutCb(pa_core *c, pa_source_output *so, stru CHECK_AND_RETURN_RET_LOG(so != NULL, PA_HOOK_OK, "so is NULL"); const char *sessionID = pa_proplist_gets(so->proplist, "stream.sessionID"); + if (sessionID == NULL) { + sessionID = ""; + } AUDIO_INFO_LOG("Trigger SourceOutputPutCb sessionID:%{public}s", sessionID); if (CheckIfAvailSource(so, u) == PA_HOOK_CANCEL) { @@ -355,6 +364,9 @@ static pa_hook_result_t SourceOutputUnlinkCb(pa_core *c, pa_source_output *so, s CHECK_AND_RETURN_RET_LOG(so != NULL, PA_HOOK_OK, "so is NULL"); const char *sessionID = pa_proplist_gets(so->proplist, "stream.sessionID"); + if (sessionID == NULL) { + sessionID = ""; + } AUDIO_INFO_LOG("Trigger SourceOutputUnlinkCb sessionID:%{public}s", sessionID); if (CheckIfAvailSource(so, u) == PA_HOOK_CANCEL) { @@ -370,6 +382,9 @@ static pa_hook_result_t SourceOutputMoveStartCb(pa_core *c, pa_source_output *so CHECK_AND_RETURN_RET_LOG(so != NULL, PA_HOOK_OK, "so is NULL"); const char *sessionID = pa_proplist_gets(so->proplist, "stream.sessionID"); + if (sessionID == NULL) { + sessionID = ""; + } AUDIO_INFO_LOG("Trigger SourceOutputMoveStartCb sessionID:%{public}s", sessionID); if (CheckIfAvailSource(so, u) == PA_HOOK_CANCEL) { @@ -385,6 +400,9 @@ static pa_hook_result_t SourceOutputMoveFinishCb(pa_core *c, pa_source_output *s CHECK_AND_RETURN_RET_LOG(so != NULL, PA_HOOK_OK, "so is NULL"); const char *sessionID = pa_proplist_gets(so->proplist, "stream.sessionID"); + if (sessionID == NULL) { + sessionID = ""; + } AUDIO_INFO_LOG("Trigger SourceOutputMoveFinishCb sessionID:%{public}s", sessionID); if (CheckIfAvailSource(so, u) == PA_HOOK_CANCEL) { -- Gitee From 9b3fd76c98169566fcebcb5c4ef4fc32e1252787 Mon Sep 17 00:00:00 2001 From: s30056362 Date: Thu, 31 Oct 2024 21:17:13 +0800 Subject: [PATCH 3/4] fix code check Signed-off-by: s30056362 --- frameworks/native/pulseaudio/modules/hdi/module_hdi_source.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/native/pulseaudio/modules/hdi/module_hdi_source.c b/frameworks/native/pulseaudio/modules/hdi/module_hdi_source.c index 5a917142da..3952ea14d6 100644 --- a/frameworks/native/pulseaudio/modules/hdi/module_hdi_source.c +++ b/frameworks/native/pulseaudio/modules/hdi/module_hdi_source.c @@ -394,7 +394,7 @@ static pa_hook_result_t SourceOutputMoveStartCb(pa_core *c, pa_source_output *so } static pa_hook_result_t SourceOutputMoveFinishCb(pa_core *c, pa_source_output *so, struct Userdata *u) -{ +{ CHECK_AND_RETURN_RET_LOG(u != NULL, PA_HOOK_OK, "Get Userdata failed! userdata is NULL"); CHECK_AND_RETURN_RET_LOG(c != NULL, PA_HOOK_OK, "pa core is null"); CHECK_AND_RETURN_RET_LOG(so != NULL, PA_HOOK_OK, "so is NULL"); -- Gitee From 9f332c8484efdf40fe7f36cac527b660c713e9bd Mon Sep 17 00:00:00 2001 From: s30056362 Date: Thu, 31 Oct 2024 22:08:52 +0800 Subject: [PATCH 4/4] add spec log Signed-off-by: s30056362 --- .../pulseaudio/modules/hdi/module_hdi_source.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/frameworks/native/pulseaudio/modules/hdi/module_hdi_source.c b/frameworks/native/pulseaudio/modules/hdi/module_hdi_source.c index 3952ea14d6..b8c8bbd7a3 100644 --- a/frameworks/native/pulseaudio/modules/hdi/module_hdi_source.c +++ b/frameworks/native/pulseaudio/modules/hdi/module_hdi_source.c @@ -126,8 +126,10 @@ static void SetResampler(pa_source_output *so, const char *sceneKey, const struc pa_hashmap *ecResamplerMap = (pa_hashmap *)u->sceneToEcResamplerMap; pa_hashmap *micRefResamplerMap = (pa_hashmap *)u->sceneToMicRefResamplerMap; if (!pa_sample_spec_equal(&so->source->sample_spec, &algoSpecs->micSpec)) { - AUDIO_INFO_LOG("SOURCE rate = %{public}d ALGO rate = %{public}d ", - so->source->sample_spec.rate, algoSpecs->micSpec.rate); + AUDIO_INFO_LOG("SOURCE spec:%{public}u_%{public}u_%{public}u ALGO spec:%{public}u_%{public}u_%{public}u", + so->source->sample_spec.rate, (uint32_t)so->source->sample_spec.channels, + (uint32_t)so->source->sample_spec.format, + algoSpecs->micSpec.rate, (uint32_t)algoSpecs->micSpec.channels, (uint32_t)algoSpecs->micSpec.format); pa_resampler *preResampler = pa_resampler_new(so->source->core->mempool, &so->source->sample_spec, &so->source->channel_map, &algoSpecs->micSpec, &so->source->channel_map, @@ -139,8 +141,9 @@ static void SetResampler(pa_source_output *so, const char *sceneKey, const struc } if ((u->ecType != EC_NONE) && (algoSpecs->ecSpec.rate != 0) && (!pa_sample_spec_equal(&u->ecSpec, &algoSpecs->ecSpec))) { - AUDIO_INFO_LOG("EC: SOURCE rate = %{public}d ALGO rate = %{public}d ", - u->ecSpec.rate, algoSpecs->ecSpec.rate); + AUDIO_INFO_LOG("EC SOURCE spec:%{public}u_%{public}u_%{public}u ALGO spec:%{public}u_%{public}u_%{public}u", + u->ecSpec.rate, (uint32_t)u->ecSpec.channels, (uint32_t)u->ecSpec.format, + algoSpecs->ecSpec.rate, (uint32_t)algoSpecs->ecSpec.channels, (uint32_t)algoSpecs->ecSpec.format); pa_resampler *ecResampler = pa_resampler_new(so->source->core->mempool, &u->ecSpec, &so->source->channel_map, &algoSpecs->ecSpec, &so->source->channel_map, @@ -151,8 +154,10 @@ static void SetResampler(pa_source_output *so, const char *sceneKey, const struc } if ((u->micRef == REF_ON) && (algoSpecs->micRefSpec.rate != 0) && (!pa_sample_spec_equal(&u->micRefSpec, &algoSpecs->micRefSpec))) { - AUDIO_INFO_LOG("MIC REF: SOURCE rate = %{public}d ALGO rate = %{public}d ", - u->micRefSpec.rate, algoSpecs->ecSpec.rate); + AUDIO_INFO_LOG("MIC REF SOURCE spec:%{public}u_%{public}u_%{public}u ALGO:%{public}u_%{public}u_%{public}u", + u->micRefSpec.rate, (uint32_t)u->micRefSpec.channels, (uint32_t)u->micRefSpec.format, + algoSpecs->micRefSpec.rate, (uint32_t)algoSpecs->micRefSpec.channels, + (uint32_t)algoSpecs->micRefSpec.format); pa_resampler *micRefResampler = pa_resampler_new(so->source->core->mempool, &u->micRefSpec, &so->source->channel_map, &algoSpecs->micRefSpec, &so->source->channel_map, -- Gitee