Merge "Audio HAL: Add API to attach an effect to a device"

This commit is contained in:
Eric Laurent
2020-01-13 21:40:24 +00:00
committed by Gerrit Code Review
6 changed files with 72 additions and 2 deletions

View File

@@ -295,4 +295,28 @@ interface IDevice {
*/ */
@exit @exit
close() generates (Result retval); close() generates (Result retval);
/**
* Applies an audio effect to an audio device.
*
* @param device identifies the sink or source device this effect must be applied to.
* "device" is the AudioPortHandle indicated for the device when the audio
* patch connecting that device was created.
* @param effectId effect ID (obtained from IEffectsFactory.createEffect) of
* the effect to add.
* @return retval operation completion status.
*/
addDeviceEffect(AudioPortHandle device, uint64_t effectId) generates (Result retval);
/**
* Stops applying an audio effect to an audio device.
*
* @param device identifies the sink or source device this effect was applied to.
* "device" is the AudioPortHandle indicated for the device when the audio
* patch is created at the audio HAL.
* @param effectId effect ID (obtained from IEffectsFactory.createEffect) of
* the effect.
* @return retval operation completion status.
*/
removeDeviceEffect(AudioPortHandle device, uint64_t effectId) generates (Result retval);
}; };

View File

@@ -18,6 +18,7 @@
#include "core/default/Device.h" #include "core/default/Device.h"
#include <HidlUtils.h> #include <HidlUtils.h>
#include "common/all-versions/default/EffectMap.h"
#include "core/default/Conversions.h" #include "core/default/Conversions.h"
#include "core/default/StreamIn.h" #include "core/default/StreamIn.h"
#include "core/default/StreamOut.h" #include "core/default/StreamOut.h"
@@ -25,6 +26,7 @@
//#define LOG_NDEBUG 0 //#define LOG_NDEBUG 0
#include <inttypes.h>
#include <memory.h> #include <memory.h>
#include <string.h> #include <string.h>
#include <algorithm> #include <algorithm>
@@ -403,6 +405,39 @@ Result Device::doClose() {
Return<Result> Device::close() { Return<Result> Device::close() {
return doClose(); return doClose();
} }
Return<Result> Device::addDeviceEffect(AudioPortHandle device, uint64_t effectId) {
if (version() < AUDIO_DEVICE_API_VERSION_3_1 || mDevice->add_device_effect == nullptr) {
return Result::NOT_SUPPORTED;
}
effect_handle_t halEffect = EffectMap::getInstance().get(effectId);
if (halEffect != NULL) {
return analyzeStatus("add_device_effect",
mDevice->add_device_effect(
mDevice, static_cast<audio_port_handle_t>(device), halEffect));
} else {
ALOGW("%s Invalid effect ID passed from client: %" PRIu64 "", __func__, effectId);
return Result::INVALID_ARGUMENTS;
}
}
Return<Result> Device::removeDeviceEffect(AudioPortHandle device, uint64_t effectId) {
if (version() < AUDIO_DEVICE_API_VERSION_3_1 || mDevice->remove_device_effect == nullptr) {
return Result::NOT_SUPPORTED;
}
effect_handle_t halEffect = EffectMap::getInstance().get(effectId);
if (halEffect != NULL) {
return analyzeStatus("remove_device_effect",
mDevice->remove_device_effect(
mDevice, static_cast<audio_port_handle_t>(device), halEffect));
} else {
ALOGW("%s Invalid effect ID passed from client: %" PRIu64 "", __func__, effectId);
return Result::INVALID_ARGUMENTS;
}
}
#endif #endif
} // namespace implementation } // namespace implementation

View File

@@ -168,6 +168,14 @@ Return<Result> PrimaryDevice::setConnectedState(const DeviceAddress& address, bo
Return<Result> PrimaryDevice::close() { Return<Result> PrimaryDevice::close() {
return mDevice->close(); return mDevice->close();
} }
Return<Result> PrimaryDevice::addDeviceEffect(AudioPortHandle device, uint64_t effectId) {
return mDevice->addDeviceEffect(device, effectId);
}
Return<Result> PrimaryDevice::removeDeviceEffect(AudioPortHandle device, uint64_t effectId) {
return mDevice->removeDeviceEffect(device, effectId);
}
#endif #endif
// Methods from ::android::hardware::audio::CPP_VERSION::IPrimaryDevice follow. // Methods from ::android::hardware::audio::CPP_VERSION::IPrimaryDevice follow.

View File

@@ -116,8 +116,9 @@ struct Device : public IDevice, public ParametersUtil {
#endif #endif
#if MAJOR_VERSION >= 6 #if MAJOR_VERSION >= 6
Return<Result> close() override; Return<Result> close() override;
Return<Result> addDeviceEffect(AudioPortHandle device, uint64_t effectId) override;
Return<Result> removeDeviceEffect(AudioPortHandle device, uint64_t effectId) override;
#endif #endif
Return<void> debug(const hidl_handle& fd, const hidl_vec<hidl_string>& options) override; Return<void> debug(const hidl_handle& fd, const hidl_vec<hidl_string>& options) override;
// Utility methods for extending interfaces. // Utility methods for extending interfaces.

View File

@@ -98,6 +98,8 @@ struct PrimaryDevice : public IPrimaryDevice {
#endif #endif
#if MAJOR_VERSION >= 6 #if MAJOR_VERSION >= 6
Return<Result> close() override; Return<Result> close() override;
Return<Result> addDeviceEffect(AudioPortHandle device, uint64_t effectId) override;
Return<Result> removeDeviceEffect(AudioPortHandle device, uint64_t effectId) override;
#endif #endif
Return<void> debug(const hidl_handle& fd, const hidl_vec<hidl_string>& options) override; Return<void> debug(const hidl_handle& fd, const hidl_vec<hidl_string>& options) override;

View File

@@ -585,7 +585,7 @@ fd65298e1e09e0e3c781ab18305920d757dbe55a3b459ce17814ec5cf6dfee99 android.hardwar
# HALs released in Android R # HALs released in Android R
e966a3437d6a98d9d9e14e9d672088771716031900c0deb55a0946c751a03a44 android.hardware.audio@6.0::types e966a3437d6a98d9d9e14e9d672088771716031900c0deb55a0946c751a03a44 android.hardware.audio@6.0::types
2736c59abaccacac407ebe80c5e48d446edf015051d05632fb679ba471779e6e android.hardware.audio@6.0::IDevice 4540d12fe1cea996f21bd1712d4ae0906dcbd58177dac494efc605b004902d43 android.hardware.audio@6.0::IDevice
2402876cbc23c0de3690a665eca84fd3857d1808dba5cad25ce272f81ecef8c9 android.hardware.audio@6.0::IDevicesFactory 2402876cbc23c0de3690a665eca84fd3857d1808dba5cad25ce272f81ecef8c9 android.hardware.audio@6.0::IDevicesFactory
bca5379d5065e2e08b6ad7308ffc8a71a972fc0698bec678ea32eea786d01cb5 android.hardware.audio@6.0::IPrimaryDevice bca5379d5065e2e08b6ad7308ffc8a71a972fc0698bec678ea32eea786d01cb5 android.hardware.audio@6.0::IPrimaryDevice
7318b521ea12fdd4b6e3f381085c71784c810d1ec7a8d701ec2250f3f86712e4 android.hardware.audio@6.0::IStream 7318b521ea12fdd4b6e3f381085c71784c810d1ec7a8d701ec2250f3f86712e4 android.hardware.audio@6.0::IStream