diff options
author | Eric Laurent <elaurent@google.com> | 2015-06-27 00:16:34 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-06-27 00:16:35 +0000 |
commit | 6705edd4e58c4fcff0cbbff30bacffa561759ba8 (patch) | |
tree | 639d1686cdbb869e6eb673e597a874f838292693 /media | |
parent | 064b2bf712788d30928b9a8bafecd0f3308d7aa4 (diff) | |
parent | e8726fea8a53bf3474aa3c6deaf2f6c1f565e694 (diff) | |
download | frameworks_av-6705edd4e58c4fcff0cbbff30bacffa561759ba8.zip frameworks_av-6705edd4e58c4fcff0cbbff30bacffa561759ba8.tar.gz frameworks_av-6705edd4e58c4fcff0cbbff30bacffa561759ba8.tar.bz2 |
Merge "reduce number of binder calls from mediaserver" into mnc-dev
Diffstat (limited to 'media')
-rw-r--r-- | media/libmedia/AudioSystem.cpp | 24 | ||||
-rw-r--r-- | media/libmedia/IAudioPolicyService.cpp | 17 |
2 files changed, 32 insertions, 9 deletions
diff --git a/media/libmedia/AudioSystem.cpp b/media/libmedia/AudioSystem.cpp index 6c2c226..f13bcf3 100644 --- a/media/libmedia/AudioSystem.cpp +++ b/media/libmedia/AudioSystem.cpp @@ -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(); } diff --git a/media/libmedia/IAudioPolicyService.cpp b/media/libmedia/IAudioPolicyService.cpp index fd18f17..3348441 100644 --- a/media/libmedia/IAudioPolicyService.cpp +++ b/media/libmedia/IAudioPolicyService.cpp @@ -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>( |