From cc454d86184b144467f42e861e3c5515af1b7604 Mon Sep 17 00:00:00 2001 From: w30042960 Date: Thu, 19 Sep 2024 11:37:53 +0800 Subject: [PATCH] modify Signed-off-by: w30042960 --- audiohandler/src/daudio_handler.cpp | 2 +- .../audio_sink/src/daudio_sink_handler.cpp | 4 +- .../src/daudio_source_handler.cpp | 7 ++- sa_profile/daudio.cfg | 3 +- .../include/daudio_echo_cannel_manager.h | 9 +--- .../managersource/include/dmic_dev.h | 1 - .../managersource/include/dspeaker_dev.h | 1 - .../src/daudio_echo_cannel_manager.cpp | 50 ++++++------------- .../managersource/src/daudio_source_dev.cpp | 3 +- .../managersource/src/dmic_dev.cpp | 16 ++++-- .../managersource/src/dspeaker_dev.cpp | 6 +-- 11 files changed, 36 insertions(+), 66 deletions(-) diff --git a/audiohandler/src/daudio_handler.cpp b/audiohandler/src/daudio_handler.cpp index 45fac2bb..53f3d3d9 100644 --- a/audiohandler/src/daudio_handler.cpp +++ b/audiohandler/src/daudio_handler.cpp @@ -111,7 +111,7 @@ std::vector DAudioHandler::Query() DHLOGI("Query full distributed hardware information."); return RealQuery(KEY_TYPE_FULL); } - + std::vector DAudioHandler::RealQuery(const std::string &dataType) { auto audioSrv = AudioStandard::AudioSystemManager::GetInstance(); diff --git a/interfaces/inner_kits/native_cpp/audio_sink/src/daudio_sink_handler.cpp b/interfaces/inner_kits/native_cpp/audio_sink/src/daudio_sink_handler.cpp index fb45893b..bd6ee6f2 100644 --- a/interfaces/inner_kits/native_cpp/audio_sink/src/daudio_sink_handler.cpp +++ b/interfaces/inner_kits/native_cpp/audio_sink/src/daudio_sink_handler.cpp @@ -37,10 +37,10 @@ DAudioSinkHandler::DAudioSinkHandler() { DHLOGD("DAudio sink handler constructed."); if (!sinkSvrRecipient_) { - sinkSvrRecipient_ = sptr(new DAudioSinkSvrRecipient()); + sinkSvrRecipient_ = new DAudioSinkSvrRecipient(); } if (!dAudioSinkIpcCallback_) { - dAudioSinkIpcCallback_ = sptr(new DAudioSinkIpcCallback()); + dAudioSinkIpcCallback_ = new DAudioSinkIpcCallback(); } } diff --git a/interfaces/inner_kits/native_cpp/audio_source/src/daudio_source_handler.cpp b/interfaces/inner_kits/native_cpp/audio_source/src/daudio_source_handler.cpp index 624a9ef5..9563ab41 100644 --- a/interfaces/inner_kits/native_cpp/audio_source/src/daudio_source_handler.cpp +++ b/interfaces/inner_kits/native_cpp/audio_source/src/daudio_source_handler.cpp @@ -36,11 +36,11 @@ DAudioSourceHandler::DAudioSourceHandler() { DHLOGD("Audio source handler constructed."); if (!sourceSvrRecipient_) { - sourceSvrRecipient_ = sptr(new DAudioSourceSvrRecipient()); + sourceSvrRecipient_ = new DAudioSourceSvrRecipient(); } if (!dAudioIpcCallback_) { - dAudioIpcCallback_ = sptr(new DAudioIpcCallback()); + dAudioIpcCallback_ = new DAudioIpcCallback(); } } @@ -55,8 +55,7 @@ int32_t DAudioSourceHandler::InitSource(const std::string ¶ms) if (dAudioSourceProxy_ == nullptr) { sptr samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); CHECK_NULL_RETURN(samgr, ERR_DH_AUDIO_NULLPTR); - sptr loadCallback = sptr( - new DAudioSourceLoadCallback(params)); + sptr loadCallback = new DAudioSourceLoadCallback(params); int32_t ret = samgr->LoadSystemAbility(DISTRIBUTED_HARDWARE_AUDIO_SOURCE_SA_ID, loadCallback); if (ret != ERR_OK) { DHLOGE("Failed to Load systemAbility, ret code: %{public}d", ret); diff --git a/sa_profile/daudio.cfg b/sa_profile/daudio.cfg index 6574cd09..c2cf6cc7 100644 --- a/sa_profile/daudio.cfg +++ b/sa_profile/daudio.cfg @@ -9,8 +9,7 @@ "ohos.permission.MICROPHONE", "ohos.permission.DISTRIBUTED_DATASYNC", "ohos.permission.ACCESS_SERVICE_DM", - "ohos.permission.ACCESS_DISTRIBUTED_HARDWARE", - "ohos.permission.CAPTURE_VOICE_DOWNLINK_AUDIO" + "ohos.permission.ACCESS_DISTRIBUTED_HARDWARE" ], "ondemand" : true, "secon" : "u:r:daudio:s0" diff --git a/services/audiomanager/managersource/include/daudio_echo_cannel_manager.h b/services/audiomanager/managersource/include/daudio_echo_cannel_manager.h index 4b168f76..7fde6e33 100644 --- a/services/audiomanager/managersource/include/daudio_echo_cannel_manager.h +++ b/services/audiomanager/managersource/include/daudio_echo_cannel_manager.h @@ -48,7 +48,6 @@ public: private: void OnReadData(size_t length) override; void AecProcessData(); - void CircuitStart(); int32_t ProcessMicData(const std::shared_ptr &pipeInData, std::shared_ptr &micOutData); @@ -67,22 +66,18 @@ private: private: const std::string DUMP_DAUDIO_AEC_REFERENCE_FILENAME = "dump_aec_reference_signal.pcm"; const std::string DUMP_DAUDIO_AEC_RECORD_FILENAME = "dump_aec_record_signal.pcm"; - const std::string DUMP_DAUDIO_AEC_CIRCUIT_FILENAME = "dump_aec_circuit.pcm"; - const std::string DUMP_DAUDIO_AEC_AFTER_PROCESS_FILENAME = "dump_aec_after_process.pcm"; std::unique_ptr audioCapturer_ = nullptr; std::atomic isAecRunning_ = false; std::thread aecProcessThread_; static constexpr const char* AECTHREADNAME = "AecProcessThread"; - std::atomic isCircuitStartRunning_ = false; - std::thread circuitStartThread_; std::shared_ptr devCallback_; void *aecHandler_ = nullptr; AecEffector *aecProcessor_ = nullptr; constexpr static size_t COND_WAIT_TIME_MS = 10; constexpr static size_t WAIT_MIC_DATA_TIME_US = 5000; - constexpr static size_t REF_QUEUE_MAX_SIZE = 4; + constexpr static size_t REF_QUEUE_MAX_SIZE = 10; std::queue> refDataQueue_; std::queue> outDataQueue_; std::mutex refQueueMtx_; @@ -91,8 +86,6 @@ private: std::atomic isStarted = false; FILE *dumpFileRef_ = nullptr; FILE *dumpFileRec_ = nullptr; - FILE *dumpFileAft_ = nullptr; - FILE *dumpFileCir_ = nullptr; }; } // namespace DistributedHardware } // namespace OHOS diff --git a/services/audiomanager/managersource/include/dmic_dev.h b/services/audiomanager/managersource/include/dmic_dev.h index 0bfd1a84..419fe640 100644 --- a/services/audiomanager/managersource/include/dmic_dev.h +++ b/services/audiomanager/managersource/include/dmic_dev.h @@ -107,7 +107,6 @@ private: std::mutex channelWaitMutex_; std::condition_variable channelWaitCond_; int32_t curPort_ = 0; - int32_t streamId_ = 100; std::atomic isTransReady_ = false; std::atomic isOpened_ = false; std::shared_ptr micTrans_ = nullptr; diff --git a/services/audiomanager/managersource/include/dspeaker_dev.h b/services/audiomanager/managersource/include/dspeaker_dev.h index 973ee699..669f961e 100644 --- a/services/audiomanager/managersource/include/dspeaker_dev.h +++ b/services/audiomanager/managersource/include/dspeaker_dev.h @@ -94,7 +94,6 @@ private: std::atomic isTransReady_ = false; std::atomic isOpened_ = false; int32_t curPort_ = 0; - int32_t streamId_ = 0; std::shared_ptr speakerTrans_ = nullptr; // Speaker render parameters diff --git a/services/audiomanager/managersource/src/daudio_echo_cannel_manager.cpp b/services/audiomanager/managersource/src/daudio_echo_cannel_manager.cpp index 38943b19..5a3ceff2 100644 --- a/services/audiomanager/managersource/src/daudio_echo_cannel_manager.cpp +++ b/services/audiomanager/managersource/src/daudio_echo_cannel_manager.cpp @@ -57,34 +57,23 @@ int32_t DAudioEchoCannelManager::SetUp(const AudioCommonParam param, (void) param; devCallback_ = callback; DHLOGI("SetUp EchoCannel."); - - if (!isCircuitStartRunning_.load()) { - isCircuitStartRunning_.store(true); - circuitStartThread_ = std::thread([this]() { this->CircuitStart(); }); - circuitStartThread_.detach(); - DHLOGI("circuitStartThread_ is on."); + int32_t ret = LoadAecProcessor(); + if (ret != DH_SUCCESS) { + DHLOGE("LoadAECProcessor error."); + return ERR_DH_AUDIO_FAILED; } + ret = InitAecProcessor(); + CHECK_AND_RETURN_RET_LOG(ret != DH_SUCCESS, ret, "Init Aec Processor error. ret: %{public}d.", ret); DumpFileUtil::OpenDumpFile(DUMP_SERVER_PARA, DUMP_DAUDIO_AEC_REFERENCE_FILENAME, &dumpFileRef_); DumpFileUtil::OpenDumpFile(DUMP_SERVER_PARA, DUMP_DAUDIO_AEC_RECORD_FILENAME, &dumpFileRec_); - DumpFileUtil::OpenDumpFile(DUMP_SERVER_PARA, DUMP_DAUDIO_AEC_CIRCUIT_FILENAME, &dumpFileCir_); - DumpFileUtil::OpenDumpFile(DUMP_SERVER_PARA, DUMP_DAUDIO_AEC_AFTER_PROCESS_FILENAME, &dumpFileAft_); - return DH_SUCCESS; -} -void DAudioEchoCannelManager::CircuitStart() -{ - DHLOGI("Start CircuitStart thread."); - int32_t ret = AudioCaptureSetUp(); - CHECK_AND_RETURN_LOG(ret != DH_SUCCESS, "Init Get Reference error. ret: %{public}d.", ret); + ret = AudioCaptureSetUp(); + CHECK_AND_RETURN_RET_LOG(ret != DH_SUCCESS, ret, "Init Get Reference error. ret: %{public}d.", ret); + ret = AudioCaptureStart(); - CHECK_AND_RETURN_LOG(ret != DH_SUCCESS, "Start Get Reference error. ret: %{public}d.", ret); - ret = LoadAecProcessor(); - CHECK_AND_RETURN_LOG(ret != DH_SUCCESS, "LoadAECProcessor error."); - ret = InitAecProcessor(); - CHECK_AND_RETURN_LOG(ret != DH_SUCCESS, "Init Aec Processor error. ret: %{public}d.", ret); - ret = StartAecProcessor(); - CHECK_AND_RETURN_LOG(ret != DH_SUCCESS, "Start Aec Processor error. ret: %{public}d.", ret); - DHLOGI("CircuitStart thread end success."); + CHECK_AND_RETURN_RET_LOG(ret != DH_SUCCESS, ret, "Start Get Reference error. ret: %{public}d.", ret); + + return DH_SUCCESS; } int32_t DAudioEchoCannelManager::Start() @@ -121,19 +110,17 @@ int32_t DAudioEchoCannelManager::Release() UnLoadAecProcessor(); DumpFileUtil::CloseDumpFile(&dumpFileRef_); DumpFileUtil::CloseDumpFile(&dumpFileRec_); - DumpFileUtil::CloseDumpFile(&dumpFileAft_); - DumpFileUtil::CloseDumpFile(&dumpFileCir_); isStarted.store(false); - isCircuitStartRunning_.store(false); return DH_SUCCESS; } int32_t DAudioEchoCannelManager::OnMicDataReceived(const std::shared_ptr &pipeInData) { DHLOGD("GetMicDataBeforeAec."); + CHECK_AND_RETURN_RET_LOG(pipeInData == nullptr, ERR_DH_AUDIO_NULLPTR, "pipeInData is nullptr."); CHECK_AND_RETURN_RET_LOG(devCallback_ == nullptr, ERR_DH_AUDIO_NULLPTR, "callback is nullptr."); + CHECK_AND_RETURN_RET_LOG(aecProcessor_ == nullptr, ERR_DH_AUDIO_NULLPTR, "aec processor is nullptr."); if (isStarted.load()) { - CHECK_AND_RETURN_RET_LOG(pipeInData == nullptr, ERR_DH_AUDIO_NULLPTR, "pipeInData is nullptr."); auto micOutData = std::make_shared(pipeInData->Size()); int32_t ret = ProcessMicData(pipeInData, micOutData); if (ret != DH_SUCCESS) { @@ -142,7 +129,6 @@ int32_t DAudioEchoCannelManager::OnMicDataReceived(const std::shared_ptr(pipeInData->Data()), pipeInData->Size()); - DumpFileUtil::WriteDumpFile(dumpFileAft_, static_cast(micOutData->Data()), micOutData->Size()); devCallback_->OnDecodeTransDataDone(micOutData); } else { devCallback_->OnDecodeTransDataDone(pipeInData); @@ -205,9 +191,6 @@ void DAudioEchoCannelManager::AecProcessData() if (ret != DH_SUCCESS) { DHLOGE("aec effect process pipeInReferenceData fail. errocode:%{public}d", ret); } - if (!isStarted.load()) { - isStarted.store(true); - } if (refOutDataExt != nullptr) { free(refOutDataExt); refOutDataExt = nullptr; @@ -240,7 +223,6 @@ void DAudioEchoCannelManager::OnReadData(size_t length) } audioCapturer_->Enqueue(bufDesc); - DumpFileUtil::WriteDumpFile(dumpFileCir_, static_cast(audioData->Data()), audioData->Size()); std::lock_guard lock(refQueueMtx_); while (refDataQueue_.size() > REF_QUEUE_MAX_SIZE) { DHLOGE("Ref Data queue overflow. max size : 10"); @@ -273,10 +255,6 @@ int32_t DAudioEchoCannelManager::AudioCaptureSetUp() StreamUsage::STREAM_USAGE_MEDIA); capturerOptions.playbackCaptureConfig.filterOptions.usages.push_back(AudioStandard:: StreamUsage::STREAM_USAGE_UNKNOWN); - capturerOptions.playbackCaptureConfig.filterOptions.usages.push_back(AudioStandard:: - StreamUsage::STREAM_USAGE_VOICE_COMMUNICATION); - capturerOptions.playbackCaptureConfig.filterOptions.usages.push_back(AudioStandard:: - StreamUsage::STREAM_USAGE_MOVIE); audioCapturer_ = AudioStandard::AudioCapturer::Create(capturerOptions); CHECK_AND_RETURN_RET_LOG(audioCapturer_ == nullptr, ERR_DH_AUDIO_FAILED, "Audio capture create failed."); diff --git a/services/audiomanager/managersource/src/daudio_source_dev.cpp b/services/audiomanager/managersource/src/daudio_source_dev.cpp index dff98d34..afb4c91d 100644 --- a/services/audiomanager/managersource/src/daudio_source_dev.cpp +++ b/services/audiomanager/managersource/src/daudio_source_dev.cpp @@ -819,7 +819,7 @@ void DAudioSourceDev::NotifyFwkRunning(const std::string &devId, const std::stri DAudioSourceManager::GetInstance().OnDataSyncTrigger(devId); } } - + void DAudioSourceDev::NotifyFwkIdle(const std::string &devId, const std::string &dhId) { DAudioSourceManager::GetInstance().OnHardwareStateChanged(devId, dhId, DaudioBusinessState::IDLE); @@ -1027,7 +1027,6 @@ int32_t DAudioSourceDev::TaskOpenDMic(const std::string &args) NotifyHDF(NOTIFY_OPEN_MIC_RESULT, HDF_EVENT_INIT_ENGINE_FAILED, dhId); return ret; } - cJSON *jAudioParam = cJSON_CreateObject(); CHECK_NULL_RETURN(jAudioParam, ERR_DH_AUDIO_NULLPTR); to_json(jAudioParam, mic->GetAudioParam()); diff --git a/services/audiomanager/managersource/src/dmic_dev.cpp b/services/audiomanager/managersource/src/dmic_dev.cpp index 1dd07fd9..478b5678 100644 --- a/services/audiomanager/managersource/src/dmic_dev.cpp +++ b/services/audiomanager/managersource/src/dmic_dev.cpp @@ -142,7 +142,6 @@ int32_t DMicDev::CreateStream(const int32_t streamId) cbObj->NotifyEvent(event); DAudioHisysevent::GetInstance().SysEventWriteBehavior(DAUDIO_OPEN, devId_, std::to_string(dhId_), "daudio mic device open success."); - streamId_ = streamId; cJSON_Delete(jParam); cJSON_free(jsonData); return DH_SUCCESS; @@ -235,7 +234,7 @@ int32_t DMicDev::SetUp() DHLOGE("Mic trans set up failed. ret: %{public}d.", ret); return ret; } - echoCannelOn_ = true; + echoCannelOn_ = false; #ifdef ECHO_CANNEL_ENABLE if (echoCannelOn_ && echoManager_ == nullptr) { echoManager_ = std::make_shared(); @@ -270,6 +269,14 @@ int32_t DMicDev::Start() DHLOGE("Wait channel open timeout(%{public}ds).", CHANNEL_WAIT_SECONDS); return ERR_DH_AUDIO_SA_WAIT_TIMEOUT; } +#ifdef ECHO_CANNEL_ENABLE + CHECK_NULL_RETURN(echoManager_, DH_SUCCESS); + ret = echoManager_->Start(); + if (ret != DH_SUCCESS) { + DHLOGE("Echo manager start failed. ret: %{public}d.", ret); + return ret; + } +#endif isOpened_.store(true); return DH_SUCCESS; } @@ -507,10 +514,9 @@ AudioParam DMicDev::GetAudioParam() const int32_t DMicDev::NotifyHdfAudioEvent(const AudioEvent &event, const int32_t portId) { - int32_t ret = DAudioHdiHandler::GetInstance().NotifyEvent(devId_, portId, streamId_, event); + int32_t ret = DAudioHdiHandler::GetInstance().NotifyEvent(devId_, portId, 0, event); if (ret != DH_SUCCESS) { - DHLOGE("Notify event: %{public}d, result: %{public}s, streamId: %{public}d.", - event.type, event.content.c_str(), streamId_); + DHLOGE("Notify event: %{public}d, result: %{public}s.", event.type, event.content.c_str()); } return DH_SUCCESS; } diff --git a/services/audiomanager/managersource/src/dspeaker_dev.cpp b/services/audiomanager/managersource/src/dspeaker_dev.cpp index a1e2622c..6c9d3b8f 100644 --- a/services/audiomanager/managersource/src/dspeaker_dev.cpp +++ b/services/audiomanager/managersource/src/dspeaker_dev.cpp @@ -126,7 +126,6 @@ int32_t DSpeakerDev::CreateStream(const int32_t streamId) cbObj->NotifyEvent(event); DAudioHisysevent::GetInstance().SysEventWriteBehavior(DAUDIO_OPEN, devId_, std::to_string(dhId_), "daudio spk device open success."); - streamId_ = streamId; cJSON_Delete(jParam); cJSON_free(jsonData); return DH_SUCCESS; @@ -433,10 +432,9 @@ int32_t DSpeakerDev::SendMessage(uint32_t type, std::string content, std::string int32_t DSpeakerDev::NotifyHdfAudioEvent(const AudioEvent &event, const int32_t portId) { - int32_t ret = DAudioHdiHandler::GetInstance().NotifyEvent(devId_, portId, streamId_, event); + int32_t ret = DAudioHdiHandler::GetInstance().NotifyEvent(devId_, portId, 0, event); if (ret != DH_SUCCESS) { - DHLOGE("Notify event: %{public}d, result: %{public}s, streamId: %{public}d.", - event.type, event.content.c_str(), streamId_); + DHLOGE("Notify event: %{public}d, result: %{public}s.", event.type, event.content.c_str()); } return DH_SUCCESS; } -- Gitee