AudioFlinger: Add latency information for duplicating threads
Test: Bluetooth and ringtones
Bug: 80447941
Change-Id: I0af9090f08636609e4c5a8c47d1d4c10f446746d
diff --git a/services/audioflinger/Tracks.cpp b/services/audioflinger/Tracks.cpp
index 5966f85..4fa024e 100644
--- a/services/audioflinger/Tracks.cpp
+++ b/services/audioflinger/Tracks.cpp
@@ -435,7 +435,8 @@
}
mName = TRACK_NAME_PENDING;
- mServerLatencySupported = thread->type() == ThreadBase::MIXER;
+ mServerLatencySupported = thread->type() == ThreadBase::MIXER
+ || thread->type() == ThreadBase::DUPLICATING;
#ifdef TEE_SINK
mTee.setId(std::string("_") + std::to_string(mThreadIoHandle)
+ "_" + std::to_string(mId) +
@@ -1354,7 +1355,7 @@
mActive = false;
}
-bool AudioFlinger::PlaybackThread::OutputTrack::write(void* data, uint32_t frames)
+ssize_t AudioFlinger::PlaybackThread::OutputTrack::write(void* data, uint32_t frames)
{
Buffer *pInBuffer;
Buffer inBuffer;
@@ -1443,9 +1444,12 @@
mBufferQueue.add(pInBuffer);
ALOGV("OutputTrack::write() %p thread %p adding overflow buffer %zu", this,
mThread.unsafe_get(), mBufferQueue.size());
+ // audio data is consumed (stored locally); set frameCount to 0.
+ inBuffer.frameCount = 0;
} else {
ALOGW("OutputTrack::write() %p thread %p no more overflow buffers",
mThread.unsafe_get(), this);
+ // TODO: return error for this.
}
}
}
@@ -1456,7 +1460,7 @@
stop();
}
- return outputBufferFull;
+ return frames - inBuffer.frameCount; // number of frames consumed.
}
void AudioFlinger::PlaybackThread::OutputTrack::copyMetadataTo(MetadataInserter& backInserter) const