diff options
author | Eric Laurent <elaurent@google.com> | 2015-04-21 17:37:00 -0700 |
---|---|---|
committer | Eric Laurent <elaurent@google.com> | 2015-04-30 12:43:06 -0700 |
commit | 8c7e6dac6f5eb38cef627dab92eac8b38513450c (patch) | |
tree | 6aede3a6ac013462a117ffb181d93439525eebeb /services/audiopolicy/managerdefault/AudioPolicyManager.h | |
parent | f62a067a5b21c840c915d36392679346ac0abfd7 (diff) | |
download | frameworks_av-8c7e6dac6f5eb38cef627dab92eac8b38513450c.zip frameworks_av-8c7e6dac6f5eb38cef627dab92eac8b38513450c.tar.gz frameworks_av-8c7e6dac6f5eb38cef627dab92eac8b38513450c.tar.bz2 |
audio policy: session routes continued.
- Clear session routes when client process dies.
- Enforce the route only when the requesting session is active.
- Fix requested route not working if an output mix change is required
(e.g forcing to SPEAKER when the default route is USB or A2DP).
- Make sure all sessions sharing the strategy with a rerouted session
have the same route (needed for volume control consistency)
Change-Id: I0ab347a8fb97e73e2c5965374544c5f4fe509ef1
Diffstat (limited to 'services/audiopolicy/managerdefault/AudioPolicyManager.h')
-rw-r--r-- | services/audiopolicy/managerdefault/AudioPolicyManager.h | 47 |
1 files changed, 31 insertions, 16 deletions
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.h b/services/audiopolicy/managerdefault/AudioPolicyManager.h index b965411..ea16864 100644 --- a/services/audiopolicy/managerdefault/AudioPolicyManager.h +++ b/services/audiopolicy/managerdefault/AudioPolicyManager.h @@ -109,6 +109,7 @@ public: audio_io_handle_t *output, audio_session_t session, audio_stream_type_t *stream, + uid_t uid, uint32_t samplingRate, audio_format_t format, audio_channel_mask_t channelMask, @@ -127,6 +128,7 @@ public: virtual status_t getInputForAttr(const audio_attributes_t *attr, audio_io_handle_t *input, audio_session_t session, + uid_t uid, uint32_t samplingRate, audio_format_t format, audio_channel_mask_t channelMask, @@ -207,7 +209,6 @@ public: struct audio_patch *patches, unsigned int *generation); virtual status_t setAudioPortConfig(const struct audio_port_config *config); - virtual void clearAudioPatches(uid_t uid); virtual status_t acquireSoundTriggerSession(audio_session_t *session, audio_io_handle_t *ioHandle, @@ -226,6 +227,8 @@ public: audio_io_handle_t *handle); virtual status_t stopAudioSource(audio_io_handle_t handle); + virtual void releaseResourcesForUid(uid_t uid); + // Audio policy configuration file parsing (audio_policy.conf) // TODO candidates to be moved to ConfigParsingUtils void defaultAudioPolicyConfig(void); @@ -248,31 +251,36 @@ protected: SessionRoute(audio_session_t session, audio_stream_type_t streamType, audio_source_t source, - sp<DeviceDescriptor> deviceDescriptor) - : mSession(session), + sp<DeviceDescriptor> deviceDescriptor, + uid_t uid) + : mUid(uid), + mSession(session), mDeviceDescriptor(deviceDescriptor), mRefCount(0), mActivityCount(0), mChanged(false), mStreamType(streamType), - mSource(source) {} + mSource(source) + {} - audio_session_t mSession; + void log(const char* prefix); - sp<DeviceDescriptor> mDeviceDescriptor; + bool isActive() { + return (mDeviceDescriptor != 0) && (mChanged || (mActivityCount > 0)); + } - void log(const char* prefix); + uid_t mUid; + audio_session_t mSession; + sp<DeviceDescriptor> mDeviceDescriptor; // "reference" counting - int mRefCount; // +/- on references - int mActivityCount; // +/- on start/stop - bool mChanged; - + int mRefCount; // +/- on references + int mActivityCount; // +/- on start/stop + bool mChanged; // for outputs - const audio_stream_type_t mStreamType; - + const audio_stream_type_t mStreamType; // for inputs - const audio_source_t mSource; + const audio_source_t mSource; }; class SessionRouteMap: public KeyedVector<audio_session_t, sp<SessionRoute>> { @@ -292,6 +300,7 @@ protected: } bool hasRoute(audio_session_t session); + void removeRoute(audio_session_t session); int incRouteActivity(audio_session_t session); @@ -306,7 +315,8 @@ protected: void addRoute(audio_session_t session, audio_stream_type_t streamType, audio_source_t source, - sp<DeviceDescriptor> deviceDescriptor); + sp<DeviceDescriptor> deviceDescriptor, + uid_t uid); private: // Used to mark a SessionRoute as for either inputs (mMapType == kSessionRouteMap_Input) @@ -559,7 +569,12 @@ protected: audio_devices_t device, uint32_t *delayMs); status_t stopSource(sp<AudioOutputDescriptor> outputDesc, - audio_stream_type_t stream); + audio_stream_type_t stream, + bool forceDeviceUpdate); + + void clearAudioPatches(uid_t uid); + void clearSessionRoutes(uid_t uid); + void checkStrategyRoute(routing_strategy strategy, audio_io_handle_t ouptutToSkip); uid_t mUidCached; AudioPolicyClientInterface *mpClientInterface; // audio policy client interface |