summaryrefslogtreecommitdiffstats
path: root/services/audiopolicy/service/AudioPolicyService.h
diff options
context:
space:
mode:
authorSteve Kondik <steve@cyngn.com>2016-04-06 18:35:02 -0700
committerSteve Kondik <steve@cyngn.com>2016-04-07 15:19:57 -0700
commita4123803d0a0e9e0c69faa4207d357cc74a65d58 (patch)
tree336ade2306784822373a6a18023136090dd6d343 /services/audiopolicy/service/AudioPolicyService.h
parente13b58b988ab642d4ae5ca6d0a89013510714956 (diff)
downloadframeworks_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.h55
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);