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

Commit 52b0bd58 authored by Eric Laurent's avatar Eric Laurent
Browse files

AudioPolicyService: add check when creating the spatializer

Add a null pointer check on mAudioPolicyManager before calling
canBeVirtualized() in onFirstRef() to avoid continuous audioserver
crashes when a failure to init the audio HAL occurs.

Bug: 201230333
Test: make and boot
Change-Id: Idcf21e3ac2e6e3fdbdcb4f68217abdc15f9166e5
parent cbf8ae96
Loading
Loading
Loading
Loading
+9 −5
Original line number Original line Diff line number Diff line
@@ -142,12 +142,15 @@ void AudioPolicyService::onFirstRef()
    sensorPrivacyPolicy->registerSelf();
    sensorPrivacyPolicy->registerSelf();


    // Create spatializer if supported
    // Create spatializer if supported
    if (mAudioPolicyManager != nullptr) {
        Mutex::Autolock _l(mLock);
        const audio_attributes_t attr = attributes_initializer(AUDIO_USAGE_MEDIA);
        const audio_attributes_t attr = attributes_initializer(AUDIO_USAGE_MEDIA);
        AudioDeviceTypeAddrVector devices;
        AudioDeviceTypeAddrVector devices;
        bool hasSpatializer = mAudioPolicyManager->canBeSpatialized(&attr, nullptr, devices);
        bool hasSpatializer = mAudioPolicyManager->canBeSpatialized(&attr, nullptr, devices);
        if (hasSpatializer) {
        if (hasSpatializer) {
            mSpatializer = Spatializer::create(this);
            mSpatializer = Spatializer::create(this);
        }
        }
    }
    AudioSystem::audioPolicyReady();
    AudioSystem::audioPolicyReady();
}
}


@@ -381,6 +384,7 @@ void AudioPolicyService::doOnCheckSpatializer()
    Mutex::Autolock _l(mLock);
    Mutex::Autolock _l(mLock);


    if (mSpatializer != nullptr) {
    if (mSpatializer != nullptr) {
        // Note: mSpatializer != nullptr =>  mAudioPolicyManager != nullptr
        if (mSpatializer->getLevel() != media::SpatializationLevel::NONE) {
        if (mSpatializer->getLevel() != media::SpatializationLevel::NONE) {
            audio_io_handle_t currentOutput = mSpatializer->getOutput();
            audio_io_handle_t currentOutput = mSpatializer->getOutput();
            audio_io_handle_t newOutput;
            audio_io_handle_t newOutput;