diff options
author | Eric Laurent <elaurent@google.com> | 2015-07-09 14:52:47 -0700 |
---|---|---|
committer | Eric Laurent <elaurent@google.com> | 2015-07-10 10:58:41 -0700 |
commit | 7c1ec5f038e63a5eb8b04434577c25bc23f5f410 (patch) | |
tree | f6b8feda43ba0bb6666171b57318ad3cea48a45e /services/audioflinger/Threads.h | |
parent | 54c0659b9efa72d11997c590c4d377c44789c7fd (diff) | |
download | frameworks_av-7c1ec5f038e63a5eb8b04434577c25bc23f5f410.zip frameworks_av-7c1ec5f038e63a5eb8b04434577c25bc23f5f410.tar.gz frameworks_av-7c1ec5f038e63a5eb8b04434577c25bc23f5f410.tar.bz2 |
audio: several fixes in audio routing callbacks
- audio policy:
Force device change to ensure new audio patch creation
upon first track activity on a given output.
Fix function device_distinguishes_on_address() which could mistake
some output device with remote submix input device.
- audio flinger:
Reduce number of binder calls upon new client registration by only
sending ioConfigChanged() callbacks to newly registered client.
Fix first patch after output thread creation not triggering an
ioConfigChanged() callback.
-audio system:
Force client registration upon routing callback installation to force
new ioConfigChanged() callback from audio flinger.
Bug: 22381136.
Change-Id: Ieb0d9f92f563a40552eb31bc0499c8ac65f78ce4
Diffstat (limited to 'services/audioflinger/Threads.h')
-rw-r--r-- | services/audioflinger/Threads.h | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/services/audioflinger/Threads.h b/services/audioflinger/Threads.h index 0783371..46ac300 100644 --- a/services/audioflinger/Threads.h +++ b/services/audioflinger/Threads.h @@ -104,21 +104,22 @@ public: class IoConfigEventData : public ConfigEventData { public: - IoConfigEventData(audio_io_config_event event) : - mEvent(event) {} + IoConfigEventData(audio_io_config_event event, pid_t pid) : + mEvent(event), mPid(pid) {} virtual void dump(char *buffer, size_t size) { snprintf(buffer, size, "IO event: event %d\n", mEvent); } const audio_io_config_event mEvent; + const pid_t mPid; }; class IoConfigEvent : public ConfigEvent { public: - IoConfigEvent(audio_io_config_event event) : + IoConfigEvent(audio_io_config_event event, pid_t pid) : ConfigEvent(CFG_EVENT_IO) { - mData = new IoConfigEventData(event); + mData = new IoConfigEventData(event, pid); } virtual ~IoConfigEvent() {} }; @@ -255,13 +256,13 @@ public: status_t& status) = 0; virtual status_t setParameters(const String8& keyValuePairs); virtual String8 getParameters(const String8& keys) = 0; - virtual void ioConfigChanged(audio_io_config_event event) = 0; + virtual void ioConfigChanged(audio_io_config_event event, pid_t pid = 0) = 0; // sendConfigEvent_l() must be called with ThreadBase::mLock held // Can temporarily release the lock if waiting for a reply from // processConfigEvents_l(). status_t sendConfigEvent_l(sp<ConfigEvent>& event); - void sendIoConfigEvent(audio_io_config_event event); - void sendIoConfigEvent_l(audio_io_config_event event); + void sendIoConfigEvent(audio_io_config_event event, pid_t pid = 0); + void sendIoConfigEvent_l(audio_io_config_event event, pid_t pid = 0); void sendPrioConfigEvent(pid_t pid, pid_t tid, int32_t prio); void sendPrioConfigEvent_l(pid_t pid, pid_t tid, int32_t prio); status_t sendSetParameterConfigEvent_l(const String8& keyValuePair); @@ -436,6 +437,7 @@ protected: bool mStandby; // Whether thread is currently in standby. audio_devices_t mOutDevice; // output device audio_devices_t mInDevice; // input device + audio_devices_t mPrevOutDevice; // previous output device audio_devices_t mPrevInDevice; // previous input device struct audio_patch mPatch; audio_source_t mAudioSource; @@ -572,7 +574,7 @@ public: { return android_atomic_acquire_load(&mSuspended) > 0; } virtual String8 getParameters(const String8& keys); - virtual void ioConfigChanged(audio_io_config_event event); + virtual void ioConfigChanged(audio_io_config_event event, pid_t pid = 0); status_t getRenderPosition(uint32_t *halFrames, uint32_t *dspFrames); // FIXME rename mixBuffer() to sinkBuffer() and remove int16_t* dependency. // Consider also removing and passing an explicit mMainBuffer initialization @@ -1254,7 +1256,7 @@ public: status_t& status); virtual void cacheParameters_l() {} virtual String8 getParameters(const String8& keys); - virtual void ioConfigChanged(audio_io_config_event event); + virtual void ioConfigChanged(audio_io_config_event event, pid_t pid = 0); virtual status_t createAudioPatch_l(const struct audio_patch *patch, audio_patch_handle_t *handle); virtual status_t releaseAudioPatch_l(const audio_patch_handle_t handle); |