Loading audio/6.0/IDevice.hal +19 −0 Original line number Diff line number Diff line Loading @@ -167,6 +167,25 @@ interface IDevice { createAudioPatch(vec<AudioPortConfig> sources, vec<AudioPortConfig> sinks) generates (Result retval, AudioPatchHandle patch); /** * Updates an audio patch. * * Use of this function is preferred to releasing and re-creating a patch * as the HAL module can figure out a way of switching the route without * causing audio disruption. * * @param previousPatch handle of the previous patch to update. * @param sources new patch sources. * @param sinks new patch sinks. * @return retval operation completion status. * @return patch updated patch handle. */ updateAudioPatch( AudioPatchHandle previousPatch, vec<AudioPortConfig> sources, vec<AudioPortConfig> sinks) generates ( Result retval, AudioPatchHandle patch); /** * Release an audio patch. * Loading audio/core/all-versions/default/Device.cpp +25 −4 Original line number Diff line number Diff line Loading @@ -269,12 +269,21 @@ Return<bool> Device::supportsAudioPatches() { Return<void> Device::createAudioPatch(const hidl_vec<AudioPortConfig>& sources, const hidl_vec<AudioPortConfig>& sinks, createAudioPatch_cb _hidl_cb) { auto [retval, patch] = createOrUpdateAudioPatch( static_cast<AudioPatchHandle>(AudioHandleConsts::AUDIO_PATCH_HANDLE_NONE), sources, sinks); _hidl_cb(retval, patch); return Void(); } std::tuple<Result, AudioPatchHandle> Device::createOrUpdateAudioPatch( AudioPatchHandle patch, const hidl_vec<AudioPortConfig>& sources, const hidl_vec<AudioPortConfig>& sinks) { Result retval(Result::NOT_SUPPORTED); AudioPatchHandle patch = 0; if (version() >= AUDIO_DEVICE_API_VERSION_3_0) { std::unique_ptr<audio_port_config[]> halSources(HidlUtils::audioPortConfigsToHal(sources)); std::unique_ptr<audio_port_config[]> halSinks(HidlUtils::audioPortConfigsToHal(sinks)); audio_patch_handle_t halPatch = AUDIO_PATCH_HANDLE_NONE; audio_patch_handle_t halPatch = static_cast<audio_patch_handle_t>(patch); retval = analyzeStatus("create_audio_patch", mDevice->create_audio_patch(mDevice, sources.size(), &halSources[0], sinks.size(), &halSinks[0], &halPatch)); Loading @@ -282,8 +291,7 @@ Return<void> Device::createAudioPatch(const hidl_vec<AudioPortConfig>& sources, patch = static_cast<AudioPatchHandle>(halPatch); } } _hidl_cb(retval, patch); return Void(); return {retval, patch}; } Return<Result> Device::releaseAudioPatch(int32_t patch) { Loading Loading @@ -438,6 +446,19 @@ Return<Result> Device::removeDeviceEffect(AudioPortHandle device, uint64_t effec } } Return<void> Device::updateAudioPatch(int32_t previousPatch, const hidl_vec<AudioPortConfig>& sources, const hidl_vec<AudioPortConfig>& sinks, createAudioPatch_cb _hidl_cb) { if (previousPatch != static_cast<int32_t>(AudioHandleConsts::AUDIO_PATCH_HANDLE_NONE)) { auto [retval, patch] = createOrUpdateAudioPatch(previousPatch, sources, sinks); _hidl_cb(retval, patch); } else { _hidl_cb(Result::INVALID_ARGUMENTS, previousPatch); } return Void(); } #endif } // namespace implementation Loading audio/core/all-versions/default/PrimaryDevice.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -176,6 +176,13 @@ Return<Result> PrimaryDevice::addDeviceEffect(AudioPortHandle device, uint64_t e Return<Result> PrimaryDevice::removeDeviceEffect(AudioPortHandle device, uint64_t effectId) { return mDevice->removeDeviceEffect(device, effectId); } Return<void> PrimaryDevice::updateAudioPatch(int32_t previousPatch, const hidl_vec<AudioPortConfig>& sources, const hidl_vec<AudioPortConfig>& sinks, updateAudioPatch_cb _hidl_cb) { return mDevice->updateAudioPatch(previousPatch, sources, sinks, _hidl_cb); } #endif // Methods from ::android::hardware::audio::CPP_VERSION::IPrimaryDevice follow. Loading audio/core/all-versions/default/include/core/default/Device.h +6 −0 Original line number Diff line number Diff line Loading @@ -118,6 +118,9 @@ struct Device : public IDevice, public ParametersUtil { Return<Result> close() override; Return<Result> addDeviceEffect(AudioPortHandle device, uint64_t effectId) override; Return<Result> removeDeviceEffect(AudioPortHandle device, uint64_t effectId) override; Return<void> updateAudioPatch(int32_t previousPatch, const hidl_vec<AudioPortConfig>& sources, const hidl_vec<AudioPortConfig>& sinks, createAudioPatch_cb _hidl_cb) override; #endif Return<void> debug(const hidl_handle& fd, const hidl_vec<hidl_string>& options) override; Loading @@ -136,6 +139,9 @@ struct Device : public IDevice, public ParametersUtil { virtual ~Device(); Result doClose(); std::tuple<Result, AudioPatchHandle> createOrUpdateAudioPatch( AudioPatchHandle patch, const hidl_vec<AudioPortConfig>& sources, const hidl_vec<AudioPortConfig>& sinks); // Methods from ParametersUtil. char* halGetParameters(const char* keys) override; Loading audio/core/all-versions/default/include/core/default/PrimaryDevice.h +3 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,9 @@ struct PrimaryDevice : public IPrimaryDevice { Return<Result> close() override; Return<Result> addDeviceEffect(AudioPortHandle device, uint64_t effectId) override; Return<Result> removeDeviceEffect(AudioPortHandle device, uint64_t effectId) override; Return<void> updateAudioPatch(int32_t previousPatch, const hidl_vec<AudioPortConfig>& sources, const hidl_vec<AudioPortConfig>& sinks, updateAudioPatch_cb _hidl_cb) override; #endif Return<void> debug(const hidl_handle& fd, const hidl_vec<hidl_string>& options) override; Loading Loading
audio/6.0/IDevice.hal +19 −0 Original line number Diff line number Diff line Loading @@ -167,6 +167,25 @@ interface IDevice { createAudioPatch(vec<AudioPortConfig> sources, vec<AudioPortConfig> sinks) generates (Result retval, AudioPatchHandle patch); /** * Updates an audio patch. * * Use of this function is preferred to releasing and re-creating a patch * as the HAL module can figure out a way of switching the route without * causing audio disruption. * * @param previousPatch handle of the previous patch to update. * @param sources new patch sources. * @param sinks new patch sinks. * @return retval operation completion status. * @return patch updated patch handle. */ updateAudioPatch( AudioPatchHandle previousPatch, vec<AudioPortConfig> sources, vec<AudioPortConfig> sinks) generates ( Result retval, AudioPatchHandle patch); /** * Release an audio patch. * Loading
audio/core/all-versions/default/Device.cpp +25 −4 Original line number Diff line number Diff line Loading @@ -269,12 +269,21 @@ Return<bool> Device::supportsAudioPatches() { Return<void> Device::createAudioPatch(const hidl_vec<AudioPortConfig>& sources, const hidl_vec<AudioPortConfig>& sinks, createAudioPatch_cb _hidl_cb) { auto [retval, patch] = createOrUpdateAudioPatch( static_cast<AudioPatchHandle>(AudioHandleConsts::AUDIO_PATCH_HANDLE_NONE), sources, sinks); _hidl_cb(retval, patch); return Void(); } std::tuple<Result, AudioPatchHandle> Device::createOrUpdateAudioPatch( AudioPatchHandle patch, const hidl_vec<AudioPortConfig>& sources, const hidl_vec<AudioPortConfig>& sinks) { Result retval(Result::NOT_SUPPORTED); AudioPatchHandle patch = 0; if (version() >= AUDIO_DEVICE_API_VERSION_3_0) { std::unique_ptr<audio_port_config[]> halSources(HidlUtils::audioPortConfigsToHal(sources)); std::unique_ptr<audio_port_config[]> halSinks(HidlUtils::audioPortConfigsToHal(sinks)); audio_patch_handle_t halPatch = AUDIO_PATCH_HANDLE_NONE; audio_patch_handle_t halPatch = static_cast<audio_patch_handle_t>(patch); retval = analyzeStatus("create_audio_patch", mDevice->create_audio_patch(mDevice, sources.size(), &halSources[0], sinks.size(), &halSinks[0], &halPatch)); Loading @@ -282,8 +291,7 @@ Return<void> Device::createAudioPatch(const hidl_vec<AudioPortConfig>& sources, patch = static_cast<AudioPatchHandle>(halPatch); } } _hidl_cb(retval, patch); return Void(); return {retval, patch}; } Return<Result> Device::releaseAudioPatch(int32_t patch) { Loading Loading @@ -438,6 +446,19 @@ Return<Result> Device::removeDeviceEffect(AudioPortHandle device, uint64_t effec } } Return<void> Device::updateAudioPatch(int32_t previousPatch, const hidl_vec<AudioPortConfig>& sources, const hidl_vec<AudioPortConfig>& sinks, createAudioPatch_cb _hidl_cb) { if (previousPatch != static_cast<int32_t>(AudioHandleConsts::AUDIO_PATCH_HANDLE_NONE)) { auto [retval, patch] = createOrUpdateAudioPatch(previousPatch, sources, sinks); _hidl_cb(retval, patch); } else { _hidl_cb(Result::INVALID_ARGUMENTS, previousPatch); } return Void(); } #endif } // namespace implementation Loading
audio/core/all-versions/default/PrimaryDevice.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -176,6 +176,13 @@ Return<Result> PrimaryDevice::addDeviceEffect(AudioPortHandle device, uint64_t e Return<Result> PrimaryDevice::removeDeviceEffect(AudioPortHandle device, uint64_t effectId) { return mDevice->removeDeviceEffect(device, effectId); } Return<void> PrimaryDevice::updateAudioPatch(int32_t previousPatch, const hidl_vec<AudioPortConfig>& sources, const hidl_vec<AudioPortConfig>& sinks, updateAudioPatch_cb _hidl_cb) { return mDevice->updateAudioPatch(previousPatch, sources, sinks, _hidl_cb); } #endif // Methods from ::android::hardware::audio::CPP_VERSION::IPrimaryDevice follow. Loading
audio/core/all-versions/default/include/core/default/Device.h +6 −0 Original line number Diff line number Diff line Loading @@ -118,6 +118,9 @@ struct Device : public IDevice, public ParametersUtil { Return<Result> close() override; Return<Result> addDeviceEffect(AudioPortHandle device, uint64_t effectId) override; Return<Result> removeDeviceEffect(AudioPortHandle device, uint64_t effectId) override; Return<void> updateAudioPatch(int32_t previousPatch, const hidl_vec<AudioPortConfig>& sources, const hidl_vec<AudioPortConfig>& sinks, createAudioPatch_cb _hidl_cb) override; #endif Return<void> debug(const hidl_handle& fd, const hidl_vec<hidl_string>& options) override; Loading @@ -136,6 +139,9 @@ struct Device : public IDevice, public ParametersUtil { virtual ~Device(); Result doClose(); std::tuple<Result, AudioPatchHandle> createOrUpdateAudioPatch( AudioPatchHandle patch, const hidl_vec<AudioPortConfig>& sources, const hidl_vec<AudioPortConfig>& sinks); // Methods from ParametersUtil. char* halGetParameters(const char* keys) override; Loading
audio/core/all-versions/default/include/core/default/PrimaryDevice.h +3 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,9 @@ struct PrimaryDevice : public IPrimaryDevice { Return<Result> close() override; Return<Result> addDeviceEffect(AudioPortHandle device, uint64_t effectId) override; Return<Result> removeDeviceEffect(AudioPortHandle device, uint64_t effectId) override; Return<void> updateAudioPatch(int32_t previousPatch, const hidl_vec<AudioPortConfig>& sources, const hidl_vec<AudioPortConfig>& sinks, updateAudioPatch_cb _hidl_cb) override; #endif Return<void> debug(const hidl_handle& fd, const hidl_vec<hidl_string>& options) override; Loading