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

Commit b57604f5 authored by Eric Laurent's avatar Eric Laurent Committed by Andy Hung
Browse files

Spatializer: enforce only one client registered

Make sure that only one client can successfully obtain an
ISpatializer control interface to the native Spatializer controller.
Do not reject the same callback being registered twice (NOOP).

Bug: 244427550
Test: manual spatial audio regression
Merged-In: I3e3cbc5340a6e9f07359786cc931875a55e1f048
Change-Id: I3e3cbc5340a6e9f07359786cc931875a55e1f048
(cherry picked from commit d6bee3a2)
parent 441b487e
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -516,7 +516,8 @@ void AudioPolicyService::onCheckSpatializer_l()

void AudioPolicyService::doOnCheckSpatializer()
{
    ALOGI("%s mSpatializer %p level %d", __func__, mSpatializer.get(), (int)mSpatializer->getLevel());
    ALOGV("%s mSpatializer %p level %d",
        __func__, mSpatializer.get(), (int)mSpatializer->getLevel());

    if (mSpatializer != nullptr) {
        // Note: mSpatializer != nullptr =>  mAudioPolicyManager != nullptr
+11 −0
Original line number Diff line number Diff line
@@ -373,6 +373,17 @@ status_t Spatializer::registerCallback(
        return BAD_VALUE;
    }

    if (mSpatializerCallback != nullptr) {
        if (IInterface::asBinder(callback) == IInterface::asBinder(mSpatializerCallback)) {
            ALOGW("%s: Registering callback %p again",
                __func__, mSpatializerCallback.get());
            return NO_ERROR;
        }
        ALOGE("%s: Already one client registered with callback %p",
            __func__, mSpatializerCallback.get());
        return INVALID_OPERATION;
    }

    sp<IBinder> binder = IInterface::asBinder(callback);
    status_t status = binder->linkToDeath(this);
    if (status == NO_ERROR) {