summaryrefslogtreecommitdiffstats
path: root/media/libmedia/AudioSystem.cpp
diff options
context:
space:
mode:
authorJean-Michel Trivi <jmtrivi@google.com>2015-04-23 18:41:29 -0700
committerJean-Michel Trivi <jmtrivi@google.com>2015-04-29 17:54:12 -0700
commitf613d42b12389335b2ecf06df18d0d095d6bfd44 (patch)
treeb36177007932b781d9db2bb973cb2feaab3cde13 /media/libmedia/AudioSystem.cpp
parentdae24729d0b3ced8c4a7d7f9b631e852f564db4f (diff)
downloadframeworks_av-f613d42b12389335b2ecf06df18d0d095d6bfd44.zip
frameworks_av-f613d42b12389335b2ecf06df18d0d095d6bfd44.tar.gz
frameworks_av-f613d42b12389335b2ecf06df18d0d095d6bfd44.tar.bz2
AudioSystem callback for dynamic policy mix activity
Add method to AudioPolicyServiceClient for dynamic policy mix activity notification. Propagate notification to a dedicated callback. Bug 20226914 Change-Id: I37928ed38e15ea2b8fed022cccadeca8c4d6c876
Diffstat (limited to 'media/libmedia/AudioSystem.cpp')
-rw-r--r--media/libmedia/AudioSystem.cpp22
1 files changed, 19 insertions, 3 deletions
diff --git a/media/libmedia/AudioSystem.cpp b/media/libmedia/AudioSystem.cpp
index 2ed50e8..97fb841 100644
--- a/media/libmedia/AudioSystem.cpp
+++ b/media/libmedia/AudioSystem.cpp
@@ -37,6 +37,7 @@ Mutex AudioSystem::gLockAPS;
sp<IAudioFlinger> AudioSystem::gAudioFlinger;
sp<AudioSystem::AudioFlingerClient> AudioSystem::gAudioFlingerClient;
audio_error_callback AudioSystem::gAudioErrorCallback = NULL;
+dynamic_policy_callback AudioSystem::gDynPolicyCallback = NULL;
// Cached values for output handles
DefaultKeyedVector<audio_io_handle_t, AudioSystem::OutputDescriptor *> AudioSystem::gOutputs(NULL);
@@ -536,12 +537,18 @@ void AudioSystem::AudioFlingerClient::ioConfigChanged(int event, audio_io_handle
}
}
-void AudioSystem::setErrorCallback(audio_error_callback cb)
+/*static*/ void AudioSystem::setErrorCallback(audio_error_callback cb)
{
Mutex::Autolock _l(gLock);
gAudioErrorCallback = cb;
}
+/*static*/ void AudioSystem::setDynPolicyCallback(dynamic_policy_callback cb)
+{
+ Mutex::Autolock _l(gLock);
+ gDynPolicyCallback = cb;
+}
+
// client singleton for AudioPolicyService binder interface
// protected by gLockAPS
sp<IAudioPolicyService> AudioSystem::gAudioPolicyService;
@@ -941,6 +948,7 @@ status_t AudioSystem::addAudioPortCallback(const sp<AudioPortCallback>& callBack
return gAudioPolicyServiceClient->addAudioPortCallback(callBack);
}
+/*static*/
status_t AudioSystem::removeAudioPortCallback(const sp<AudioPortCallback>& callBack)
{
const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
@@ -953,7 +961,6 @@ status_t AudioSystem::removeAudioPortCallback(const sp<AudioPortCallback>& callB
return gAudioPolicyServiceClient->removeAudioPortCallback(callBack);
}
-
status_t AudioSystem::acquireSoundTriggerSession(audio_session_t *session,
audio_io_handle_t *ioHandle,
audio_devices_t *device)
@@ -1051,7 +1058,16 @@ void AudioSystem::AudioPolicyServiceClient::onAudioPatchListUpdate()
void AudioSystem::AudioPolicyServiceClient::onDynamicPolicyMixStateUpdate(
String8 regId, int32_t state)
{
- ALOGV("TODO propagate onDynamicPolicyMixStateUpdate(%s, %d)", regId.string(), state);
+ ALOGV("AudioPolicyServiceClient::onDynamicPolicyMixStateUpdate(%s, %d)", regId.string(), state);
+ dynamic_policy_callback cb = NULL;
+ {
+ Mutex::Autolock _l(AudioSystem::gLock);
+ cb = gDynPolicyCallback;
+ }
+
+ if (cb != NULL) {
+ cb(DYNAMIC_POLICY_EVENT_MIX_STATE_UPDATE, regId, state);
+ }
}
void AudioSystem::AudioPolicyServiceClient::binderDied(const wp<IBinder>& who __unused)