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 /services/audiopolicy/service/AudioPolicyService.h | |
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 'services/audiopolicy/service/AudioPolicyService.h')
-rw-r--r-- | services/audiopolicy/service/AudioPolicyService.h | 55 |
1 files changed, 49 insertions, 6 deletions
diff --git a/services/audiopolicy/service/AudioPolicyService.h b/services/audiopolicy/service/AudioPolicyService.h index 9b17a26..01e0e5e 100644 --- a/services/audiopolicy/service/AudioPolicyService.h +++ b/services/audiopolicy/service/AudioPolicyService.h @@ -204,6 +204,13 @@ public: virtual status_t setEffectSessionCallbacksEnabled(bool enabled); + virtual status_t addOutputSessionEffects(audio_io_handle_t output, + audio_stream_type_t stream, + audio_session_t session, + audio_output_flags_t flags, + audio_channel_mask_t channelMask, + uid_t uid); + status_t doStartOutput(audio_io_handle_t output, audio_stream_type_t stream, audio_session_t session); @@ -232,9 +239,15 @@ public: void doOnDynamicPolicyMixStateUpdate(String8 regId, int32_t state); 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); void doOnOutputSessionEffectsUpdate(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); void releaseOutputSessionEffectsDelayed(audio_io_handle_t output, audio_stream_type_t stream, audio_unique_id_t sessionId, @@ -274,6 +287,7 @@ private: DYN_POLICY_MIX_STATE_UPDATE, EFFECT_SESSION_UPDATE, RELEASE_OUTPUT_SESSION_EFFECTS, + ADD_OUTPUT_SESSION_EFFECTS }; AudioCommandThread (String8 name, const wp<AudioPolicyService>& service); @@ -317,11 +331,21 @@ private: void dynamicPolicyMixStateUpdateCommand(String8 regId, int32_t state); void insertCommand_l(AudioCommand *command, int delayMs = 0); void effectSessionUpdateCommand(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); void releaseOutputSessionEffectsCommand(audio_io_handle_t output, audio_stream_type_t stream, audio_unique_id_t sessionId, int delayMs = 0); + status_t addOutputSessionEffectsCommand(audio_io_handle_t output, + audio_stream_type_t stream, + audio_session_t sessionId, + audio_output_flags_t flags, + audio_channel_mask_t channelMask, + uid_t uid); + private: class AudioCommandData; @@ -421,7 +445,10 @@ private: class EffectSessionUpdateData : public AudioCommandData { public: audio_stream_type_t mStream; - audio_unique_id_t mSessionId; + audio_session_t mSessionId; + audio_output_flags_t mFlags; + audio_channel_mask_t mChannelMask; + uid_t mUid; bool mAdded; }; @@ -432,6 +459,16 @@ private: audio_unique_id_t mSessionId; }; + class AddOutputSessionEffectsData : public AudioCommandData { + public: + audio_io_handle_t mOutput; + audio_stream_type_t mStream; + audio_session_t mSessionId; + audio_output_flags_t mFlags; + audio_channel_mask_t mChannelMask; + uid_t mUid; + }; + Mutex mLock; Condition mWaitWorkCV; Vector < sp<AudioCommand> > mAudioCommands; // list of pending commands @@ -542,7 +579,10 @@ private: virtual audio_unique_id_t newAudioUniqueId(); virtual 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); private: AudioPolicyService *mAudioPolicyService; @@ -562,7 +602,10 @@ private: void setAudioPortCallbacksEnabled(bool enabled); void setEffectSessionCallbacksEnabled(bool enabled); 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); // IBinder::DeathRecipient virtual void binderDied(const wp<IBinder>& who); |