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

Commit fc332471 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "audio policy: fix configurable engine and dynamic policies take 2"

parents 394a80a7 af377778
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -135,10 +135,17 @@ public:
    /**
     * @brief filter the devices supported by this collection against another collection
     * @param devices to filter against
     * @return
     * @return a filtered DeviceVector
     */
    DeviceVector filter(const DeviceVector &devices) const;

    /**
     * @brief filter the devices supported by this collection before sending
     * then to the Engine via AudioPolicyManagerObserver interface
     * @return a filtered DeviceVector
     */
    DeviceVector filterForEngine() const;

    /**
     * @brief merge two vectors. As SortedVector Implementation is buggy (it does not check the size
     * of the destination vector, only of the source, it provides a safe implementation
+12 −0
Original line number Diff line number Diff line
@@ -399,6 +399,18 @@ bool DeviceVector::containsAllDevices(const DeviceVector &devices) const
    return filter(devices).size() == devices.size();
}

DeviceVector DeviceVector::filterForEngine() const
{
    DeviceVector filteredDevices;
    for (const auto &device : *this) {
        if (audio_is_remote_submix_device(device->type()) && device->address() != "0") {
            continue;
        }
        filteredDevices.add(device);
    }
    return filteredDevices;
}

void DeviceDescriptor::log() const
{
    ALOGI("Device id:%d type:0x%08X:%s, addr:%s", mId,  mDeviceType,
+2 −2
Original line number Diff line number Diff line
@@ -46,9 +46,9 @@ public:

    virtual const AudioInputCollection &getInputs() const = 0;

    virtual const DeviceVector &getAvailableOutputDevices() const = 0;
    virtual const DeviceVector getAvailableOutputDevices() const = 0;

    virtual const DeviceVector &getAvailableInputDevices() const = 0;
    virtual const DeviceVector getAvailableInputDevices() const = 0;

    virtual const sp<DeviceDescriptor> &getDefaultOutputDevice() const = 0;

+3 −3
Original line number Diff line number Diff line
@@ -207,7 +207,7 @@ DeviceVector Engine::getDevicesForProductStrategy(product_strategy_t ps) const
        ALOGE("%s: Trying to get device on invalid strategy %d", __FUNCTION__, ps);
        return {};
    }
    const DeviceVector &availableOutputDevices = getApmObserver()->getAvailableOutputDevices();
    const DeviceVector availableOutputDevices = getApmObserver()->getAvailableOutputDevices();
    const SwAudioOutputCollection &outputs = getApmObserver()->getOutputs();
    uint32_t availableOutputDevicesType = availableOutputDevices.types();

@@ -272,7 +272,7 @@ DeviceVector Engine::getOutputDevicesForAttributes(const audio_attributes_t &att
        return DeviceVector(preferredDevice);
    }
    product_strategy_t strategy = getProductStrategyForAttributes(attributes);
    const DeviceVector &availableOutputDevices = getApmObserver()->getAvailableOutputDevices();
    const DeviceVector availableOutputDevices = getApmObserver()->getAvailableOutputDevices();
    const SwAudioOutputCollection &outputs = getApmObserver()->getOutputs();
    //
    // @TODO: what is the priority of explicit routing? Shall it be considered first as it used to
@@ -298,7 +298,7 @@ sp<DeviceDescriptor> Engine::getInputDeviceForAttributes(const audio_attributes_
                                                         sp<AudioPolicyMix> *mix) const
{
    const auto &policyMixes = getApmObserver()->getAudioPolicyMixCollection();
    const auto &availableInputDevices = getApmObserver()->getAvailableInputDevices();
    const auto availableInputDevices = getApmObserver()->getAvailableInputDevices();
    const auto &inputs = getApmObserver()->getInputs();
    std::string address;
    //
+4 −4
Original line number Diff line number Diff line
@@ -502,8 +502,8 @@ audio_devices_t Engine::getDeviceForStrategyInt(legacy_strategy strategy,

audio_devices_t Engine::getDeviceForInputSource(audio_source_t inputSource) const
{
    const DeviceVector &availableOutputDevices = getApmObserver()->getAvailableOutputDevices();
    const DeviceVector &availableInputDevices = getApmObserver()->getAvailableInputDevices();
    const DeviceVector availableOutputDevices = getApmObserver()->getAvailableOutputDevices();
    const DeviceVector availableInputDevices = getApmObserver()->getAvailableInputDevices();
    const SwAudioOutputCollection &outputs = getApmObserver()->getOutputs();
    audio_devices_t availableDeviceTypes = availableInputDevices.types() & ~AUDIO_DEVICE_BIT_IN;

@@ -704,7 +704,7 @@ DeviceVector Engine::getOutputDevicesForAttributes(const audio_attributes_t &att
        return DeviceVector(preferredDevice);
    }
    product_strategy_t strategy = getProductStrategyForAttributes(attributes);
    const DeviceVector &availableOutputDevices = getApmObserver()->getAvailableOutputDevices();
    const DeviceVector availableOutputDevices = getApmObserver()->getAvailableOutputDevices();
    const SwAudioOutputCollection &outputs = getApmObserver()->getOutputs();
    //
    // @TODO: what is the priority of explicit routing? Shall it be considered first as it used to
@@ -730,7 +730,7 @@ sp<DeviceDescriptor> Engine::getInputDeviceForAttributes(const audio_attributes_
                                                         sp<AudioPolicyMix> *mix) const
{
    const auto &policyMixes = getApmObserver()->getAudioPolicyMixCollection();
    const auto &availableInputDevices = getApmObserver()->getAvailableInputDevices();
    const auto availableInputDevices = getApmObserver()->getAvailableInputDevices();
    const auto &inputs = getApmObserver()->getInputs();
    std::string address;

Loading