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

Commit 4cba28ec authored by Eric Laurent's avatar Eric Laurent Committed by Android (Google) Code Review
Browse files

Merge changes I571756ad,I9545f701

* changes:
  audio: effect: dispatch command when using device effect proxy
  audio: effect: prevents spurious call to remove/add device effects
parents 1844e8ed a2e985ba
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -55,6 +55,19 @@ void AudioFlinger::DeviceEffectManager::onReleaseAudioPatch(audio_patch_handle_t
    }
}

void AudioFlinger::DeviceEffectManager::onUpdateAudioPatch(audio_patch_handle_t oldHandle,
        audio_patch_handle_t newHandle, const PatchPanel::Patch& patch) {
    ALOGV("%s oldhandle %d newHandle %d mHalHandle %d device sink %08x",
            __func__, oldHandle, newHandle, patch.mHalHandle,
            patch.mAudioPatch.num_sinks > 0 ? patch.mAudioPatch.sinks[0].ext.device.type : 0);
    Mutex::Autolock _l(mLock);
    for (auto& effect : mDeviceEffects) {
        // TODO(b/288339104) void*
        status_t status = effect.second->onUpdatePatch(oldHandle, newHandle, &patch);
        ALOGW_IF(status != NO_ERROR, "%s onUpdatePatch error %d", __func__, status);
    }
}

// DeviceEffectManager::createEffect_l() must be called with AudioFlinger::mLock held
sp<IAfEffectHandle> AudioFlinger::DeviceEffectManager::createEffect_l(
        effect_descriptor_t *descriptor,
+3 −0
Original line number Diff line number Diff line
@@ -62,6 +62,9 @@ public:
    void onCreateAudioPatch(audio_patch_handle_t handle,
                            const PatchPanel::Patch& patch) override;
    void onReleaseAudioPatch(audio_patch_handle_t handle) override;
    void onUpdateAudioPatch(audio_patch_handle_t oldHandle,
                            audio_patch_handle_t newHandle,
                            const PatchPanel::Patch& patch) override;

private:
    status_t checkEffectCompatibility(const effect_descriptor_t *desc);
+34 −0
Original line number Diff line number Diff line
@@ -3311,6 +3311,23 @@ status_t DeviceEffectProxy::init(
    return status;
}

status_t DeviceEffectProxy::onUpdatePatch(audio_patch_handle_t oldPatchHandle,
        audio_patch_handle_t newPatchHandle,
        const AudioFlinger::PatchPanel::Patch& patch __unused) {
    status_t status = NAME_NOT_FOUND;
    ALOGV("%s", __func__);
    Mutex::Autolock _l(mProxyLock);
    if (mEffectHandles.find(oldPatchHandle) != mEffectHandles.end()) {
        ALOGV("%s replacing effect from handle %d to handle %d", __func__, oldPatchHandle,
                newPatchHandle);
        sp<IAfEffectHandle> effect = mEffectHandles.at(oldPatchHandle);
        mEffectHandles.erase(oldPatchHandle);
        mEffectHandles.emplace(newPatchHandle, effect);
        status = NO_ERROR;
    }
    return status;
}

status_t DeviceEffectProxy::onCreatePatch(
        audio_patch_handle_t patchHandle, const AudioFlinger::PatchPanel::Patch& patch) {
    status_t status = NAME_NOT_FOUND;
@@ -3455,6 +3472,23 @@ status_t DeviceEffectProxy::removeEffectFromHal(
    return mManagerCallback->removeEffectFromHal(&mDevicePort, effect);
}

status_t DeviceEffectProxy::command(
        int32_t cmdCode, const std::vector<uint8_t>& cmdData, int32_t maxReplySize,
        std::vector<uint8_t>* reply) {
    Mutex::Autolock _l(mProxyLock);
    status_t status = EffectBase::command(cmdCode, cmdData, maxReplySize, reply);
    if (status == NO_ERROR) {
        for (auto& handle : mEffectHandles) {
            sp<IAfEffectBase> effect = handle.second->effect().promote();
            if (effect != nullptr) {
                status = effect->command(cmdCode, cmdData, maxReplySize, reply);
            }
        }
    }
    ALOGV("%s status %d", __func__, status);
    return status;
}

bool DeviceEffectProxy::isOutput() const {
    if (mDevicePort.id != AUDIO_PORT_HANDLE_NONE) {
        return mDevicePort.role == AUDIO_PORT_ROLE_SINK;
+14 −0
Original line number Diff line number Diff line
@@ -680,11 +680,20 @@ public:
        return onCreatePatch(patchHandle,
                *reinterpret_cast<const AudioFlinger::PatchPanel::Patch *>(patch));
    }
    // TODO(b/288339104) type
    status_t onUpdatePatch(audio_patch_handle_t oldPatchHandle, audio_patch_handle_t newPatchHandle,
            /* const PatchPanel::Patch& */ const void * patch) final {
        return onUpdatePatch(oldPatchHandle, newPatchHandle,
                *reinterpret_cast<const AudioFlinger::PatchPanel::Patch *>(patch));
    }

    status_t init(const std::map<audio_patch_handle_t, AudioFlinger::PatchPanel::Patch>& patches);
    status_t onCreatePatch(
            audio_patch_handle_t patchHandle, const AudioFlinger::PatchPanel::Patch& patch);

    status_t onUpdatePatch(audio_patch_handle_t oldPatchHandle, audio_patch_handle_t newPatchHandle,
            const AudioFlinger::PatchPanel::Patch& patch);

    void onReleasePatch(audio_patch_handle_t patchHandle) final;

    size_t removeEffect(const sp<IAfEffectModule>& effect) final;
@@ -698,6 +707,11 @@ public:
    audio_channel_mask_t channelMask() const final;
    uint32_t channelCount() const final;

    status_t command(int32_t cmdCode,
                     const std::vector<uint8_t>& cmdData,
                     int32_t maxReplySize,
                     std::vector<uint8_t>* reply) final;

    void dump2(int fd, int spaces) const final;

private:
+8 −5
Original line number Diff line number Diff line
@@ -109,6 +109,11 @@ public:
    virtual sp<IAfEffectModule> asEffectModule() = 0;
    virtual sp<IAfDeviceEffectProxy> asDeviceEffectProxy() = 0;

    virtual status_t command(int32_t cmdCode,
            const std::vector<uint8_t>& cmdData,
            int32_t maxReplySize,
            std::vector<uint8_t>* reply) = 0;

    virtual void dump(int fd, const Vector<String16>& args) const = 0;

private:
@@ -117,11 +122,6 @@ private:
    virtual void setSuspended(bool suspended) = 0;
    virtual bool suspended() const = 0;

    virtual status_t command(int32_t cmdCode,
            const std::vector<uint8_t>& cmdData,
            int32_t maxReplySize,
            std::vector<uint8_t>* reply) = 0;

    virtual ssize_t disconnectHandle(IAfEffectHandle *handle, bool unpinIfLast) = 0;
    virtual ssize_t removeHandle_l(IAfEffectHandle *handle) = 0;
    virtual IAfEffectHandle* controlHandle_l() = 0;
@@ -349,6 +349,9 @@ public:
    virtual status_t onCreatePatch(
            audio_patch_handle_t patchHandle,
            /* const PatchPanel::Patch& */ const void * patch) = 0;
    virtual status_t onUpdatePatch(audio_patch_handle_t oldPatchHandle,
            audio_patch_handle_t newPatchHandle,
            /* const PatchPanel::Patch& */ const void * patch) = 0;
    virtual void onReleasePatch(audio_patch_handle_t patchHandle) = 0;

    virtual void dump2(int fd, int spaces) const = 0; // TODO(b/288339104) naming?
Loading