diff --git a/audiohandler/include/daudio_handler.h b/audiohandler/include/daudio_handler.h index 4b79ea821c5cd754d1c5e3be46fc3cbaa3059bbd..0e79c509292b0b508c365c436f7b2f35f0810caa 100644 --- a/audiohandler/include/daudio_handler.h +++ b/audiohandler/include/daudio_handler.h @@ -50,14 +50,15 @@ public: bool IsSupportPlugin() override; void RegisterPluginListener(std::shared_ptr listener) override; void UnRegisterPluginListener() override; - std::vector ablityForDump(); + std::vector AblityForDump(); std::vector ablityForDumpVec_; private: DAudioHandler(); ~DAudioHandler(); int32_t QueryCodecInfo(); int32_t QueryAudioInfo(); - void GetSupportAudioInfo(AudioInfo &audioInfos, CoderInfo &encoderInfos, CoderInfo &decoderInfos); + int32_t QueryFastAudioSupport(); + void GetSupportAudioInfo(); private: CoderInfo encoderInfos_; @@ -65,6 +66,7 @@ private: AudioInfo audioInfos_; CoderInfo spkInfos_; CoderInfo micInfos_; + bool isSupportFast_ = false; std::shared_ptr listener_ = nullptr; }; diff --git a/audiohandler/src/daudio_handler.cpp b/audiohandler/src/daudio_handler.cpp index fb06fc4eb36624ad8dbcb078e7c698d07b9adc15..0b827867b6a42b105e8498a3c6014cb108d2c122 100644 --- a/audiohandler/src/daudio_handler.cpp +++ b/audiohandler/src/daudio_handler.cpp @@ -39,14 +39,10 @@ IMPLEMENT_SINGLE_INSTANCE(DAudioHandler); DAudioHandler::DAudioHandler() { - encoderInfos_.channelMaxVal = 0; - encoderInfos_.channelMinVal = 0; - decoderInfos_.channelMaxVal = 0; - decoderInfos_.channelMinVal = 0; - spkInfos_.channelMaxVal = 0; - spkInfos_.channelMinVal = 0; - micInfos_.channelMaxVal = 0; - micInfos_.channelMinVal = 0; + encoderInfos_ = {}; + decoderInfos_ = {}; + spkInfos_ = {}; + micInfos_ = {}; DHLOGD("Distributed audio handler constructed."); } @@ -64,7 +60,16 @@ int32_t DAudioHandler::Initialize() return ret; } ret = QueryAudioInfo(); - GetSupportAudioInfo(audioInfos_, encoderInfos_, decoderInfos_); + if (ret != DH_SUCCESS) { + DHLOGE("Failed to query the codec information."); + return ret; + } + GetSupportAudioInfo(); + ret = QueryFastAudioSupport(); + if (ret != DH_SUCCESS) { + DHLOGE("Failed to query the low latency support information."); + return ret; + } return ret; } @@ -98,12 +103,12 @@ std::vector DAudioHandler::Query() std::string audioEncoders = HiStreamerQueryTool::GetInstance().QueryHiStreamerPluginInfo(HISTREAM_PLUGIN_TYPE::AUDIO_ENCODER); - DHLOGI("DScreen QueryAudioEncoderAbility info: %s", audioEncoders.c_str()); + DHLOGI("DAudio QueryAudioEncoderAbility info: %s", audioEncoders.c_str()); infoJson[KEY_HISTREAMER_AUDIO_ENCODER] = audioEncoders; std::string audioDecoders = HiStreamerQueryTool::GetInstance().QueryHiStreamerPluginInfo(HISTREAM_PLUGIN_TYPE::AUDIO_DECODER); - DHLOGI("DScreen QueryAudioDecoderAbility info: %s", audioDecoders.c_str()); + DHLOGI("DAudio QueryAudioDecoderAbility info: %s", audioDecoders.c_str()); infoJson[KEY_HISTREAMER_AUDIO_DECODER] = audioDecoders; DHItem dhItem; @@ -111,7 +116,7 @@ std::vector DAudioHandler::Query() dhItem.attrs = infoJson.dump(); dhItemVec.push_back(dhItem); DHLOGD("Query result: dhId: %d, attrs: %s.", dhId, infoJson.dump().c_str()); - if (dhId == DEFAULT_RENDER_ID) { + if (isSupportFast_) { dhItem.dhId = std::to_string(LOW_LATENCY_RENDER_ID); dhItemVec.push_back(dhItem); DHLOGD("Query result: dhId: %d, attrs: %s.", LOW_LATENCY_RENDER_ID, infoJson.dump().c_str()); @@ -121,15 +126,25 @@ std::vector DAudioHandler::Query() return dhItemVec; } -std::vector DAudioHandler::ablityForDump() +int32_t DAudioHandler::QueryFastAudioSupport() +{ + DHLOGD("Query low latency information of audio."); + // reserve to query from audiofwk + isSupportFast_ = true; + return DH_SUCCESS; +} + +std::vector DAudioHandler::AblityForDump() { DHLOGD("Get audio ablity for dump."); if (ablityForDumpVec_.size() > 0) { return ablityForDumpVec_; } - Initialize(); - Query(); - return ablityForDumpVec_; + if (Initialize() != DH_SUCCESS) { + DHLOGE("Initial ability vector failed."); + return {}; + } + return Query(); } int32_t DAudioHandler::QueryCodecInfo() { @@ -179,55 +194,38 @@ int32_t DAudioHandler::QueryAudioInfo() return DH_SUCCESS; } -void DAudioHandler::GetSupportAudioInfo(AudioInfo &audioInfos, CoderInfo &encoderInfos, - CoderInfo &decoderInfos) +void DAudioHandler::GetSupportAudioInfo() { - for (auto iter = audioInfos.sampleRates.begin(); iter != audioInfos.sampleRates.end(); iter++) { - if (std::find(encoderInfos.sampleRates.begin(), encoderInfos.sampleRates.end(), *iter) != - encoderInfos.sampleRates.end()) { + for (auto iter = audioInfos_.sampleRates.begin(); iter != audioInfos_.sampleRates.end(); iter++) { + if (std::find(encoderInfos_.sampleRates.begin(), encoderInfos_.sampleRates.end(), *iter) != + encoderInfos_.sampleRates.end()) { micInfos_.sampleRates.push_back(*iter); } - if (std::find(decoderInfos.sampleRates.begin(), decoderInfos.sampleRates.end(), *iter) != - decoderInfos.sampleRates.end()) { + if (std::find(decoderInfos_.sampleRates.begin(), decoderInfos_.sampleRates.end(), *iter) != + decoderInfos_.sampleRates.end()) { spkInfos_.sampleRates.push_back(*iter); } } - for (auto iter = audioInfos.formats.begin(); iter != audioInfos.formats.end(); iter++) { - if (std::find(encoderInfos.formats.begin(), encoderInfos.formats.end(), *iter) != encoderInfos.formats.end()) { + for (auto iter = audioInfos_.formats.begin(); iter != audioInfos_.formats.end(); iter++) { + if (std::find(encoderInfos_.formats.begin(), encoderInfos_.formats.end(), *iter) != + encoderInfos_.formats.end()) { micInfos_.formats.push_back(*iter); } - if (std::find(decoderInfos.formats.begin(), decoderInfos.formats.end(), *iter) != decoderInfos.formats.end()) { + if (std::find(decoderInfos_.formats.begin(), decoderInfos_.formats.end(), *iter) != + decoderInfos_.formats.end()) { spkInfos_.formats.push_back(*iter); } } - for (auto iter = audioInfos.channels.begin(); iter != audioInfos.channels.end(); iter++) { - if (*iter <= encoderInfos.channelMaxVal && *iter >= encoderInfos.channelMinVal) { + for (auto iter = audioInfos_.channels.begin(); iter != audioInfos_.channels.end(); iter++) { + if (*iter <= encoderInfos_.channelMaxVal && *iter >= encoderInfos_.channelMinVal) { micInfos_.channels.push_back(*iter); } - if (*iter <= decoderInfos.channelMaxVal && *iter >= decoderInfos.channelMinVal) { + if (*iter <= decoderInfos_.channelMaxVal && *iter >= decoderInfos_.channelMinVal) { spkInfos_.channels.push_back(*iter); } } - if (micInfos_.sampleRates.empty()) { - micInfos_.sampleRates.push_back(SAMPLE_RATE_DEFAULT); - } - if (spkInfos_.sampleRates.empty()) { - spkInfos_.sampleRates.push_back(SAMPLE_RATE_DEFAULT); - } - if (micInfos_.channels.empty()) { - micInfos_.channels.push_back(CHANNEL_COUNT_DEFAULT); - } - if (spkInfos_.channels.empty()) { - spkInfos_.channels.push_back(CHANNEL_COUNT_DEFAULT); - } - if (micInfos_.formats.empty()) { - micInfos_.formats.push_back(SAMPLE_FORMAT_DEFAULT); - } - if (spkInfos_.formats.empty()) { - spkInfos_.formats.push_back(SAMPLE_FORMAT_DEFAULT); - } } std::map DAudioHandler::QueryExtraInfo() diff --git a/common/dfx_utils/src/daudio_hidumper.cpp b/common/dfx_utils/src/daudio_hidumper.cpp index 07be7f802d203d13ab607f9de536e4270f4a373f..44d56b5c2d6d120e59808680c1d06b8b92f6585a 100644 --- a/common/dfx_utils/src/daudio_hidumper.cpp +++ b/common/dfx_utils/src/daudio_hidumper.cpp @@ -144,7 +144,7 @@ int32_t DaudioHidumper::GetSinkInfo(std::string &result) int32_t DaudioHidumper::GetAbilityInfo(std::string &result) { DHLOGI("Obtaining capability information."); - std::vector abilityInfo = DAudioHandler::GetInstance().ablityForDump(); + std::vector abilityInfo = DAudioHandler::GetInstance().AblityForDump(); for (DHItem dhItem : abilityInfo) { if (dhItem.dhId == spkDefault) { result.append("spkAbilityInfo:").append(dhItem.attrs).append(" ");