Loading media/libaudiohal/impl/DeviceHalAidl.cpp +31 −11 Original line number Diff line number Diff line Loading @@ -1045,8 +1045,8 @@ bool DeviceHalAidl::audioDeviceMatches(const AudioDevice& device, const AudioPor return p.ext.get<AudioPortExt::Tag::device>().device == device; } status_t DeviceHalAidl::createPortConfig( const AudioPortConfig& requestedPortConfig, PortConfigs::iterator* result) { status_t DeviceHalAidl::createOrUpdatePortConfig( const AudioPortConfig& requestedPortConfig, PortConfigs::iterator* result, bool* created) { TIME_CHECK(); AudioPortConfig appliedPortConfig; bool applied = false; Loading @@ -1061,11 +1061,17 @@ status_t DeviceHalAidl::createPortConfig( return NO_INIT; } } auto id = appliedPortConfig.id; auto [it, inserted] = mPortConfigs.emplace(std::move(id), std::move(appliedPortConfig)); LOG_ALWAYS_FATAL_IF(!inserted, "%s: port config with id %d already exists", __func__, it->first); int32_t id = appliedPortConfig.id; if (requestedPortConfig.id != 0 && requestedPortConfig.id != id) { LOG_ALWAYS_FATAL("%s: requested port config id %d changed to %d", __func__, requestedPortConfig.id, id); } auto [it, inserted] = mPortConfigs.insert_or_assign(std::move(id), std::move(appliedPortConfig)); *result = it; *created = inserted; return OK; } Loading Loading @@ -1112,8 +1118,8 @@ status_t DeviceHalAidl::findOrCreatePortConfig(const AudioDevice& device, } AudioPortConfig requestedPortConfig; requestedPortConfig.portId = portsIt->first; RETURN_STATUS_IF_ERROR(createPortConfig(requestedPortConfig, &portConfigIt)); *created = true; RETURN_STATUS_IF_ERROR(createOrUpdatePortConfig(requestedPortConfig, &portConfigIt, created)); } else { *created = false; } Loading Loading @@ -1163,16 +1169,30 @@ status_t DeviceHalAidl::findOrCreatePortConfig( requestedPortConfig.ext.get<AudioPortExt::Tag::mix>().usecase = AudioPortMixExtUseCase::make<AudioPortMixExtUseCase::Tag::source>(source); } RETURN_STATUS_IF_ERROR(createPortConfig(requestedPortConfig, &portConfigIt)); *created = true; RETURN_STATUS_IF_ERROR(createOrUpdatePortConfig(requestedPortConfig, &portConfigIt, created)); } else if (!flags.has_value()) { ALOGW("%s: mix port config for %s, handle %d not found in the module %s, " "and was not created as flags are not specified", __func__, config.toString().c_str(), ioHandle, mInstance.c_str()); return BAD_VALUE; } else { AudioPortConfig requestedPortConfig = portConfigIt->second; if (requestedPortConfig.ext.getTag() == AudioPortExt::Tag::mix) { AudioPortMixExt& mixExt = requestedPortConfig.ext.get<AudioPortExt::Tag::mix>(); if (mixExt.usecase.getTag() == AudioPortMixExtUseCase::Tag::source && source != AudioSource::SYS_RESERVED_INVALID) { mixExt.usecase.get<AudioPortMixExtUseCase::Tag::source>() = source; } } if (requestedPortConfig != portConfigIt->second) { RETURN_STATUS_IF_ERROR(createOrUpdatePortConfig(requestedPortConfig, &portConfigIt, created)); } else { *created = false; } } *portConfig = portConfigIt->second; return OK; } Loading media/libaudiohal/impl/DeviceHalAidl.h +2 −2 Original line number Diff line number Diff line Loading @@ -203,9 +203,9 @@ class DeviceHalAidl : public DeviceHalInterface, public ConversionHelperAidl, const ::aidl::android::media::audio::common::AudioPort& p); bool audioDeviceMatches(const ::aidl::android::media::audio::common::AudioDevice& device, const ::aidl::android::media::audio::common::AudioPortConfig& p); status_t createPortConfig( status_t createOrUpdatePortConfig( const ::aidl::android::media::audio::common::AudioPortConfig& requestedPortConfig, PortConfigs::iterator* result); PortConfigs::iterator* result, bool *created); status_t findOrCreatePatch( const std::set<int32_t>& sourcePortConfigIds, const std::set<int32_t>& sinkPortConfigIds, Loading Loading
media/libaudiohal/impl/DeviceHalAidl.cpp +31 −11 Original line number Diff line number Diff line Loading @@ -1045,8 +1045,8 @@ bool DeviceHalAidl::audioDeviceMatches(const AudioDevice& device, const AudioPor return p.ext.get<AudioPortExt::Tag::device>().device == device; } status_t DeviceHalAidl::createPortConfig( const AudioPortConfig& requestedPortConfig, PortConfigs::iterator* result) { status_t DeviceHalAidl::createOrUpdatePortConfig( const AudioPortConfig& requestedPortConfig, PortConfigs::iterator* result, bool* created) { TIME_CHECK(); AudioPortConfig appliedPortConfig; bool applied = false; Loading @@ -1061,11 +1061,17 @@ status_t DeviceHalAidl::createPortConfig( return NO_INIT; } } auto id = appliedPortConfig.id; auto [it, inserted] = mPortConfigs.emplace(std::move(id), std::move(appliedPortConfig)); LOG_ALWAYS_FATAL_IF(!inserted, "%s: port config with id %d already exists", __func__, it->first); int32_t id = appliedPortConfig.id; if (requestedPortConfig.id != 0 && requestedPortConfig.id != id) { LOG_ALWAYS_FATAL("%s: requested port config id %d changed to %d", __func__, requestedPortConfig.id, id); } auto [it, inserted] = mPortConfigs.insert_or_assign(std::move(id), std::move(appliedPortConfig)); *result = it; *created = inserted; return OK; } Loading Loading @@ -1112,8 +1118,8 @@ status_t DeviceHalAidl::findOrCreatePortConfig(const AudioDevice& device, } AudioPortConfig requestedPortConfig; requestedPortConfig.portId = portsIt->first; RETURN_STATUS_IF_ERROR(createPortConfig(requestedPortConfig, &portConfigIt)); *created = true; RETURN_STATUS_IF_ERROR(createOrUpdatePortConfig(requestedPortConfig, &portConfigIt, created)); } else { *created = false; } Loading Loading @@ -1163,16 +1169,30 @@ status_t DeviceHalAidl::findOrCreatePortConfig( requestedPortConfig.ext.get<AudioPortExt::Tag::mix>().usecase = AudioPortMixExtUseCase::make<AudioPortMixExtUseCase::Tag::source>(source); } RETURN_STATUS_IF_ERROR(createPortConfig(requestedPortConfig, &portConfigIt)); *created = true; RETURN_STATUS_IF_ERROR(createOrUpdatePortConfig(requestedPortConfig, &portConfigIt, created)); } else if (!flags.has_value()) { ALOGW("%s: mix port config for %s, handle %d not found in the module %s, " "and was not created as flags are not specified", __func__, config.toString().c_str(), ioHandle, mInstance.c_str()); return BAD_VALUE; } else { AudioPortConfig requestedPortConfig = portConfigIt->second; if (requestedPortConfig.ext.getTag() == AudioPortExt::Tag::mix) { AudioPortMixExt& mixExt = requestedPortConfig.ext.get<AudioPortExt::Tag::mix>(); if (mixExt.usecase.getTag() == AudioPortMixExtUseCase::Tag::source && source != AudioSource::SYS_RESERVED_INVALID) { mixExt.usecase.get<AudioPortMixExtUseCase::Tag::source>() = source; } } if (requestedPortConfig != portConfigIt->second) { RETURN_STATUS_IF_ERROR(createOrUpdatePortConfig(requestedPortConfig, &portConfigIt, created)); } else { *created = false; } } *portConfig = portConfigIt->second; return OK; } Loading
media/libaudiohal/impl/DeviceHalAidl.h +2 −2 Original line number Diff line number Diff line Loading @@ -203,9 +203,9 @@ class DeviceHalAidl : public DeviceHalInterface, public ConversionHelperAidl, const ::aidl::android::media::audio::common::AudioPort& p); bool audioDeviceMatches(const ::aidl::android::media::audio::common::AudioDevice& device, const ::aidl::android::media::audio::common::AudioPortConfig& p); status_t createPortConfig( status_t createOrUpdatePortConfig( const ::aidl::android::media::audio::common::AudioPortConfig& requestedPortConfig, PortConfigs::iterator* result); PortConfigs::iterator* result, bool *created); status_t findOrCreatePatch( const std::set<int32_t>& sourcePortConfigIds, const std::set<int32_t>& sinkPortConfigIds, Loading