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 52f607731f4501dc02ee1324d25f2d144458c5af..922720457494581b90b60e817b1761641647d3b9 100644 --- a/services/audio_engine/manager/include/hpae_manager.h +++ b/services/audio_engine/manager/include/hpae_manager.h @@ -291,6 +291,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 3b67c9df0eb728e0fc0017b3a74e4ef7be92c601..aabdf4226d42c0c48af57f2c9ab334f509fe7040 100644 --- a/services/audio_engine/manager/src/hpae_capturer_manager.cpp +++ b/services/audio_engine/manager/src/hpae_capturer_manager.cpp @@ -878,7 +878,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 069a1a853b6d3616dfc9292e6dcdaebd53ba5c38..8930cd7da9e0c8ed3ce486016f23a1c584fd94a0 100644 --- a/services/audio_engine/manager/src/hpae_manager.cpp +++ b/services/audio_engine/manager/src/hpae_manager.cpp @@ -123,11 +123,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) @@ -203,6 +207,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 6766b4ef1e3865627235618285dac49988f7c917..1b14461153255ebba581a475f82715cdd72be21d 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 @@ -59,13 +59,6 @@ HpaeAudioFormatConverterNode::HpaeAudioFormatConverterNode(HpaeNodeInfo preNodeI preNodeInfo.customSampleRate, 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"); @@ -103,6 +96,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 8dc6f74776a778d51ece1a98075eeabb56ea1cca..2f7fdb202ab114bd9a52cf35b184c3eb924137fc 100644 --- a/services/audio_engine/node/src/hpae_process_cluster.cpp +++ b/services/audio_engine/node/src/hpae_process_cluster.cpp @@ -191,11 +191,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 35a2a6fe0bf0a69ddb4cedf8fd2ac00c962f0a69..acc1e5c3af0b1929e4019aae1e3efca04e7347e1 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; }