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

Commit 662a1edb authored by Andy Hung's avatar Andy Hung Committed by Android (Google) Code Review
Browse files

Merge "AudioFlinger: Extract PatchPanel class" into main

parents 73d5ec40 8e6b62a0
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -160,6 +160,7 @@ class AudioFlinger : public AudioFlingerServerAdapter::Delegate
{
    friend class sp<AudioFlinger>;
    friend class Client; // removeClient_l();
    friend class PatchPanel;
    // TODO(b/291012167) replace the Thread friends with an interface.
    friend class DirectOutputThread;
    friend class MixerThread;
@@ -578,7 +579,6 @@ private:
    class DeviceEffectManager;
    // TODO(b/288339104) these should be separate files
public:
    class PatchPanel;
    class DeviceEffectManagerCallback;
private:
    struct TeePatch;
@@ -586,8 +586,6 @@ public:
    using TeePatches = std::vector<TeePatch>;
private:

#include "PatchPanel.h"

#include "PatchCommandThread.h"

#include "DeviceEffectManager.h"
+6 −7
Original line number Diff line number Diff line
@@ -35,14 +35,14 @@ using detail::AudioHalVersionInfo;
using media::IEffectClient;

void AudioFlinger::DeviceEffectManager::onCreateAudioPatch(audio_patch_handle_t handle,
        const PatchPanel::Patch& patch) {
        const IAfPatchPanel::Patch& patch) {
    ALOGV("%s handle %d mHalHandle %d device sink %08x",
            __func__, handle, patch.mHalHandle,
            patch.mAudioPatch.num_sinks > 0 ? patch.mAudioPatch.sinks[0].ext.device.type : 0);
    Mutex::Autolock _l(mLock);
    for (auto& effectProxies : mDeviceEffects) {
        for (auto& effect : effectProxies.second) {
            status_t status = effect->onCreatePatch(handle, &patch); // TODO(b/288339104) void*
            const status_t status = effect->onCreatePatch(handle, patch);
            ALOGV("%s Effect onCreatePatch status %d", __func__, status);
            ALOGW_IF(status == BAD_VALUE, "%s onCreatePatch error %d", __func__, status);
        }
@@ -60,15 +60,14 @@ 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) {
        audio_patch_handle_t newHandle, const IAfPatchPanel::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& effectProxies : mDeviceEffects) {
        for (auto& effect : effectProxies.second) {
            // TODO(b/288339104) void*
            status_t status = effect->onUpdatePatch(oldHandle, newHandle, &patch);
            const status_t status = effect->onUpdatePatch(oldHandle, newHandle, patch);
            ALOGV("%s Effect onUpdatePatch status %d", __func__, status);
            ALOGW_IF(status != NO_ERROR, "%s onUpdatePatch error %d", __func__, status);
        }
@@ -81,7 +80,7 @@ sp<IAfEffectHandle> AudioFlinger::DeviceEffectManager::createEffect_l(
        const AudioDeviceTypeAddr& device,
        const sp<Client>& client,
        const sp<IEffectClient>& effectClient,
        const std::map<audio_patch_handle_t, PatchPanel::Patch>& patches,
        const std::map<audio_patch_handle_t, IAfPatchPanel::Patch>& patches,
        int *enabled,
        status_t *status,
        bool probe,
@@ -123,7 +122,7 @@ sp<IAfEffectHandle> AudioFlinger::DeviceEffectManager::createEffect_l(
        if (lStatus == NO_ERROR) {
            lStatus = effect->addHandle(handle.get());
            if (lStatus == NO_ERROR) {
                lStatus = effect->init(&patches); // TODO(b/288339104) void*
                lStatus = effect->init(patches);
                if (lStatus == NAME_NOT_FOUND) {
                    lStatus = NO_ERROR;
                }
+3 −3
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@ public:
                const AudioDeviceTypeAddr& device,
                const sp<Client>& client,
                const sp<media::IEffectClient>& effectClient,
                const std::map<audio_patch_handle_t, PatchPanel::Patch>& patches,
                const std::map<audio_patch_handle_t, IAfPatchPanel::Patch>& patches,
                int *enabled,
                status_t *status,
                bool probe,
@@ -60,11 +60,11 @@ public:
    // PatchCommandThread::PatchCommandListener implementation

    void onCreateAudioPatch(audio_patch_handle_t handle,
                            const PatchPanel::Patch& patch) override;
            const IAfPatchPanel::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;
                            const IAfPatchPanel::Patch& patch) override;

private:
    status_t checkEffectCompatibility(const effect_descriptor_t *desc);
+4 −4
Original line number Diff line number Diff line
@@ -3289,7 +3289,7 @@ status_t DeviceEffectProxy::setEnabled(bool enabled, bool fromHandle)
}

status_t DeviceEffectProxy::init(
        const std::map <audio_patch_handle_t, AudioFlinger::PatchPanel::Patch>& patches) {
        const std::map <audio_patch_handle_t, IAfPatchPanel::Patch>& patches) {
//For all audio patches
//If src or sink device match
//If the effect is HW accelerated
@@ -3313,7 +3313,7 @@ status_t DeviceEffectProxy::init(

status_t DeviceEffectProxy::onUpdatePatch(audio_patch_handle_t oldPatchHandle,
        audio_patch_handle_t newPatchHandle,
        const AudioFlinger::PatchPanel::Patch& patch __unused) {
        const IAfPatchPanel::Patch& /* patch */) {
    status_t status = NAME_NOT_FOUND;
    ALOGV("%s", __func__);
    Mutex::Autolock _l(mProxyLock);
@@ -3329,7 +3329,7 @@ status_t DeviceEffectProxy::onUpdatePatch(audio_patch_handle_t oldPatchHandle,
}

status_t DeviceEffectProxy::onCreatePatch(
        audio_patch_handle_t patchHandle, const AudioFlinger::PatchPanel::Patch& patch) {
        audio_patch_handle_t patchHandle, const IAfPatchPanel::Patch& patch) {
    status_t status = NAME_NOT_FOUND;
    sp<IAfEffectHandle> handle;
    // only consider source[0] as this is the only "true" source of a patch
@@ -3352,7 +3352,7 @@ status_t DeviceEffectProxy::onCreatePatch(
    return status;
}

status_t DeviceEffectProxy::checkPort(const AudioFlinger::PatchPanel::Patch& patch,
status_t DeviceEffectProxy::checkPort(const IAfPatchPanel::Patch& patch,
        const struct audio_port_config *port, sp<IAfEffectHandle> *handle) {

    ALOGV("%s type %d device type %d address %s device ID %d patch.isSoftware() %d",
+6 −23
Original line number Diff line number Diff line
@@ -656,31 +656,14 @@ public:
    status_t setEnabled(bool enabled, bool fromHandle) final;
    sp<IAfDeviceEffectProxy> asDeviceEffectProxy() final { return this; }

    // TODO(b/288339104) type
    status_t init(const /* std::map<audio_patch_handle_t,
            PatchPanel::Patch>& */ void * patches) final {
        return init(*reinterpret_cast<const std::map<
                audio_patch_handle_t, AudioFlinger::PatchPanel::Patch> *>(patches));
    }
    // TODO(b/288339104) type
    status_t onCreatePatch(audio_patch_handle_t patchHandle,
            /* const PatchPanel::Patch& */ const void * patch) final {
        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,
            IAfPatchPanel::Patch>& patches) final;

    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 onCreatePatch(audio_patch_handle_t patchHandle,
            const IAfPatchPanel::Patch& patch) final;

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

    void onReleasePatch(audio_patch_handle_t patchHandle) final;

@@ -763,7 +746,7 @@ private:
        const sp<AudioFlinger::DeviceEffectManagerCallback> mManagerCallback;
    };

    status_t checkPort(const AudioFlinger::PatchPanel::Patch& patch,
    status_t checkPort(const IAfPatchPanel::Patch& patch,
            const struct audio_port_config *port, sp<IAfEffectHandle> *handle);

    const AudioDeviceTypeAddr mDevice;
Loading