audio: several concurrent capture fixes
Make sure AudioRecord clients are invalidated synchronously
when closing an input stream instead of when the capture thread
exits.
Fix AudioPolicyManager::getInputForDevice() logic to make sure that
not only the first opened input encountered is considered when looking
for a compatible input to reuse for concurrent capture.
Bug: 22702906
Test: run CTS test
Change-Id: I7f69609d4ee70a37ab06753ff970b12df17d885b
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index a1d81f9..b42bd05 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -5976,6 +5976,18 @@
run(mThreadName, PRIORITY_URGENT_AUDIO);
}
+void AudioFlinger::RecordThread::preExit()
+{
+ ALOGV(" preExit()");
+ Mutex::Autolock _l(mLock);
+ for (size_t i = 0; i < mTracks.size(); i++) {
+ sp<RecordTrack> track = mTracks[i];
+ track->invalidate();
+ }
+ mActiveTracks.clear();
+ mStartStopCond.broadcast();
+}
+
bool AudioFlinger::RecordThread::threadLoop()
{
nsecs_t lastWarning = 0;