diff --git a/common/include/daudio_log.h b/common/include/daudio_log.h index 5f19498ef184aa96882e64ad1b91638ee6f693d2..cff6f7df58a6528825cb53b4c9e18e4c8130adad 100644 --- a/common/include/daudio_log.h +++ b/common/include/daudio_log.h @@ -38,6 +38,22 @@ void DHLog(DHLogLevel logLevel, const char *fmt, ...); #define DHLOGE(fmt, ...) DHLog(DH_LOG_ERROR, \ (std::string("[") + DH_LOG_TAG + "][" + __FUNCTION__ + "]:" + fmt).c_str(), ##__VA_ARGS__) + +#define CHECK_NULLPTR_VOID(ptr) \ + do { \ + if (ptr == nullptr) { \ + DHLOGE("Ptr is null."); \ + return; \ + } \ + } while (0) + +#define CHECK_NULLPTR_RETURN(ptr, ret) \ + do { \ + if (ptr == nullptr) { \ + DHLOGE("Ptr is null."); \ + return ret; \ + } \ + } while (0) } // namespace DistributedHardware } // namespace OHOS #endif // OHOS_DAUDIO_LOG_H diff --git a/services/audioclient/spkclient/src/dspeaker_client.cpp b/services/audioclient/spkclient/src/dspeaker_client.cpp index e3e9749019479165e375dfc59b2f27667717f0bb..8001f20fb12568fe19e78f573eeae5fcdebca4b9 100644 --- a/services/audioclient/spkclient/src/dspeaker_client.cpp +++ b/services/audioclient/spkclient/src/dspeaker_client.cpp @@ -46,10 +46,7 @@ void DSpeakerClient::OnEngineTransEvent(const AVTransEvent &event) void DSpeakerClient::OnEngineTransMessage(const std::shared_ptr &message) { - if (message == nullptr) { - DHLOGE("The parameter is nullptr"); - return; - } + CHECK_NULLPTR_VOID(message); DHLOGI("On Engine message, type : %s.", GetEventNameByType(message->type_).c_str()); DAudioSinkManager::GetInstance().HandleDAudioNotify(message->dstDevId_, message->dstDevId_, static_cast(message->type_), message->content_); @@ -97,10 +94,8 @@ int32_t DSpeakerClient::CreateAudioRenderer(const AudioParam ¶m) }; std::lock_guard lck(devMtx_); audioRenderer_ = AudioStandard::AudioRenderer::Create(rendererOptions); - if (audioRenderer_ == nullptr) { - DHLOGE("Audio renderer create failed."); - return ERR_DH_AUDIO_CLIENT_RENDER_CREATE_FAILED; - } + CHECK_NULLPTR_RETURN(audioRenderer_, ERR_DH_AUDIO_NULLPTR); + audioRenderer_ ->SetRendererCallback(shared_from_this()); if (audioParam_.renderOpts.renderFlags != MMAP_MODE) { return DH_SUCCESS; @@ -116,15 +111,13 @@ int32_t DSpeakerClient::CreateAudioRenderer(const AudioParam ¶m) void DSpeakerClient::OnWriteData(size_t length) { AudioStandard::BufferDesc bufDesc; - if (audioRenderer_ == nullptr) { - DHLOGE("AudioRenderer is nullptr."); - return; - } - int32_t ret = audioRenderer_->GetBufferDesc(bufDesc); - if (ret != DH_SUCCESS || bufDesc.buffer == nullptr || bufDesc.bufLength == 0) { + CHECK_NULLPTR_VOID(audioRenderer_); + if (audioRenderer_->GetBufferDesc(bufDesc) != DH_SUCCESS || bufDesc.bufLength == 0) { DHLOGE("Get buffer desc failed."); return; } + CHECK_NULLPTR_VOID(bufDesc.buffer); + std::shared_ptr audioData = nullptr; { std::unique_lock spkLck(dataQueueMtx_); @@ -149,16 +142,13 @@ void DSpeakerClient::OnWriteData(size_t length) int32_t DSpeakerClient::SetUp(const AudioParam ¶m) { - int32_t ret = CreateAudioRenderer(param); - if (ret != DH_SUCCESS) { + if (CreateAudioRenderer(param) != DH_SUCCESS) { DHLOGE("Set up failed, Create Audio renderer failed."); - return ret; - } - if (speakerTrans_ == nullptr) { - DHLOGE("Speaker trans should be init by dev."); - return ERR_DH_AUDIO_NULLPTR; + return ERR_DH_AUDIO_CLIENT_RENDER_CREATE_FAILED; } - ret = speakerTrans_->SetUp(audioParam_, audioParam_, shared_from_this(), CAP_SPK); + CHECK_NULLPTR_RETURN(speakerTrans_, ERR_DH_AUDIO_NULLPTR); + + int32_t ret = speakerTrans_->SetUp(audioParam_, audioParam_, shared_from_this(), CAP_SPK); if (ret != DH_SUCCESS) { DHLOGE("Speaker trans setup failed."); return ret; @@ -217,12 +207,14 @@ int32_t DSpeakerClient::StartRender() { DHLOGI("Start spk client."); std::lock_guard lck(devMtx_); - if (audioRenderer_ == nullptr || clientStatus_ != AudioStatus::STATUS_READY) { - DHLOGE("Audio renderer init failed or spk status wrong, status: %d.", (int32_t)clientStatus_); + if (clientStatus_ != AudioStatus::STATUS_READY) { + DHLOGE("Audio renderer status wrong, status: %d.", (int32_t)clientStatus_); DAudioHisysevent::GetInstance().SysEventWriteFault(DAUDIO_OPT_FAIL, ERR_DH_AUDIO_SA_STATUS_ERR, - "daudio renderer init failed or spk status wrong."); + "daudio renderer status wrong."); return ERR_DH_AUDIO_SA_STATUS_ERR; } + + CHECK_NULLPTR_RETURN(audioRenderer_, ERR_DH_AUDIO_NULLPTR); if (!audioRenderer_->Start()) { DHLOGE("Audio renderer start failed."); DAudioHisysevent::GetInstance().SysEventWriteFault(DAUDIO_OPT_FAIL, ERR_DH_AUDIO_CLIENT_RENDER_STARTUP_FAILURE, @@ -247,12 +239,7 @@ int32_t DSpeakerClient::StopRender() "daudio renderer is not start or spk status wrong."); return ERR_DH_AUDIO_SA_STATUS_ERR; } - if (audioRenderer_ == nullptr) { - DHLOGE("Audio renderer is nullptr."); - DAudioHisysevent::GetInstance().SysEventWriteFault(DAUDIO_OPT_FAIL, ERR_DH_AUDIO_NULLPTR, - "daudio renderer is nullptr."); - return ERR_DH_AUDIO_NULLPTR; - } + CHECK_NULLPTR_RETURN(audioRenderer_, ERR_DH_AUDIO_NULLPTR); if (audioParam_.renderOpts.renderFlags != MMAP_MODE) { if (isRenderReady_.load()) { @@ -353,10 +340,8 @@ int32_t DSpeakerClient::OnDecodeTransDataDone(const std::shared_ptr & { DHLOGI("Write stream buffer."); int64_t startTime = GetNowTimeUs(); - if (audioData == nullptr) { - DHLOGE("The parameter is empty."); - return ERR_DH_AUDIO_NULLPTR; - } + CHECK_NULLPTR_RETURN(audioData, ERR_DH_AUDIO_NULLPTR); + std::lock_guard lock(dataQueueMtx_); while (dataQueue_.size() > DATA_QUEUE_MAX_SIZE) { DHLOGD("Data queue overflow."); @@ -395,10 +380,7 @@ int32_t DSpeakerClient::OnStateChange(const AudioEventType type) } std::shared_ptr cbObj = eventCallback_.lock(); - if (cbObj == nullptr) { - DHLOGE("Event callback is nullptr."); - return ERR_DH_AUDIO_NULLPTR; - } + CHECK_NULLPTR_RETURN(cbObj, ERR_DH_AUDIO_NULLPTR); cbObj->NotifyEvent(event); return DH_SUCCESS; } @@ -413,10 +395,8 @@ string DSpeakerClient::GetVolumeLevel() int32_t minVolumeLevel = AudioStandard::AudioSystemManager::GetInstance()->GetMinVolume(volumeType); bool isUpdateUi = false; cJSON *jParam = cJSON_CreateObject(); - if (jParam == nullptr) { - DHLOGE("Failed to create cJSON object."); - return ""; - } + CHECK_NULLPTR_RETURN(jParam, ""); + cJSON_AddStringToObject(jParam, KEY_DH_ID, std::to_string(dhId_).c_str()); cJSON_AddStringToObject(jParam, KEY_CHANGE_TYPE, FIRST_VOLUME_CHANAGE); cJSON_AddStringToObject(jParam, AUDIO_STREAM_TYPE, std::to_string(streamType).c_str()); @@ -441,15 +421,10 @@ void DSpeakerClient::OnVolumeKeyEvent(AudioStandard::VolumeEvent volumeEvent) { DHLOGD("Volume change event."); std::shared_ptr cbObj = eventCallback_.lock(); - if (cbObj == nullptr) { - DHLOGE("Event callback is nullptr."); - return; - } + CHECK_NULLPTR_VOID(cbObj); cJSON *jParam = cJSON_CreateObject(); - if (jParam == nullptr) { - DHLOGE("Failed to create cJSON object."); - return; - } + CHECK_NULLPTR_VOID(jParam); + cJSON_AddStringToObject(jParam, KEY_DH_ID, std::to_string(dhId_).c_str()); cJSON_AddStringToObject(jParam, KEY_CHANGE_TYPE, VOLUME_CHANAGE); cJSON_AddStringToObject(jParam, AUDIO_STREAM_TYPE, std::to_string(volumeEvent.volumeType).c_str()); @@ -475,15 +450,10 @@ void DSpeakerClient::OnInterrupt(const AudioStandard::InterruptEvent &interruptE { DHLOGD("Audio focus interrupt event."); std::shared_ptr cbObj = eventCallback_.lock(); - if (cbObj == nullptr) { - DHLOGE("Event callback is nullptr."); - return; - } + CHECK_NULLPTR_VOID(cbObj); cJSON *jParam = cJSON_CreateObject(); - if (jParam == nullptr) { - DHLOGE("Failed to create cJSON object."); - return; - } + CHECK_NULLPTR_VOID(jParam); + cJSON_AddStringToObject(jParam, KEY_DH_ID, std::to_string(dhId_).c_str()); cJSON_AddStringToObject(jParam, KEY_CHANGE_TYPE, INTERRUPT_EVENT); cJSON_AddStringToObject(jParam, VOLUME_EVENT_TYPE, std::to_string(interruptEvent.eventType).c_str()); @@ -509,15 +479,10 @@ void DSpeakerClient::OnStateChange(const AudioStandard::RendererState state, { DHLOGD("On render state change. state: %d", state); std::shared_ptr cbObj = eventCallback_.lock(); - if (cbObj == nullptr) { - DHLOGE("Event callback is nullptr."); - return; - } + CHECK_NULLPTR_VOID(cbObj); cJSON *jParam = cJSON_CreateObject(); - if (jParam == nullptr) { - DHLOGE("Failed to create cJSON object."); - return; - } + CHECK_NULLPTR_VOID(jParam); + cJSON_AddStringToObject(jParam, KEY_DH_ID, std::to_string(dhId_).c_str()); cJSON_AddStringToObject(jParam, KEY_CHANGE_TYPE, RENDER_STATE_CHANGE_EVENT); cJSON_AddStringToObject(jParam, KEY_STATE, std::to_string(state).c_str()); @@ -648,10 +613,7 @@ int32_t DSpeakerClient::SendMessage(uint32_t type, std::string content, std::str DHLOGE("event type is not NOTIFY_OPEN_SPK or NOTIFY_CLOSE_SPK. type:%u", type); return ERR_DH_AUDIO_NULLPTR; } - if (speakerTrans_ == nullptr) { - DHLOGE("speaker trans is null."); - return ERR_DH_AUDIO_NULLPTR; - } + CHECK_NULLPTR_RETURN(speakerTrans_, ERR_DH_AUDIO_NULLPTR); speakerTrans_->SendMessage(type, content, dstDevId); return DH_SUCCESS; }