diff --git a/services/audioclient/micclient/src/dmic_client.cpp b/services/audioclient/micclient/src/dmic_client.cpp index d917d3e41178b5a590a6a85f66ea3630f50aa06a..77cc7283a5a9c241739be5a359acc203637f6996 100644 --- a/services/audioclient/micclient/src/dmic_client.cpp +++ b/services/audioclient/micclient/src/dmic_client.cpp @@ -321,6 +321,10 @@ void DMicClient::OnReadData(size_t length) if (memcpy_s(audioData->Data(), audioData->Capacity(), bufDesc.buffer, bufDesc.bufLength) != EOK) { DHLOGE("Copy audio data failed."); } + + if (isPauseStatus_.load()) { + memset_s(audioData->Data(), audioData->Size(), 0, audioData->Size()); + } audioCapturer_->Enqueue(bufDesc); CHECK_NULL_VOID(micTrans_); diff --git a/services/audiomanager/managersink/include/daudio_sink_dev.h b/services/audiomanager/managersink/include/daudio_sink_dev.h index 052412ea4b18ec911049269b8008b10d4965be3f..6520ff5cab3f6a4705c862d00dbdc0f5752d39b5 100644 --- a/services/audiomanager/managersink/include/daudio_sink_dev.h +++ b/services/audiomanager/managersink/include/daudio_sink_dev.h @@ -55,6 +55,7 @@ public: int32_t ResumeDistributedHardware(const std::string &networkId); int32_t StopDistributedHardware(const std::string &networkId); void JudgeDeviceStatus(); + void SetDevLevelStatus(bool checkStatus); private: int32_t TaskOpenDSpeaker(const std::string &args); @@ -100,6 +101,7 @@ private: std::atomic isSpkInUse_ = false; std::atomic isMicInUse_ = false; + bool isDevLevelStatus_ = false; class SinkEventHandler : public AppExecFwk::EventHandler { public: diff --git a/services/audiomanager/managersink/src/daudio_sink_dev.cpp b/services/audiomanager/managersink/src/daudio_sink_dev.cpp index 95d44c5d9fc6cc73d78137875920e630011b7713..5e308d3c8fa465ea64ffaba3dd8faf3c2cb30a59 100644 --- a/services/audiomanager/managersink/src/daudio_sink_dev.cpp +++ b/services/audiomanager/managersink/src/daudio_sink_dev.cpp @@ -37,6 +37,7 @@ DAudioSinkDev::DAudioSinkDev(const std::string &devId, const sptr DAUDIO_MAX_JSON_LEN || args.empty()) { return ERR_DH_AUDIO_SA_PARAM_INVALID; } @@ -432,6 +437,11 @@ void DAudioSinkDev::JudgeDeviceStatus() DAudioSinkManager::GetInstance().OnSinkDevReleased(devId_); } +void DAudioSinkDev::SetDevLevelStatus(bool checkStatus) +{ + isDevLevelStatus_ = checkStatus; +} + int32_t DAudioSinkDev::ConvertString2Int(std::string val) { if (!CheckIsNum(val)) { diff --git a/services/audiomanager/managersink/src/daudio_sink_manager.cpp b/services/audiomanager/managersink/src/daudio_sink_manager.cpp index 358e9969987518a2092489f88f4344601c1631c3..780338b8bad60d7353e8ff77cf88ac712379335a 100644 --- a/services/audiomanager/managersink/src/daudio_sink_manager.cpp +++ b/services/audiomanager/managersink/src/daudio_sink_manager.cpp @@ -186,13 +186,16 @@ int32_t DAudioSinkManager::CreateAudioDevice(const std::string &devId) ret = dev->InitAVTransEngines(ChannelState::SPK_CONTROL_OPENED, rcvProviderPtr_); } if (channelState_ == ChannelState::MIC_CONTROL_OPENED) { - ret = dev->InitAVTransEngines(ChannelState::MIC_CONTROL_OPENED, sendProviderPtr_); - if (!ret) { - ret = VerifySecurityLevel(devId); + ret = VerifySecurityLevel(devId); + if (ret != DH_SUCCESS) { + DHLOGE("Verify security level failed."); + return ERR_DH_AUDIO_FAILED; } + dev->SetDevLevelStatus(true); + ret = dev->InitAVTransEngines(ChannelState::MIC_CONTROL_OPENED, sendProviderPtr_); } if (ret != DH_SUCCESS) { - DHLOGE("Init av transport sender engine failed."); + DHLOGE("Init av transport engine failed."); dev->JudgeDeviceStatus(); return ERR_DH_AUDIO_FAILED; }