From 9cedf8be1fdbc1241193b2be120328020a548bd4 Mon Sep 17 00:00:00 2001 From: Charles Date: Wed, 11 Jun 2025 11:30:08 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=BD=95=E5=88=B6=E9=9F=B3=E7=94=BB?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=97=B6=E9=97=B4=E6=88=B3bug=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E3=80=81=E9=83=A8=E5=88=86UTcrash=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Charles --- services/audio_engine/manager/src/hpae_capturer_manager.cpp | 2 +- .../test/unittest/manager/hpae_capturer_manager_test.cpp | 4 ++++ .../test/unittest/node/hpae_capture_effect_node_test.cpp | 1 + .../test/unittest/node/hpae_source_input_cluster_test.cpp | 1 + .../test/unittest/node/hpae_source_input_node_test.cpp | 2 ++ services/audio_service/server/src/capturer_in_server.cpp | 1 + 6 files changed, 10 insertions(+), 1 deletion(-) diff --git a/services/audio_engine/manager/src/hpae_capturer_manager.cpp b/services/audio_engine/manager/src/hpae_capturer_manager.cpp index 58493bc9c3..9802f565ba 100644 --- a/services/audio_engine/manager/src/hpae_capturer_manager.cpp +++ b/services/audio_engine/manager/src/hpae_capturer_manager.cpp @@ -442,7 +442,7 @@ void HpaeCapturerManager::UpdateAppsUidAndSessionId() if (sessionNodeMap_.find(sourceOutputNodePair.first) != sessionNodeMap_.end() && sessionNodeMap_[sourceOutputNodePair.first].state == HPAE_SESSION_RUNNING) { appsUid_.emplace_back(sourceOutputNodePair.second->GetAppUid()); - sessionsId_.emplace_back(sourceOutputNodePair.first); + sessionsId_.emplace_back(static_cast(sourceOutputNodePair.first)); } } if (SafeGetMap(sourceInputClusterMap_, mainMicType_) && sourceInputClusterMap_[mainMicType_]) { diff --git a/services/audio_engine/test/unittest/manager/hpae_capturer_manager_test.cpp b/services/audio_engine/test/unittest/manager/hpae_capturer_manager_test.cpp index 4ce0517092..02053a3d9c 100644 --- a/services/audio_engine/test/unittest/manager/hpae_capturer_manager_test.cpp +++ b/services/audio_engine/test/unittest/manager/hpae_capturer_manager_test.cpp @@ -115,6 +115,7 @@ TEST_F(HpaeCapturerManagerTest, HpaeCapturerManagerInitTest) std::shared_ptr capturerManager = std::make_shared(sourceInfo); EXPECT_EQ(capturerManager->Init() == SUCCESS, true); + EXPECT_EQ(capturerManager->DeInit() == SUCCESS, true); } TEST_F(HpaeCapturerManagerTest, HpaeCapturerManagerCreateDestoryStreamTest) @@ -156,6 +157,7 @@ TEST_F(HpaeCapturerManagerTest, HpaeCapturerManagerCreateDestoryStreamTest) WaitForMsgProcessing(capturerManager); EXPECT_EQ( capturerManager->GetSourceOutputInfo(streamInfo.sessionId, sourceOutputInfo) == ERR_INVALID_OPERATION, true); + EXPECT_EQ(capturerManager->DeInit() == SUCCESS, true); } static void StateControlTest(std::shared_ptr &capturerManager, HpaeStreamInfo &streamInfo, @@ -237,6 +239,7 @@ TEST_F(HpaeCapturerManagerTest, HpaeCapturerManagerStartStopTest) EXPECT_EQ(readDataCb.use_count() == 1, true); StateControlTest(capturerManager, streamInfo, sourceOutputInfo); + EXPECT_EQ(capturerManager->DeInit() == SUCCESS, true); } static void InitReloadSourceInfo(HpaeSourceInfo &sourceInfo, HpaeSourceInfo &newSourceInfo) @@ -300,6 +303,7 @@ TEST_F(HpaeCapturerManagerTest, HpaeCapturerManagerReloadTest) EXPECT_EQ(capturerManager->ReloadCaptureManager(newSourceInfo) == SUCCESS, true); WaitForMsgProcessing(capturerManager); EXPECT_EQ(capturerManager->GetSourceOutputInfo(streamInfo.sessionId, sourceOutputInfo) == SUCCESS, true); + EXPECT_EQ(capturerManager->DeInit() == SUCCESS, true); } } // namespace HPAE } // namespace AudioStandard diff --git a/services/audio_engine/test/unittest/node/hpae_capture_effect_node_test.cpp b/services/audio_engine/test/unittest/node/hpae_capture_effect_node_test.cpp index aebd75974e..f3865c7796 100644 --- a/services/audio_engine/test/unittest/node/hpae_capture_effect_node_test.cpp +++ b/services/audio_engine/test/unittest/node/hpae_capture_effect_node_test.cpp @@ -166,6 +166,7 @@ TEST_F(HpaeCaptureEffectNodeTest, HpaeCaptureEffectNodeTest_002) hpaeCaptureEffectNode->DisConnectWithInfo(hpaeSourceInputCluster, nodeInfo); EXPECT_EQ(hpaeSourceInputCluster->GetSourceInputNodeUseCount(), 1); hpaeSourceInputCluster->CapturerSourceStop(); + hpaeSourceInputCluster->CapturerSourceDeInit(); } TEST_F(HpaeCaptureEffectNodeTest, HpaeCaptureEffectNodeTest_003) diff --git a/services/audio_engine/test/unittest/node/hpae_source_input_cluster_test.cpp b/services/audio_engine/test/unittest/node/hpae_source_input_cluster_test.cpp index 7595e3085f..13a3e4b6ad 100644 --- a/services/audio_engine/test/unittest/node/hpae_source_input_cluster_test.cpp +++ b/services/audio_engine/test/unittest/node/hpae_source_input_cluster_test.cpp @@ -123,6 +123,7 @@ TEST_F(HpaeSourceInputClusterTest, testWriteDataToSourceInputDataCase) } EXPECT_EQ(hpaeSourceInputCluster->CapturerSourceStop(), SUCCESS); EXPECT_EQ(hpaeSourceInputCluster->GetSourceState() == STREAM_MANAGER_SUSPENDED, true); + EXPECT_EQ(hpaeSourceInputCluster->CapturerSourceDeInit(), SUCCESS); } TEST_F(HpaeSourceInputClusterTest, testInterfaces) diff --git a/services/audio_engine/test/unittest/node/hpae_source_input_node_test.cpp b/services/audio_engine/test/unittest/node/hpae_source_input_node_test.cpp index 599e2becc5..0769ee1c0c 100644 --- a/services/audio_engine/test/unittest/node/hpae_source_input_node_test.cpp +++ b/services/audio_engine/test/unittest/node/hpae_source_input_node_test.cpp @@ -152,6 +152,7 @@ TEST_F(HpaeSourceInputNodeTest, testWriteDataToSourceInputDataCase) } EXPECT_EQ(hpaeSoruceInputNode->CapturerSourceStop(), SUCCESS); EXPECT_EQ(hpaeSoruceInputNode->GetSourceState() == STREAM_MANAGER_SUSPENDED, true); + EXPECT_EQ(hpaeSoruceInputNode->CapturerSourceDeInit(), SUCCESS); } TEST_F(HpaeSourceInputNodeTest, testInterfaces_001) @@ -234,6 +235,7 @@ TEST_F(HpaeSourceInputNodeTest, testInterfaces_002) EXPECT_NE(hpaeSoruceInputNode->CapturerSourceInit(attr), SUCCESS); EXPECT_NE(hpaeSoruceInputNode->CapturerSourceStart(), SUCCESS); EXPECT_NE(hpaeSoruceInputNode->CapturerSourceStop(), SUCCESS); + EXPECT_NE(hpaeSoruceInputNode->CapturerSourceDeInit(), SUCCESS); } } // namespace HPAE } // namespace AudioStandard diff --git a/services/audio_service/server/src/capturer_in_server.cpp b/services/audio_service/server/src/capturer_in_server.cpp index e74ee5b445..2248ef67eb 100644 --- a/services/audio_service/server/src/capturer_in_server.cpp +++ b/services/audio_service/server/src/capturer_in_server.cpp @@ -368,6 +368,7 @@ int32_t CapturerInServer::OnReadData(size_t length) int32_t CapturerInServer::OnReadData(int8_t *outputData, size_t requestDataLen) { + CHECK_AND_RETURN_RET_LOG(status_ == I_STATUS_STARTED, ERR_READ_FAILED, "CapturerInServer is not started"); CHECK_AND_RETURN_RET_LOG(requestDataLen >= spanSizeInBytes_, ERR_READ_FAILED, "Length %{public}zu is less than spanSizeInBytes %{public}zu", requestDataLen, spanSizeInBytes_); std::shared_ptr stateListener = streamListener_.lock(); -- Gitee From 2d9933bacc9f4333722f34f0ab12f93df45f1283 Mon Sep 17 00:00:00 2001 From: Charles Date: Wed, 11 Jun 2025 13:19:21 +0800 Subject: [PATCH 2/2] =?UTF-8?q?sourceOutputNode=E5=88=86=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Charles --- .../manager/src/hpae_capturer_manager.cpp | 8 +++++--- .../node/include/hpae_source_output_node.h | 3 +++ .../node/src/hpae_source_output_node.cpp | 15 +++++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/services/audio_engine/manager/src/hpae_capturer_manager.cpp b/services/audio_engine/manager/src/hpae_capturer_manager.cpp index 9802f565ba..50d326c361 100644 --- a/services/audio_engine/manager/src/hpae_capturer_manager.cpp +++ b/services/audio_engine/manager/src/hpae_capturer_manager.cpp @@ -187,6 +187,7 @@ int32_t HpaeCapturerManager::DeleteOutputSession(uint32_t sessionId) void HpaeCapturerManager::SetSessionState(uint32_t sessionId, HpaeSessionState capturerState) { sessionNodeMap_[sessionId].state = capturerState; + sourceOutputNodeMap_[sessionId]->SetState(capturerState); } int32_t HpaeCapturerManager::CreateStream(const HpaeStreamInfo &streamInfo) @@ -429,7 +430,9 @@ void HpaeCapturerManager::Process() if (IsRunning()) { UpdateAppsUidAndSessionId(); for (const auto &sourceOutputNodePair : sourceOutputNodeMap_) { - sourceOutputNodePair.second->DoProcess(); + if (sourceOutputNodePair.second->GetState() == HPAE_SESSION_RUNNING) { + sourceOutputNodePair.second->DoProcess(); + } } } } @@ -439,8 +442,7 @@ void HpaeCapturerManager::UpdateAppsUidAndSessionId() appsUid_.clear(); sessionsId_.clear(); for (const auto &sourceOutputNodePair : sourceOutputNodeMap_) { - if (sessionNodeMap_.find(sourceOutputNodePair.first) != sessionNodeMap_.end() && - sessionNodeMap_[sourceOutputNodePair.first].state == HPAE_SESSION_RUNNING) { + if (sourceOutputNodePair.second->GetState() == HPAE_SESSION_RUNNING) { appsUid_.emplace_back(sourceOutputNodePair.second->GetAppUid()); sessionsId_.emplace_back(static_cast(sourceOutputNodePair.first)); } diff --git a/services/audio_engine/node/include/hpae_source_output_node.h b/services/audio_engine/node/include/hpae_source_output_node.h index 5ea19c4207..e28fb33906 100644 --- a/services/audio_engine/node/include/hpae_source_output_node.h +++ b/services/audio_engine/node/include/hpae_source_output_node.h @@ -39,6 +39,8 @@ public: void DisConnectWithInfo( const std::shared_ptr> &preNode, HpaeNodeInfo &nodeInfo) override; bool RegisterReadCallback(const std::weak_ptr &callback); + int32_t SetState(HpaeSessionState captureState); + HpaeSessionState GetState(); void SetAppUid(int32_t appUid); int32_t GetAppUid(); private: @@ -50,6 +52,7 @@ private: std::vector sourceOutputData_; std::vector interleveData_; std::atomic framesRead_; + HpaeSessionState state_ = HPAE_SESSION_NEW; uint64_t totalFrames_; int32_t appUid_ = -1; #ifdef ENABLE_HOOK_PCM diff --git a/services/audio_engine/node/src/hpae_source_output_node.cpp b/services/audio_engine/node/src/hpae_source_output_node.cpp index 474bd7971f..08367dfdc0 100644 --- a/services/audio_engine/node/src/hpae_source_output_node.cpp +++ b/services/audio_engine/node/src/hpae_source_output_node.cpp @@ -22,6 +22,7 @@ #include "hpae_format_convert.h" #include "audio_errors.h" #include "audio_utils.h" +#include "hpae_node_common.h" namespace OHOS { namespace AudioStandard { @@ -153,6 +154,20 @@ void HpaeSourceOutputNode::DisConnectWithInfo(const std::shared_ptrSession[%{public}u - %{public}d] state change:[%{public}s]-->[%{public}s]", + GetDeviceClass().c_str(), GetSessionId(), GetStreamType(), ConvertSessionState2Str(state_).c_str(), + ConvertSessionState2Str(captureState).c_str()); + state_ = captureState; + return SUCCESS; +} + +HpaeSessionState HpaeSourceOutputNode::GetState() +{ + return state_; +} + void HpaeSourceOutputNode::SetAppUid(int32_t appUid) { appUid_ = appUid; -- Gitee