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

Commit 9914f488 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Recover from DEAD_OBJECT in AudioSystem::initStreamVolume" into tm-dev...

Merge "Recover from DEAD_OBJECT in AudioSystem::initStreamVolume" into tm-dev am: fbf3c35f am: 05a34479

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/av/+/18193744



Change-Id: I40bdaffea0e6b65b541e58761f37da5400b7b9e0
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 284808cf 05a34479
Loading
Loading
Loading
Loading
+15 −9
Original line number Diff line number Diff line
@@ -832,6 +832,11 @@ const sp<IAudioPolicyService> AudioSystem::get_audio_policy_service() {
    return ap;
}

void AudioSystem::clearAudioPolicyService() {
    Mutex::Autolock _l(gLockAPS);
    gAudioPolicyService.clear();
}

// ---------------------------------------------------------------------------

void AudioSystem::onNewAudioModulesAvailable() {
@@ -1150,8 +1155,15 @@ status_t AudioSystem::initStreamVolume(audio_stream_type_t stream,
            legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
    int32_t indexMinAidl = VALUE_OR_RETURN_STATUS(convertIntegral<int32_t>(indexMin));
    int32_t indexMaxAidl = VALUE_OR_RETURN_STATUS(convertIntegral<int32_t>(indexMax));
    return statusTFromBinderStatus(
    status_t status = statusTFromBinderStatus(
            aps->initStreamVolume(streamAidl, indexMinAidl, indexMaxAidl));
    if (status == DEAD_OBJECT) {
        // This is a critical operation since w/o proper stream volumes no audio
        // will be heard. Make sure we recover from a failure in any case.
        ALOGE("Received DEAD_OBJECT from APS, clearing the client");
        clearAudioPolicyService();
    }
    return status;
}

status_t AudioSystem::setStreamVolumeIndex(audio_stream_type_t stream,
@@ -1412,10 +1424,7 @@ void AudioSystem::clearAudioConfigCache() {
        }
        gAudioFlinger.clear();
    }
    {
        Mutex::Autolock _l(gLockAPS);
        gAudioPolicyService.clear();
    }
    clearAudioPolicyService();
}

status_t AudioSystem::setSupportedSystemUsages(const std::vector<audio_usage_t>& systemUsages) {
@@ -2603,10 +2612,7 @@ void AudioSystem::AudioPolicyServiceClient::binderDied(const wp<IBinder>& who __
            mAudioVolumeGroupCallback[i]->onServiceDied();
        }
    }
    {
        Mutex::Autolock _l(gLockAPS);
        AudioSystem::gAudioPolicyService.clear();
    }
    AudioSystem::clearAudioPolicyService();

    ALOGW("AudioPolicyService server died!");
}
+1 −0
Original line number Diff line number Diff line
@@ -350,6 +350,7 @@ public:
    static void clearAudioConfigCache();

    static const sp<media::IAudioPolicyService> get_audio_policy_service();
    static void clearAudioPolicyService();

    // helpers for android.media.AudioManager.getProperty(), see description there for meaning
    static uint32_t getPrimaryOutputSamplingRate();