From 42a16d1ff57e1dada4b732fdb242fda61ab08737 Mon Sep 17 00:00:00 2001 From: Maninblack Date: Mon, 12 May 2025 11:38:56 +0000 Subject: [PATCH 1/4] fix processtype error Signed-off-by: Maninblack --- .../manager/src/hpae_renderer_manager.cpp | 2 +- .../node/include/hpae_node_common.h | 1 + .../node/src/hpae_node_common.cpp | 19 +++++++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/services/audio_engine/manager/src/hpae_renderer_manager.cpp b/services/audio_engine/manager/src/hpae_renderer_manager.cpp index 9dbaaa4e4f..bc2f357694 100644 --- a/services/audio_engine/manager/src/hpae_renderer_manager.cpp +++ b/services/audio_engine/manager/src/hpae_renderer_manager.cpp @@ -62,7 +62,7 @@ int32_t HpaeRendererManager::CreateInputSession(const HpaeStreamInfo &streamInfo if (sinkInfo_.lib == "libmodule-split-stream-sink.z.so") { nodeInfo.sceneType = TransStreamUsageToSplitSceneType(streamInfo.effectInfo.streamUsage, sinkInfo_.splitMode); } else { - nodeInfo.sceneType = TransStreamTypeToSceneType(streamInfo.streamType); + nodeInfo.sceneType = TransEffectSceneToSceneType(streamInfo.effectInfo.effectScene); } if (IsMchDevice()) { nodeInfo.sceneType = HPAE_SCENE_EFFECT_NONE; diff --git a/services/audio_engine/node/include/hpae_node_common.h b/services/audio_engine/node/include/hpae_node_common.h index ed78fe25a0..8d1a032842 100644 --- a/services/audio_engine/node/include/hpae_node_common.h +++ b/services/audio_engine/node/include/hpae_node_common.h @@ -24,6 +24,7 @@ namespace AudioStandard { namespace HPAE { bool CheckHpaeNodeInfoIsSame(HpaeNodeInfo &preNodeInfo, HpaeNodeInfo &curNodeInfo); HpaeProcessorType TransStreamTypeToSceneType(AudioStreamType streamType); +HpaeProcessorType TransEffectSceneToSceneType(AudioEffectScene effectScene); HpaeProcessorType TransSourceTypeToSceneType(SourceType sourceType); bool CheckSceneTypeNeedEc(HpaeProcessorType processorType); bool CheckSceneTypeNeedMicRef(HpaeProcessorType processorType); diff --git a/services/audio_engine/node/src/hpae_node_common.cpp b/services/audio_engine/node/src/hpae_node_common.cpp index 882ae72d13..c64956ad9a 100644 --- a/services/audio_engine/node/src/hpae_node_common.cpp +++ b/services/audio_engine/node/src/hpae_node_common.cpp @@ -39,6 +39,16 @@ static std::map g_streamTypeToSceneTypeMap = {STREAM_MEDIA, HPAE_SCENE_OTHERS} }; +static std::map g_effectSceneToProcessorTypeMap = { + {SCENE_OTHERS, HPAE_SCENE_OTHERS}, + {SCENE_MUSIC, HPAE_SCENE_MUSIC}, + {SCENE_MOVIE, HPAE_SCENE_MOVIE}, + {SCENE_GAME, HPAE_SCENE_GAME}, + {SCENE_SPEECH, HPAE_SCENE_SPEECH}, + {SCENE_RING, HPAE_SCENE_RING}, + {SCENE_VOIP_DOWN, HPAE_SCENE_VOIP_DOWN} +}; + static std::unordered_map g_sourceTypeToSceneTypeMap = { {SOURCE_TYPE_MIC, HPAE_SCENE_RECORD}, {SOURCE_TYPE_CAMCORDER, HPAE_SCENE_RECORD}, @@ -121,6 +131,15 @@ HpaeProcessorType TransStreamTypeToSceneType(AudioStreamType streamType) } } +HpaeProcessorType TransEffectSceneToSceneType(AudioEffectScene effectScene) +{ + if (g_effectSceneToProcessorTypeMap.find(effectScene) == g_effectSceneToProcessorTypeMap.end()) { + return HPAE_SCENE_EFFECT_NONE; + } else { + return g_effectSceneToProcessorTypeMap[effectScene]; + } +} + HpaeProcessorType TransSourceTypeToSceneType(SourceType sourceType) { if (g_sourceTypeToSceneTypeMap.find(sourceType) == g_sourceTypeToSceneTypeMap.end()) { -- Gitee From 1b5d43d08b814f8502137222f6f3c3395dc0882f Mon Sep 17 00:00:00 2001 From: Maninblack Date: Tue, 13 May 2025 02:45:29 +0000 Subject: [PATCH 2/4] fix seek pop Signed-off-by: Maninblack --- services/audio_engine/node/include/hpae_gain_node.h | 1 + services/audio_engine/node/src/hpae_gain_node.cpp | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/services/audio_engine/node/include/hpae_gain_node.h b/services/audio_engine/node/include/hpae_gain_node.h index 40e395884e..0ad55ac803 100644 --- a/services/audio_engine/node/include/hpae_gain_node.h +++ b/services/audio_engine/node/include/hpae_gain_node.h @@ -45,6 +45,7 @@ private: bool fadeInState_ = false; FadeOutState fadeOutState_ = FadeOutState::NO_FADEOUT; IOperation operation_; + uint32_t pushFrameNum_ = 0; void DoGain(HpaePcmBuffer *input, uint32_t frameLen, uint32_t channelCount); void DoFading(HpaePcmBuffer *input); void SlienceData(HpaePcmBuffer *pcmBuffer); diff --git a/services/audio_engine/node/src/hpae_gain_node.cpp b/services/audio_engine/node/src/hpae_gain_node.cpp index 9d49fc2798..068852b3ed 100644 --- a/services/audio_engine/node/src/hpae_gain_node.cpp +++ b/services/audio_engine/node/src/hpae_gain_node.cpp @@ -38,6 +38,7 @@ static constexpr float FADE_LOW = 0.0f; static constexpr float FADE_HIGH = 1.0f; static constexpr float SHORT_FADE_PERIOD = 0.005f; // 5ms fade for 10ms < playback duration <= 40ms static constexpr float EPSILON = 1e-6f; +static constexpr uint32_t FADE_OUT_PUSH_NUM = 4; HpaeGainNode::HpaeGainNode(HpaeNodeInfo &nodeInfo) : HpaeNode(nodeInfo), HpaePluginNode(nodeInfo) { @@ -176,11 +177,12 @@ void HpaeGainNode::DoFading(HpaePcmBuffer *input) } if (fadeOutState_ == FadeOutState::DO_FADEOUT) { AUDIO_INFO_LOG("GainNode: fade out started!"); + pushFrameNum_ = 0; ProcessVol(data, byteLength, rawFormat, FADE_HIGH, FADE_LOW); fadeOutState_ = FadeOutState::DONE_FADEOUT; return; } - if (fadeOutState_ == FadeOutState::DONE_FADEOUT) { + if (fadeOutState_ == FadeOutState::DONE_FADEOUT && pushFrameNum_++ == FADE_OUT_PUSH_NUM) { AUDIO_INFO_LOG("fade out done, session %{public}d callback to update status", GetSessionId()); auto statusCallback = GetNodeStatusCallback().lock(); CHECK_AND_RETURN_LOG(statusCallback != nullptr, "statusCallback is null, cannot callback"); -- Gitee From 57f8fcee2d6f4336f23e4b3c902d7d2d197c82a8 Mon Sep 17 00:00:00 2001 From: Maninblack Date: Tue, 13 May 2025 03:44:11 +0000 Subject: [PATCH 3/4] openaudioport failed return -1 Signed-off-by: Maninblack --- services/audio_engine/manager/src/hpae_manager.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/services/audio_engine/manager/src/hpae_manager.cpp b/services/audio_engine/manager/src/hpae_manager.cpp index f7f1e7c2f1..8c62e9781a 100644 --- a/services/audio_engine/manager/src/hpae_manager.cpp +++ b/services/audio_engine/manager/src/hpae_manager.cpp @@ -703,9 +703,10 @@ int32_t HpaeManager::MoveSinkInputByIndexOrName(uint32_t sinkInputId, uint32_t s return; } - if (!SafeGetMap(rendererManagerMap_, sinkName)) { - AUDIO_ERR_LOG("move session:%{public}u failed, can not find sink:%{public}s.", sinkInputId, - sinkName.c_str()); + std::shared_ptr rendererManager = GetRendererManagerByName(sinkName); + if (rendererManager == nullptr || !rendererManager->IsInit()) { + AUDIO_ERR_LOG("move session:%{public}u failed, can not find sink:%{public}s or sink is not open.", + sinkInputId, sinkName.c_str()); if (auto serviceCallback = serviceCallback_.lock()) { serviceCallback->OnMoveSinkInputByIndexOrNameCb(ERROR_INVALID_PARAM); } @@ -976,10 +977,10 @@ void HpaeManager::HandleInitDeviceResult(std::string deviceName, int32_t result) serviceCallback->OnOpenAudioPortCb(sourceNameSourceIdMap_[deviceName]); } else { AUDIO_ERR_LOG("device:%{public}s is not exist.", deviceName.c_str()); - serviceCallback->OnOpenAudioPortCb(ERROR); + serviceCallback->OnOpenAudioPortCb(SINK_INVALID_ID); } } else if (serviceCallback) { - serviceCallback->OnOpenAudioPortCb(ERROR); + serviceCallback->OnOpenAudioPortCb(SINK_INVALID_ID); AUDIO_INFO_LOG("HandleInitDeviceResult deviceName:%{public}s " "result:%{public}d error", deviceName.c_str(), -- Gitee From ff77ac3de7e383f62750b88c95cf741f346854d1 Mon Sep 17 00:00:00 2001 From: Maninblack Date: Tue, 13 May 2025 13:56:14 +0800 Subject: [PATCH 4/4] fix Nmae error Signed-off-by: Maninblack --- services/audio_engine/manager/include/hpae_manager.h | 2 +- services/audio_engine/manager/src/hpae_manager.cpp | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/services/audio_engine/manager/include/hpae_manager.h b/services/audio_engine/manager/include/hpae_manager.h index 695756e761..96c737fe63 100644 --- a/services/audio_engine/manager/include/hpae_manager.h +++ b/services/audio_engine/manager/include/hpae_manager.h @@ -198,7 +198,7 @@ private: std::shared_ptr GetRendererManagerById(uint32_t sessionId); std::shared_ptr GetCapturerManagerById(uint32_t sessionId); - std::shared_ptr GetRendererManagerByNmae(const std::string &sinkName); + std::shared_ptr GetRendererManagerByName(const std::string &sinkName); std::shared_ptr GetCapturerManagerByName(const std::string &sourceName); void AddStreamToCollection(const HpaeStreamInfo &streamInfo); diff --git a/services/audio_engine/manager/src/hpae_manager.cpp b/services/audio_engine/manager/src/hpae_manager.cpp index 8c62e9781a..ab0ff02238 100644 --- a/services/audio_engine/manager/src/hpae_manager.cpp +++ b/services/audio_engine/manager/src/hpae_manager.cpp @@ -465,7 +465,7 @@ int32_t HpaeManager::CloseOutAudioPort(std::string &sinkName) return SUCCESS; } if (sinkName == defaultSink_ && defaultSink_ != DEFAULT_SINK_NAME) { - if (GetRendererManagerByNmae(DEFAULT_SINK_NAME) != nullptr) { + if (GetRendererManagerByName(DEFAULT_SINK_NAME) != nullptr) { AUDIO_INFO_LOG("reset default sink to primary."); defaultSink_ = DEFAULT_SINK_NAME; } else { @@ -527,7 +527,7 @@ int32_t HpaeManager::SetDefaultSink(std::string name) AUDIO_INFO_LOG("sink is same as default sink"); return; } - std::shared_ptr rendererManager = GetRendererManagerByNmae(defaultSink_); + std::shared_ptr rendererManager = GetRendererManagerByName(defaultSink_); if (rendererManager == nullptr) { AUDIO_INFO_LOG("default sink not exist, set default sink direct"); defaultSink_ = name; @@ -806,7 +806,7 @@ void HpaeManager::HandleMoveSinkInput(const std::shared_ptr s { uint32_t sessionId = sinkInputNode->GetNodeInfo().sessionId; AUDIO_INFO_LOG("handle move session:%{public}u to new sink:%{public}s", sessionId, sinkName.c_str()); - std::shared_ptr rendererManager = GetRendererManagerByNmae(sinkName); + std::shared_ptr rendererManager = GetRendererManagerByName(sinkName); if (rendererManager == nullptr) { AUDIO_ERR_LOG("handle move session:%{public}u failed,can not find sink by name:%{public}s", sessionId, sinkName.c_str()); @@ -1111,7 +1111,7 @@ void HpaeManager::DestroyCapture(uint32_t sessionId) } std::string captureName = capturerIdSourceNameMap_[sessionId]; if (INNER_SOURCE_TYPE_SET.count(capturerIdStreamInfoMap_[sessionId].streamInfo.sourceType) != 0) { - std::shared_ptr renderManager = GetRendererManagerByNmae(captureName); + std::shared_ptr renderManager = GetRendererManagerByName(captureName); if (renderManager != nullptr) { renderManager->DestroyStream(sessionId); } @@ -1538,7 +1538,7 @@ int32_t HpaeManager::GetSessionInfo( return SUCCESS; } -std::shared_ptr HpaeManager::GetRendererManagerByNmae(const std::string &sinkName) +std::shared_ptr HpaeManager::GetRendererManagerByName(const std::string &sinkName) { if (!SafeGetMap(rendererManagerMap_, sinkName)) { AUDIO_WARNING_LOG("can not find sinkName: %{public}s ", sinkName.c_str()); @@ -1559,7 +1559,7 @@ std::shared_ptr HpaeManager::GetCapturerManagerByName(cons std::shared_ptr HpaeManager::GetRendererManagerById(uint32_t sessionId) { if (rendererIdSinkNameMap_.find(sessionId) != rendererIdSinkNameMap_.end()) { - return GetRendererManagerByNmae(rendererIdSinkNameMap_[sessionId]); + return GetRendererManagerByName(rendererIdSinkNameMap_[sessionId]); } AUDIO_WARNING_LOG("can not find renderer by sessionId: %{public}u", sessionId); return nullptr; -- Gitee