Flush FastCapture PipeReader when starting after stop
Discards stale frames.
Bug: 30199985
Change-Id: Ie93a3784bf052aba6989d2ff1be92b1980b0c207
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index 475704f..56a7257 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -6459,6 +6459,16 @@
}
}
mInput->stream->common.standby(&mInput->stream->common);
+
+ // If going into standby, flush the pipe source.
+ if (mPipeSource.get() != nullptr) {
+ const ssize_t flushed = mPipeSource->flush();
+ if (flushed > 0) {
+ ALOGV("Input standby flushed PipeSource %zd frames", flushed);
+ mTimestamp.mPosition[ExtendedTimestamp::LOCATION_SERVER] += flushed;
+ mTimestamp.mTimeNs[ExtendedTimestamp::LOCATION_SERVER] = systemTime();
+ }
+ }
}
// RecordThread::createRecordTrack_l() must be called with AudioFlinger::mLock held