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

Commit 5cd72d8b authored by Mikhail Naganov's avatar Mikhail Naganov
Browse files

audiopolicy: Fix null port handling in AudioOutputDescriptor

AudioOutputDescriptor can be created with a null port
for a duplicated output descriptor (see
AudioPolicyManager::checkOutputsForDevice). There used to be
a check for null port in getModuleHandle method prior to
ag/Ie90943ee3102cdb8adf89fdd2addd2c279b1e5bf. Restoring
the null check to prevent crash in getModuleHandle.

Bug: 63715585
Change-Id: If3f9563c58cd44ac95c8e27e0560375a404e5db6
Test: make
parent 13e4dad5
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -46,17 +46,17 @@ AudioOutputDescriptor::AudioOutputDescriptor(const sp<AudioPort>& port,
    for (int i = 0; i < NUM_STRATEGIES; i++) {
        mStrategyMutedByDevice[i] = false;
    }
    if (port != NULL) {
        port->pickAudioProfile(mSamplingRate, mChannelMask, mFormat);
        if (port->mGains.size() > 0) {
            port->mGains[0]->getDefaultConfig(&mGain);
    if (mPort.get() != nullptr) {
        mPort->pickAudioProfile(mSamplingRate, mChannelMask, mFormat);
        if (mPort->mGains.size() > 0) {
            mPort->mGains[0]->getDefaultConfig(&mGain);
        }
    }
}

audio_module_handle_t AudioOutputDescriptor::getModuleHandle() const
{
    return mPort->getModuleHandle();
    return mPort.get() != nullptr ? mPort->getModuleHandle() : AUDIO_MODULE_HANDLE_NONE;
}

audio_port_handle_t AudioOutputDescriptor::getId() const
@@ -175,9 +175,9 @@ void AudioOutputDescriptor::toAudioPortConfig(
    dstConfig->ext.mix.usecase.stream = AUDIO_STREAM_DEFAULT;
}

void AudioOutputDescriptor::toAudioPort(
                                                    struct audio_port *port) const
void AudioOutputDescriptor::toAudioPort(struct audio_port *port) const
{
    // Should not be called for duplicated ports, see SwAudioOutputDescriptor::toAudioPortConfig.
    mPort->toAudioPort(port);
    port->id = mId;
    port->ext.mix.hw_module = getModuleHandle();