diff options
author | Steve Kondik <steve@cyngn.com> | 2016-04-06 18:35:02 -0700 |
---|---|---|
committer | Steve Kondik <steve@cyngn.com> | 2016-04-07 15:19:57 -0700 |
commit | a4123803d0a0e9e0c69faa4207d357cc74a65d58 (patch) | |
tree | 336ade2306784822373a6a18023136090dd6d343 /media/libmedia | |
parent | e13b58b988ab642d4ae5ca6d0a89013510714956 (diff) | |
download | frameworks_av-a4123803d0a0e9e0c69faa4207d357cc74a65d58.zip frameworks_av-a4123803d0a0e9e0c69faa4207d357cc74a65d58.tar.gz frameworks_av-a4123803d0a0e9e0c69faa4207d357cc74a65d58.tar.bz2 |
audiopolicy: Be a little smarter with auto-attach
* The edge cases, ZOMG!
* Instead of relying on effects to be automatically attached, let's
just always notify userspace and send a bit more information. This
lets the application decide if effects should be attached rather
than relying on a hard-coded configuration file.
* Perform the setup in getOutputForAttr, but do it on the command
thread so we don't block the client.
OPO-593
Change-Id: I3900b349f2e895d51fa3a3dcc2de0c4bdf6dbc08
Diffstat (limited to 'media/libmedia')
-rw-r--r-- | media/libmedia/AudioSystem.cpp | 6 | ||||
-rw-r--r-- | media/libmedia/IAudioPolicyServiceClient.cpp | 15 |
2 files changed, 16 insertions, 5 deletions
diff --git a/media/libmedia/AudioSystem.cpp b/media/libmedia/AudioSystem.cpp index 10ec495..5bd8747 100644 --- a/media/libmedia/AudioSystem.cpp +++ b/media/libmedia/AudioSystem.cpp @@ -1239,7 +1239,9 @@ void AudioSystem::AudioPolicyServiceClient::onDynamicPolicyMixStateUpdate( } void AudioSystem::AudioPolicyServiceClient::onOutputSessionEffectsUpdate( - audio_stream_type_t stream, audio_unique_id_t sessionId, bool added) + audio_stream_type_t stream, audio_session_t sessionId, + audio_output_flags_t flags, audio_channel_mask_t channelMask, + uid_t uid, bool added) { ALOGV("AudioPolicyServiceClient::onOutputSessionEffectsUpdate(%d, %d, %d)", stream, sessionId, added); effect_session_callback cb = NULL; @@ -1249,7 +1251,7 @@ void AudioSystem::AudioPolicyServiceClient::onOutputSessionEffectsUpdate( } if (cb != NULL) { - cb(AUDIO_OUTPUT_SESSION_EFFECTS_UPDATE, stream, sessionId, added); + cb(AUDIO_OUTPUT_SESSION_EFFECTS_UPDATE, stream, sessionId, flags, channelMask, uid, added); } } diff --git a/media/libmedia/IAudioPolicyServiceClient.cpp b/media/libmedia/IAudioPolicyServiceClient.cpp index d6207ce..ecf0d1f 100644 --- a/media/libmedia/IAudioPolicyServiceClient.cpp +++ b/media/libmedia/IAudioPolicyServiceClient.cpp @@ -66,12 +66,18 @@ public: } void onOutputSessionEffectsUpdate(audio_stream_type_t stream, - audio_unique_id_t sessionId, bool added) + audio_session_t sessionId, + audio_output_flags_t flags, + audio_channel_mask_t channelMask, + uid_t uid, bool added) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyServiceClient::getInterfaceDescriptor()); data.writeInt32(stream); data.writeInt32(sessionId); + data.writeInt32(flags); + data.writeInt32(channelMask); + data.writeInt32(uid); data.writeInt32(added ? 1 : 0); remote()->transact(OUTPUT_SESSION_EFFECTS_UPDATE, data, &reply, IBinder::FLAG_ONEWAY); } @@ -105,9 +111,12 @@ status_t BnAudioPolicyServiceClient::onTransact( case OUTPUT_SESSION_EFFECTS_UPDATE: { CHECK_INTERFACE(IAudioPolicyServiceClient, data, reply); audio_stream_type_t stream = static_cast<audio_stream_type_t>(data.readInt32()); - audio_unique_id_t sessionId = static_cast<audio_unique_id_t>(data.readInt32()); + audio_session_t sessionId = static_cast<audio_session_t>(data.readInt32()); + audio_output_flags_t flags = static_cast<audio_output_flags_t>(data.readInt32()); + audio_channel_mask_t channelMask = static_cast<audio_channel_mask_t>(data.readInt32()); + uid_t uid = static_cast<uid_t>(data.readInt32()); bool added = data.readInt32() > 0; - onOutputSessionEffectsUpdate(stream, sessionId, added); + onOutputSessionEffectsUpdate(stream, sessionId, flags, channelMask, uid, added); return NO_ERROR; } default: |