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

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

Merge "audio policy: fix several device descriptor issues." into mnc-dev

parents 1ad56353 cc750d36
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@ public:

    virtual void toAudioPort(struct audio_port *port) const;

    void importAudioPort(const sp<AudioPort> port);
    virtual void importAudioPort(const sp<AudioPort> port);
    void clearCapabilities();

    void loadSamplingRates(char *name);
+1 −0
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ public:
    virtual void attach(const sp<HwModule>& module);
    virtual void loadGains(cnode *root);
    virtual void toAudioPort(struct audio_port *port) const;
    virtual void importAudioPort(const sp<AudioPort> port);

    audio_port_handle_t getId() const;
    audio_devices_t type() const { return mDeviceType; }
+0 −16
Original line number Diff line number Diff line
@@ -151,28 +151,12 @@ void AudioPort::importAudioPort(const sp<AudioPort> port) {
            }
        }
    }
    for (size_t k = 0 ; k < port->mGains.size() ; k++) {
        sp<AudioGain> gain = port->mGains.itemAt(k);
        if (gain != 0) {
            bool hasGain = false;
            for (size_t l = 0 ; l < mGains.size() ; l++) {
                if (gain == mGains.itemAt(l)) {
                    hasGain = true;
                    break;
                }
            }
            if (!hasGain) { // never import a gain twice
                mGains.add(gain);
            }
        }
    }
}

void AudioPort::clearCapabilities() {
    mChannelMasks.clear();
    mFormats.clear();
    mSamplingRates.clear();
    mGains.clear();
}

void AudioPort::loadSamplingRates(char *name)
+7 −0
Original line number Diff line number Diff line
@@ -301,6 +301,13 @@ void DeviceDescriptor::toAudioPort(struct audio_port *port) const
    strncpy(port->ext.device.address, mAddress.string(), AUDIO_DEVICE_MAX_ADDRESS_LEN);
}

void DeviceDescriptor::importAudioPort(const sp<AudioPort> port) {
    AudioPort::importAudioPort(port);
    mSamplingRate = port->pickSamplingRate();
    mFormat = port->pickFormat();
    mChannelMask = port->pickChannelMask();
}

status_t DeviceDescriptor::dump(int fd, int spaces, int index) const
{
    const size_t SIZE = 256;
+11 −3
Original line number Diff line number Diff line
@@ -3140,8 +3140,11 @@ status_t AudioPolicyManager::checkOutputsForDevice(const sp<DeviceDescriptor> de
{
    audio_devices_t device = devDesc->type();
    sp<SwAudioOutputDescriptor> desc;

    if (audio_device_is_digital(device)) {
        // erase all current sample rates, formats and channel masks
        devDesc->clearCapabilities();
    }

    if (state == AUDIO_POLICY_DEVICE_STATE_AVAILABLE) {
        // first list already open outputs that can be routed to this device
@@ -3433,8 +3436,13 @@ status_t AudioPolicyManager::checkInputsForDevice(const sp<DeviceDescriptor> dev
                                                  const String8 address)
{
    audio_devices_t device = devDesc->type();

    sp<AudioInputDescriptor> desc;

    if (audio_device_is_digital(device)) {
        // erase all current sample rates, formats and channel masks
        devDesc->clearCapabilities();
    }

    if (state == AUDIO_POLICY_DEVICE_STATE_AVAILABLE) {
        // first list already open inputs that can be routed to this device
        for (size_t input_index = 0; input_index < mInputs.size(); input_index++) {