diff options
author | Eric Laurent <elaurent@google.com> | 2014-05-20 11:27:36 -0700 |
---|---|---|
committer | Eric Laurent <elaurent@google.com> | 2014-05-29 18:01:58 -0700 |
commit | b52c152d553556b2d227ffc943489de0c60b4b02 (patch) | |
tree | bcaca952efbd1ffa7eefa7251beafc3d2574a04a /include/media | |
parent | 6a94d69dc4f32abb53c466a96f905bb199be6417 (diff) | |
download | frameworks_av-b52c152d553556b2d227ffc943489de0c60b4b02.zip frameworks_av-b52c152d553556b2d227ffc943489de0c60b4b02.tar.gz frameworks_av-b52c152d553556b2d227ffc943489de0c60b4b02.tar.bz2 |
audio policy: add routing update client interface
Added IAudioPolicyServiceClient client binder interface
for client process to receive notifications from AudioPolicyService
when audio ports are added/removed or audio patches created/released.
The audio patches owned by a given client are automatically released when
this client binder dies.
Bug: 14815883.
Change-Id: I6013f6aec03b50565cffb1ad2cd1f0f8852032c5
Diffstat (limited to 'include/media')
-rw-r--r-- | include/media/AudioSystem.h | 25 | ||||
-rw-r--r-- | include/media/IAudioPolicyService.h | 2 | ||||
-rw-r--r-- | include/media/IAudioPolicyServiceClient.h | 56 |
3 files changed, 82 insertions, 1 deletions
diff --git a/include/media/AudioSystem.h b/include/media/AudioSystem.h index a79a9ff..6fe0c7f 100644 --- a/include/media/AudioSystem.h +++ b/include/media/AudioSystem.h @@ -19,6 +19,7 @@ #include <hardware/audio_effect.h> #include <media/IAudioFlingerClient.h> +#include <media/IAudioPolicyServiceClient.h> #include <system/audio.h> #include <system/audio_policy.h> #include <utils/Errors.h> @@ -301,6 +302,21 @@ public: // ---------------------------------------------------------------------------- + class AudioPortCallback : public RefBase + { + public: + + AudioPortCallback() {} + virtual ~AudioPortCallback() {} + + virtual void onAudioPortListUpdate() = 0; + virtual void onAudioPatchListUpdate() = 0; + virtual void onServiceDied() = 0; + + }; + + static void setAudioPortCallback(sp<AudioPortCallback> callBack); + private: class AudioFlingerClient: public IBinder::DeathRecipient, public BnAudioFlingerClient @@ -319,7 +335,8 @@ private: virtual void ioConfigChanged(int event, audio_io_handle_t ioHandle, const void *param2); }; - class AudioPolicyServiceClient: public IBinder::DeathRecipient + class AudioPolicyServiceClient: public IBinder::DeathRecipient, + public BnAudioPolicyServiceClient { public: AudioPolicyServiceClient() { @@ -327,6 +344,10 @@ private: // DeathRecipient virtual void binderDied(const wp<IBinder>& who); + + // IAudioPolicyServiceClient + virtual void onAudioPortListUpdate(); + virtual void onAudioPatchListUpdate(); }; static sp<AudioFlingerClient> gAudioFlingerClient; @@ -349,6 +370,8 @@ private: // list of output descriptors containing cached parameters // (sampling rate, framecount, channel count...) static DefaultKeyedVector<audio_io_handle_t, OutputDescriptor *> gOutputs; + + static sp<AudioPortCallback> gAudioPortCallback; }; }; // namespace android diff --git a/include/media/IAudioPolicyService.h b/include/media/IAudioPolicyService.h index 6b6df6e..d422aa3 100644 --- a/include/media/IAudioPolicyService.h +++ b/include/media/IAudioPolicyService.h @@ -25,6 +25,7 @@ #include <utils/Errors.h> #include <binder/IInterface.h> #include <media/AudioSystem.h> +#include <media/IAudioPolicyServiceClient.h> #include <system/audio_policy.h> @@ -124,6 +125,7 @@ public: /* Set audio port configuration */ virtual status_t setAudioPortConfig(const struct audio_port_config *config) = 0; + virtual void registerClient(const sp<IAudioPolicyServiceClient>& client) = 0; }; diff --git a/include/media/IAudioPolicyServiceClient.h b/include/media/IAudioPolicyServiceClient.h new file mode 100644 index 0000000..59df046 --- /dev/null +++ b/include/media/IAudioPolicyServiceClient.h @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ANDROID_IAUDIOPOLICYSERVICECLIENT_H +#define ANDROID_IAUDIOPOLICYSERVICECLIENT_H + + +#include <utils/RefBase.h> +#include <binder/IInterface.h> +#include <system/audio.h> + +namespace android { + +// ---------------------------------------------------------------------------- + +class IAudioPolicyServiceClient : public IInterface +{ +public: + DECLARE_META_INTERFACE(AudioPolicyServiceClient); + + // Notifies a change of audio port configuration. + virtual void onAudioPortListUpdate() = 0; + // Notifies a change of audio patch configuration. + virtual void onAudioPatchListUpdate() = 0; +}; + + +// ---------------------------------------------------------------------------- + +class BnAudioPolicyServiceClient : public BnInterface<IAudioPolicyServiceClient> +{ +public: + virtual status_t onTransact( uint32_t code, + const Parcel& data, + Parcel* reply, + uint32_t flags = 0); +}; + +// ---------------------------------------------------------------------------- + +}; // namespace android + +#endif // ANDROID_IAUDIOPOLICYSERVICECLIENT_H |