aaudio: cleanup code that reads timing model
Only use the clock model for the position when
it is running and when the service is not updating
the FIFO counter.
Bug: 120932593
Bug: 122374244
Test: test_return_stop
Test: test_return_stop -i
Change-Id: I6d6a23b35dca5529b6221e1b3b4a4e6672093bf2
diff --git a/media/libaaudio/src/client/AudioStreamInternalPlay.cpp b/media/libaaudio/src/client/AudioStreamInternalPlay.cpp
index 6af8e7d..e1443d9 100644
--- a/media/libaaudio/src/client/AudioStreamInternalPlay.cpp
+++ b/media/libaaudio/src/client/AudioStreamInternalPlay.cpp
@@ -242,27 +242,17 @@
return framesWritten;
}
-int64_t AudioStreamInternalPlay::getFramesRead()
-{
- int64_t framesReadHardware;
- if (isActive()) {
- framesReadHardware = mClockModel.convertTimeToPosition(AudioClock::getNanoseconds());
- } else {
- framesReadHardware = mAudioEndpoint.getDataReadCounter();
- }
- int64_t framesRead = framesReadHardware + mFramesOffsetFromService;
- // Prevent retrograde motion.
- if (framesRead < mLastFramesRead) {
- framesRead = mLastFramesRead;
- } else {
- mLastFramesRead = framesRead;
- }
- return framesRead;
+int64_t AudioStreamInternalPlay::getFramesRead() {
+ const int64_t framesReadHardware = isClockModelInControl()
+ ? mClockModel.convertTimeToPosition(AudioClock::getNanoseconds())
+ : mAudioEndpoint.getDataReadCounter();
+ // Add service offset and prevent retrograde motion.
+ mLastFramesRead = std::max(mLastFramesRead, framesReadHardware + mFramesOffsetFromService);
+ return mLastFramesRead;
}
-int64_t AudioStreamInternalPlay::getFramesWritten()
-{
- int64_t framesWritten = mAudioEndpoint.getDataWriteCounter()
+int64_t AudioStreamInternalPlay::getFramesWritten() {
+ const int64_t framesWritten = mAudioEndpoint.getDataWriteCounter()
+ mFramesOffsetFromService;
return framesWritten;
}