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

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

Merge "reduce number of binder calls from mediaserver" into mnc-dev

parents 064b2bf7 e8726fea
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -408,8 +408,8 @@ private:
        AudioPolicyServiceClient() {
        }

        status_t addAudioPortCallback(const sp<AudioPortCallback>& callback);
        status_t removeAudioPortCallback(const sp<AudioPortCallback>& callback);
        int addAudioPortCallback(const sp<AudioPortCallback>& callback);
        int removeAudioPortCallback(const sp<AudioPortCallback>& callback);

        // DeathRecipient
        virtual void binderDied(const wp<IBinder>& who);
+2 −0
Original line number Diff line number Diff line
@@ -149,6 +149,8 @@ public:

    virtual void registerClient(const sp<IAudioPolicyServiceClient>& client) = 0;

    virtual void setAudioPortCallbacksEnabled(bool enabled) = 0;

    virtual status_t acquireSoundTriggerSession(audio_session_t *session,
                                           audio_io_handle_t *ioHandle,
                                           audio_devices_t *device) = 0;
+16 −8
Original line number Diff line number Diff line
@@ -1043,7 +1043,11 @@ status_t AudioSystem::addAudioPortCallback(const sp<AudioPortCallback>& callback
    if (gAudioPolicyServiceClient == 0) {
        return NO_INIT;
    }
    return gAudioPolicyServiceClient->addAudioPortCallback(callback);
    int ret = gAudioPolicyServiceClient->addAudioPortCallback(callback);
    if (ret == 1) {
        aps->setAudioPortCallbacksEnabled(true);
    }
    return (ret < 0) ? INVALID_OPERATION : NO_ERROR;
}

/*static*/
@@ -1056,7 +1060,11 @@ status_t AudioSystem::removeAudioPortCallback(const sp<AudioPortCallback>& callb
    if (gAudioPolicyServiceClient == 0) {
        return NO_INIT;
    }
    return gAudioPolicyServiceClient->removeAudioPortCallback(callback);
    int ret = gAudioPolicyServiceClient->removeAudioPortCallback(callback);
    if (ret == 0) {
        aps->setAudioPortCallbacksEnabled(false);
    }
    return (ret < 0) ? INVALID_OPERATION : NO_ERROR;
}

status_t AudioSystem::addAudioDeviceCallback(
@@ -1138,20 +1146,20 @@ status_t AudioSystem::stopAudioSource(audio_io_handle_t handle)

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

status_t AudioSystem::AudioPolicyServiceClient::addAudioPortCallback(
int AudioSystem::AudioPolicyServiceClient::addAudioPortCallback(
        const sp<AudioPortCallback>& callback)
{
    Mutex::Autolock _l(mLock);
    for (size_t i = 0; i < mAudioPortCallbacks.size(); i++) {
        if (mAudioPortCallbacks[i] == callback) {
            return INVALID_OPERATION;
            return -1;
        }
    }
    mAudioPortCallbacks.add(callback);
    return NO_ERROR;
    return mAudioPortCallbacks.size();
}

status_t AudioSystem::AudioPolicyServiceClient::removeAudioPortCallback(
int AudioSystem::AudioPolicyServiceClient::removeAudioPortCallback(
        const sp<AudioPortCallback>& callback)
{
    Mutex::Autolock _l(mLock);
@@ -1162,10 +1170,10 @@ status_t AudioSystem::AudioPolicyServiceClient::removeAudioPortCallback(
        }
    }
    if (i == mAudioPortCallbacks.size()) {
        return INVALID_OPERATION;
        return -1;
    }
    mAudioPortCallbacks.removeAt(i);
    return NO_ERROR;
    return mAudioPortCallbacks.size();
}


+16 −1
Original line number Diff line number Diff line
@@ -72,7 +72,8 @@ enum {
    GET_PHONE_STATE,
    REGISTER_POLICY_MIXES,
    START_AUDIO_SOURCE,
    STOP_AUDIO_SOURCE
    STOP_AUDIO_SOURCE,
    SET_AUDIO_PORT_CALLBACK_ENABLED,
};

#define MAX_ITEMS_PER_LIST 1024
@@ -646,6 +647,14 @@ public:
        remote()->transact(REGISTER_CLIENT, data, &reply);
    }

    virtual void setAudioPortCallbacksEnabled(bool enabled)
    {
        Parcel data, reply;
        data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
        data.writeInt32(enabled ? 1 : 0);
        remote()->transact(SET_AUDIO_PORT_CALLBACK_ENABLED, data, &reply);
    }

    virtual status_t acquireSoundTriggerSession(audio_session_t *session,
                                            audio_io_handle_t *ioHandle,
                                            audio_devices_t *device)
@@ -1219,6 +1228,12 @@ status_t BnAudioPolicyService::onTransact(
            return NO_ERROR;
        } break;

        case SET_AUDIO_PORT_CALLBACK_ENABLED: {
            CHECK_INTERFACE(IAudioPolicyService, data, reply);
            setAudioPortCallbacksEnabled(data.readInt32() == 1);
            return NO_ERROR;
        } break;

        case ACQUIRE_SOUNDTRIGGER_SESSION: {
            CHECK_INTERFACE(IAudioPolicyService, data, reply);
            sp<IAudioPolicyServiceClient> client = interface_cast<IAudioPolicyServiceClient>(
+12 −3
Original line number Diff line number Diff line
@@ -530,7 +530,7 @@ AudioFlinger::ThreadBase::ThreadBase(const sp<AudioFlinger>& audioFlinger, audio
        // RecordThread::readInputParameters_l()
        //FIXME: mStandby should be true here. Is this some kind of hack?
        mStandby(false), mOutDevice(outDevice), mInDevice(inDevice),
        mAudioSource(AUDIO_SOURCE_DEFAULT), mId(id),
        mPrevInDevice(AUDIO_DEVICE_NONE), mAudioSource(AUDIO_SOURCE_DEFAULT), mId(id),
        // mName will be set by concrete (non-virtual) subclass
        mDeathRecipient(new PMDeathRecipient(this)),
        mSystemReady(systemReady)
@@ -3131,6 +3131,7 @@ status_t AudioFlinger::PlaybackThread::createAudioPatch_l(const struct audio_pat
    for (size_t i = 0; i < mEffectChains.size(); i++) {
        mEffectChains[i]->setDevice_l(type);
    }
    bool configChanged = mOutDevice != type;
    mOutDevice = type;
    mPatch = *patch;

@@ -3159,7 +3160,9 @@ status_t AudioFlinger::PlaybackThread::createAudioPatch_l(const struct audio_pat
                param.toString().string());
        *handle = AUDIO_PATCH_HANDLE_NONE;
    }
    if (configChanged) {
        sendIoConfigEvent_l(AUDIO_OUTPUT_CONFIG_CHANGED);
    }
    return status;
}

@@ -6796,6 +6799,9 @@ bool AudioFlinger::RecordThread::checkForNewParameter_l(const String8& keyValueP
            status = BAD_VALUE;
        } else {
            mInDevice = value;
            if (value != AUDIO_DEVICE_NONE) {
                mPrevInDevice = value;
            }
            // disable AEC and NS if the device is a BT SCO headset supporting those
            // pre processings
            if (mTracks.size() > 0) {
@@ -7079,7 +7085,10 @@ status_t AudioFlinger::RecordThread::createAudioPatch_l(const struct audio_patch
        *handle = AUDIO_PATCH_HANDLE_NONE;
    }

    if (mInDevice != mPrevInDevice) {
        sendIoConfigEvent_l(AUDIO_INPUT_CONFIG_CHANGED);
        mPrevInDevice = mInDevice;
    }

    return status;
}
Loading