diff --git a/frameworks/native/audioadapter/test/unittest/src/pro_audio_service_adapter_unit_test.cpp b/frameworks/native/audioadapter/test/unittest/src/pro_audio_service_adapter_unit_test.cpp index 6b22cecd3dd80b4376c72db8ff9b6e3732c75e6a..11bdff326713090e0e4a81ca71339ba7b805a09a 100644 --- a/frameworks/native/audioadapter/test/unittest/src/pro_audio_service_adapter_unit_test.cpp +++ b/frameworks/native/audioadapter/test/unittest/src/pro_audio_service_adapter_unit_test.cpp @@ -42,6 +42,7 @@ void ProAudioServiceAdapterUnitTest::SetUp(void) void ProAudioServiceAdapterUnitTest::TearDown(void) { + HPAE::IHpaeManager::GetHpaeManager().DeInit(); } ProAudioServiceAdapterUnitTest::ProAudioServiceAdapterUnitTest() @@ -329,19 +330,19 @@ HWTEST_F(ProAudioServiceAdapterUnitTest, Pro_Audio_ReloadAudioPort_001, TestSize { AudioModuleInfo moduleInfo = InitSinkAudioModeInfo(); int32_t portId = impl_->ReloadAudioPort(moduleInfo.lib, moduleInfo); - EXPECT_GE(0, portId); + EXPECT_GE(portId, 0); } /** * @tc.name: Pro_Audio_ReloadAudioPort_002 - * @tc.desc: test reload audio port sink + * @tc.desc: test reload audio port source * @tc.type: FUNC */ HWTEST_F(ProAudioServiceAdapterUnitTest, Pro_Audio_ReloadAudioPort_002, TestSize.Level1) { AudioModuleInfo moduleInfo = InitSourceAudioModeInfo(); int32_t portId = impl_->ReloadAudioPort(moduleInfo.lib, moduleInfo); - EXPECT_GE(0, portId); + EXPECT_EQ(portId, -1); } /** @@ -353,9 +354,9 @@ HWTEST_F(ProAudioServiceAdapterUnitTest, Pro_Audio_ReloadAudioPort_004, TestSize { AudioModuleInfo moduleInfo = InitSinkAudioModeInfo(); int32_t portId = impl_->OpenAudioPort(moduleInfo.lib, moduleInfo); - EXPECT_GE(0, portId); + EXPECT_GE(portId, 0); portId = impl_->ReloadAudioPort(moduleInfo.lib, moduleInfo); - EXPECT_GE(0, portId); + EXPECT_GE(portId, 0); } /** @@ -367,11 +368,11 @@ HWTEST_F(ProAudioServiceAdapterUnitTest, Pro_Audio_ReloadAudioPort_005, TestSize { AudioModuleInfo moduleInfo = InitSinkAudioModeInfo(); int32_t portId = impl_->OpenAudioPort(moduleInfo.lib, moduleInfo); - EXPECT_GE(0, portId); + EXPECT_GE(portId, 0); int32_t ret = impl_->CloseAudioPort(portId); EXPECT_EQ(ERROR, ret); portId = impl_->ReloadAudioPort(moduleInfo.lib, moduleInfo); - EXPECT_GE(0, portId); + EXPECT_GE(portId, 0); } } // namespace AudioStandard } // namespace OHOS diff --git a/services/audio_engine/manager/include/hpae_manager.h b/services/audio_engine/manager/include/hpae_manager.h index 87e4bb001480e01d18baaaed5dd43e4b60a1965c..202a9848197195d47f7bec73d5da3307ae80bfa9 100644 --- a/services/audio_engine/manager/include/hpae_manager.h +++ b/services/audio_engine/manager/include/hpae_manager.h @@ -266,6 +266,7 @@ private: std::unordered_map deviceDumpSinkInfoMap_; std::unordered_map> handlers_; std::string effectLiveState_ = ""; + std::mutex mutex_; }; } // namespace HPAE diff --git a/services/audio_engine/manager/src/hpae_capturer_manager.cpp b/services/audio_engine/manager/src/hpae_capturer_manager.cpp index 659c6ab8f4f624b9a08356153d17e95c78d7fbf5..046cf857e000824b70f794dc7e8034702ef332a3 100644 --- a/services/audio_engine/manager/src/hpae_capturer_manager.cpp +++ b/services/audio_engine/manager/src/hpae_capturer_manager.cpp @@ -865,7 +865,6 @@ void HpaeCapturerManager::AddSingleNodeToSource(const HpaeCaptureMoveInfo &moveI if (moveInfo.sessionInfo.state == HPAE_SESSION_RUNNING) { ConnectOutputSession(sessionId); CHECK_AND_RETURN_LOG(CapturerSourceStart() == SUCCESS, "CapturerSourceStart error."); - hpaeSignalProcessThread_->Notify(); } } diff --git a/services/audio_engine/manager/src/hpae_manager.cpp b/services/audio_engine/manager/src/hpae_manager.cpp index e1f9f43ae6df00f0a926276e4f03eb7195155a5c..69f79d8d0c35959af584cd35c76c5e7c3d0e158b 100644 --- a/services/audio_engine/manager/src/hpae_manager.cpp +++ b/services/audio_engine/manager/src/hpae_manager.cpp @@ -113,11 +113,15 @@ HpaeManager::~HpaeManager() int32_t HpaeManager::Init() { - sinkSourceIndex_ = 0; - hpaeManagerThread_ = std::make_unique(); - hpaeManagerThread_->ActivateThread(this); + std::lock_guard lock(mutex_); + CHECK_AND_RETURN_RET_LOG(!IsInit(), SUCCESS, "already inited"); + if (!hpaeManagerThread_) { + sinkSourceIndex_ = 0; + hpaeManagerThread_ = std::make_unique(); + hpaeManagerThread_->ActivateThread(this); + } isInit_.store(true); - return 0; + return SUCCESS; } int32_t HpaeManager::SuspendAudioDevice(std::string &audioPortName, bool isSuspend) @@ -193,6 +197,8 @@ int32_t HpaeManager::GetAllSinks() int32_t HpaeManager::DeInit() { + std::lock_guard lock(mutex_); + CHECK_AND_RETURN_RET_LOG(IsInit(), SUCCESS, "isn't inited"); if (hpaeManagerThread_ != nullptr) { hpaeManagerThread_->DeactivateThread(); hpaeManagerThread_ = nullptr; diff --git a/services/audio_engine/node/include/hpae_co_buffer_node.h b/services/audio_engine/node/include/hpae_co_buffer_node.h index 8b56323e4bc6b0afba23d059c6a658636d3a17b1..43c919a049f3683a65d2b6b88640510d6a21a419 100644 --- a/services/audio_engine/node/include/hpae_co_buffer_node.h +++ b/services/audio_engine/node/include/hpae_co_buffer_node.h @@ -68,8 +68,8 @@ private: bool isOutputClusterConnected_ = false; std::set connectedProcessCluster_; #ifdef ENABLE_HOOK_PCM - std::unique_ptr inputPcmDumper_; - std::unique_ptr outputPcmDumper_; + std::unique_ptr inputPcmDumper_ = nullptr; + std::unique_ptr outputPcmDumper_ = nullptr; #endif }; } // namespace HPAE diff --git a/services/audio_engine/node/include/hpae_gain_node.h b/services/audio_engine/node/include/hpae_gain_node.h index b8f7b9bc7654bccd9ddca2004f3bfe9fda0dfe19..c70e5d5533732202fbce3c571e243f7652a7e76b 100644 --- a/services/audio_engine/node/include/hpae_gain_node.h +++ b/services/audio_engine/node/include/hpae_gain_node.h @@ -53,7 +53,7 @@ private: bool IsSilentData(HpaePcmBuffer *pcmBuffer); void GetFadeLength(uint32_t &byteLength, HpaePcmBuffer *input); #ifdef ENABLE_HOOK_PCM - std::unique_ptr outputPcmDumper_; + std::unique_ptr outputPcmDumper_ = nullptr; #endif }; diff --git a/services/audio_engine/node/src/hpae_audio_format_converter_node.cpp b/services/audio_engine/node/src/hpae_audio_format_converter_node.cpp index e0b2b4aaf6fc77c05142b1f6487fb2d924de3be5..707ec8162dacdbf2b8bbdd1088041743e0906029 100644 --- a/services/audio_engine/node/src/hpae_audio_format_converter_node.cpp +++ b/services/audio_engine/node/src/hpae_audio_format_converter_node.cpp @@ -56,13 +56,6 @@ HpaeAudioFormatConverterNode::HpaeAudioFormatConverterNode(HpaeNodeInfo preNodeI preNodeInfo.format, preNodeInfo.frameLen, preNodeInfo.samplingRate, inChannelInfo.numChannels, inChannelInfo.channelLayout, nodeInfo.format, nodeInfo.frameLen, nodeInfo.samplingRate, outChannelInfo.numChannels, outChannelInfo.channelLayout); -#ifdef ENABLE_HOOK_PCM - outputPcmDumper_ = std::make_unique( - "HpaeConverterNodeOutput_id_" + std::to_string(GetSessionId()) + - + "_nodeId_" + std::to_string(GetNodeId()) + - "_ch_" + std::to_string(GetChannelCount()) + "_rate_" + - std::to_string(GetSampleRate()) + "_" + GetTime() + ".pcm"); -#endif #ifdef ENABLE_HIDUMP_DFX SetNodeName("hpaeAudioFormatConverterNode"); @@ -100,6 +93,16 @@ HpaePcmBuffer *HpaeAudioFormatConverterNode::SignalProcess(const std::vector( + "HpaeConverterNodeOutput_id_" + std::to_string(GetSessionId()) + "_nodeId_" + std::to_string(GetNodeId()) + + "_ch_" + std::to_string(GetChannelCount()) + + "_rate_" + std::to_string(GetSampleRate()) + "_" + GetTime() + ".pcm"); + } +#endif + // pass valid tag to next node if (!inputs[0]->IsValid()) { return &silenceData_; diff --git a/services/audio_engine/node/src/hpae_gain_node.cpp b/services/audio_engine/node/src/hpae_gain_node.cpp index 005f384633c2520e0871ac30f10dacc31910b66e..67d0ee68e6fd79f39cee893f6e74ff5649df74cf 100644 --- a/services/audio_engine/node/src/hpae_gain_node.cpp +++ b/services/audio_engine/node/src/hpae_gain_node.cpp @@ -54,11 +54,6 @@ HpaeGainNode::HpaeGainNode(HpaeNodeInfo &nodeInfo) : HpaeNode(nodeInfo), HpaePlu AUDIO_INFO_LOG("HpaeGainNode curSystemGain:%{public}f streamType :%{public}d", curSystemGain, GetStreamType()); AUDIO_INFO_LOG( "HpaeGainNode SessionId:%{public}u deviceClass :%{public}s", GetSessionId(), GetDeviceClass().c_str()); -#ifdef ENABLE_HOOK_PCM - outputPcmDumper_ = std::make_unique("HpaeGainNodeOut_id_" + std::to_string(GetSessionId()) + "_ch_" + - std::to_string(GetChannelCount()) + "_rate_" + - std::to_string(GetSampleRate()) + "_" + GetTime() + ".pcm"); -#endif #ifdef ENABLE_HIDUMP_DFX SetNodeName("hpaeGainNode"); #endif @@ -89,7 +84,22 @@ HpaePcmBuffer *HpaeGainNode::SignalProcess(const std::vector &i float *inputData = (float *)inputs[0]->GetPcmDataBuffer(); uint32_t frameLen = inputs[0]->GetFrameLen(); uint32_t channelCount = inputs[0]->GetChannelCount(); - + uint32_t sampleRate = inputs[0]->GetSampleRate(); + +#ifdef ENABLE_HOOK_PCM + if (!outputPcmDumper_ || channelCount != GetChannelCount() || sampleRate != GetSampleRate()) { + // update node info and dump info + HpaeNodeInfo nodeInfo = GetNodeInfo(); + nodeInfo.channels = (AudioChannel)channelCount; + nodeInfo.samplingRate = (AudioSamplingRate)sampleRate; + SetNodeInfo(nodeInfo); + + outputPcmDumper_ = std::make_unique( + "HpaeGainNodeOut_id_" + std::to_string(GetSessionId()) + "_nodeId_" + std::to_string(GetNodeId()) + + "_ch_" + std::to_string(GetChannelCount()) + + "_rate_" + std::to_string(GetSampleRate()) + "_" + GetTime() + ".pcm"); + } +#endif if (needGainState_) { DoGain(inputs[0], frameLen, channelCount); } diff --git a/services/audio_engine/node/src/hpae_process_cluster.cpp b/services/audio_engine/node/src/hpae_process_cluster.cpp index 98898994abf8543c81ef40999bc8a2ca248d280e..c7ffa4c79ac8ee4058f1a8542beed8ca43110f04 100644 --- a/services/audio_engine/node/src/hpae_process_cluster.cpp +++ b/services/audio_engine/node/src/hpae_process_cluster.cpp @@ -182,11 +182,11 @@ void HpaeProcessCluster::Connect(const std::shared_ptrConnect(idGainMap_[sessionId]); idGainMap_[sessionId]->Connect(idLoudnessGainNodeMap_[sessionId]); idLoudnessGainNodeMap_[sessionId]->Connect(idConverterMap_[sessionId]); diff --git a/services/audio_engine/test/unittest/manager/hpae_manager_test.cpp b/services/audio_engine/test/unittest/manager/hpae_manager_test.cpp index 8ff8b238caf3fd10d6b3fc41f3c2749ef7c4382d..4caf751798103cc856459b7f4eacda14ef564aec 100644 --- a/services/audio_engine/test/unittest/manager/hpae_manager_test.cpp +++ b/services/audio_engine/test/unittest/manager/hpae_manager_test.cpp @@ -148,7 +148,7 @@ HpaeStreamInfo GetCaptureStreamInfo() return streamInfo; } -HWTEST_F(HpaeManagerUnitTest, constructHpaeManagerTest, TestSize.Level0) +HWTEST_F(HpaeManagerUnitTest, constructHpaeManagerTest001, TestSize.Level0) { EXPECT_NE(hpaeManager_, nullptr); hpaeManager_->Init(); @@ -157,7 +157,21 @@ HWTEST_F(HpaeManagerUnitTest, constructHpaeManagerTest, TestSize.Level0) EXPECT_EQ(hpaeManager_->IsRunning(), true); hpaeManager_->DeInit(); EXPECT_EQ(hpaeManager_->IsInit(), false); + EXPECT_EQ(hpaeManager_->IsRunning(), false); +} + + +HWTEST_F(HpaeManagerUnitTest, constructHpaeManagerTest002, TestSize.Level0) +{ + EXPECT_NE(hpaeManager_, nullptr); + hpaeManager_->Init(); + hpaeManager_->Init(); + EXPECT_EQ(hpaeManager_->IsInit(), true); sleep(1); + EXPECT_EQ(hpaeManager_->IsRunning(), true); + hpaeManager_->DeInit(); + hpaeManager_->DeInit(); + EXPECT_EQ(hpaeManager_->IsInit(), false); EXPECT_EQ(hpaeManager_->IsRunning(), false); } diff --git a/services/audio_engine/utils/hpae_pcm_dumper.cpp b/services/audio_engine/utils/hpae_pcm_dumper.cpp index 8747304cb0757c88ca02a7945c45f37b25afddfb..446cbf74b09c62932f197ac746deea0d460a8662 100644 --- a/services/audio_engine/utils/hpae_pcm_dumper.cpp +++ b/services/audio_engine/utils/hpae_pcm_dumper.cpp @@ -38,8 +38,10 @@ HpaePcmDumper::~HpaePcmDumper() int32_t HpaePcmDumper::Dump(const int8_t *buffer, int32_t length) { - DumpFileUtil::WriteDumpFile(dumpFile_, (void *)(buffer), length); - AudioCacheMgr::GetInstance().CacheData(filename_, (void *)(buffer), length); + if (AudioDump::GetInstance().GetVersionType() == DumpFileUtil::BETA_VERSION) { + DumpFileUtil::WriteDumpFile(dumpFile_, (void *)(buffer), length); + AudioCacheMgr::GetInstance().CacheData(filename_, (void *)(buffer), length); + } return SUCCESS; }