Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0ac7f8c5 authored by Eric Laurent's avatar Eric Laurent
Browse files

audio effect HAL: add getDescriptors method

Add an EffectsFactoryHalInterface  method getDescriptors()
taking an effect type as input and returning the list of decriptors
for all effects of the matching type.

Bug: 188502620
Test: atest AudioEffectTest

Change-Id: If817d08a787be149e46028e55d9873323cbc9d4b
parent 30b86ba0
Loading
Loading
Loading
Loading
+33 −2
Original line number Diff line number Diff line
@@ -73,7 +73,9 @@ status_t EffectsFactoryHalHidl::getDescriptor(
        uint32_t index, effect_descriptor_t *pDescriptor) {
    // TODO: We need somehow to track the changes on the server side
    // or figure out how to convert everybody to query all the descriptors at once.
    // TODO: check for nullptr
    if (pDescriptor == nullptr) {
        return BAD_VALUE;
    }
    if (mLastDescriptors.size() == 0) {
        status_t queryResult = queryAllDescriptors();
        if (queryResult != OK) return queryResult;
@@ -85,7 +87,9 @@ status_t EffectsFactoryHalHidl::getDescriptor(

status_t EffectsFactoryHalHidl::getDescriptor(
        const effect_uuid_t *pEffectUuid, effect_descriptor_t *pDescriptor) {
    // TODO: check for nullptr
    if (pDescriptor == nullptr || pEffectUuid == nullptr) {
        return BAD_VALUE;
    }
    if (mEffectsFactory == 0) return NO_INIT;
    Uuid hidlUuid;
    UuidUtils::uuidFromHal(*pEffectUuid, &hidlUuid);
@@ -105,6 +109,33 @@ status_t EffectsFactoryHalHidl::getDescriptor(
    return processReturn(__FUNCTION__, ret);
}

status_t EffectsFactoryHalHidl::getDescriptors(const effect_uuid_t *pEffectType,
                                               std::vector<effect_descriptor_t> *descriptors) {
    if (pEffectType == nullptr || descriptors == nullptr) {
        return BAD_VALUE;
    }

    uint32_t numEffects = 0;
    status_t status = queryNumberEffects(&numEffects);
    if (status != NO_ERROR) {
        ALOGW("%s error %d from FactoryHal queryNumberEffects", __func__, status);
        return status;
    }

    for (uint32_t i = 0; i < numEffects; i++) {
        effect_descriptor_t descriptor;
        status = getDescriptor(i, &descriptor);
        if (status != NO_ERROR) {
            ALOGW("%s error %d from FactoryHal getDescriptor", __func__, status);
            continue;
        }
        if (memcmp(&descriptor.type, pEffectType, sizeof(effect_uuid_t)) == 0) {
            descriptors->push_back(descriptor);
        }
    }
    return descriptors->empty() ? NAME_NOT_FOUND : NO_ERROR;
}

status_t EffectsFactoryHalHidl::createEffect(
        const effect_uuid_t *pEffectUuid, int32_t sessionId, int32_t ioId,
        int32_t deviceId __unused, sp<EffectHalInterface> *effect) {
+3 −0
Original line number Diff line number Diff line
@@ -45,6 +45,9 @@ class EffectsFactoryHalHidl : public EffectsFactoryHalInterface, public Conversi
    virtual status_t getDescriptor(const effect_uuid_t *pEffectUuid,
            effect_descriptor_t *pDescriptor);

    virtual status_t getDescriptors(const effect_uuid_t *pEffectType,
                                    std::vector<effect_descriptor_t> *descriptors);

    // Creates an effect engine of the specified type.
    // To release the effect engine, it is necessary to release references
    // to the returned effect object.
+3 −0
Original line number Diff line number Diff line
@@ -37,6 +37,9 @@ class EffectsFactoryHalInterface : public RefBase
    virtual status_t getDescriptor(const effect_uuid_t *pEffectUuid,
            effect_descriptor_t *pDescriptor) = 0;

    virtual status_t getDescriptors(const effect_uuid_t *pEffectType,
                                    std::vector<effect_descriptor_t> *descriptors) = 0;

    // Creates an effect engine of the specified type.
    // To release the effect engine, it is necessary to release references
    // to the returned effect object.