diff options
author | Andy Hung <hunga@google.com> | 2018-05-29 20:29:08 -0700 |
---|---|---|
committer | Andy Hung <hunga@google.com> | 2018-06-07 09:58:09 -0700 |
commit | 1c86ebe110381daa6b05d07020fb75f166280f34 (patch) | |
tree | 3fb0e5e985a35d01ad428098d4cadb1f66a03b0a /services/audioflinger/Tracks.cpp | |
parent | dfc0730c3375c64b001b5672eedf94a2dbda59e1 (diff) | |
download | frameworks_av-1c86ebe110381daa6b05d07020fb75f166280f34.tar.gz frameworks_av-1c86ebe110381daa6b05d07020fb75f166280f34.tar.bz2 frameworks_av-1c86ebe110381daa6b05d07020fb75f166280f34.zip |
AudioFlinger: Add latency information for duplicating threads
Test: Bluetooth and ringtones
Bug: 80447941
Change-Id: I0af9090f08636609e4c5a8c47d1d4c10f446746d
Diffstat (limited to 'services/audioflinger/Tracks.cpp')
-rw-r--r-- | services/audioflinger/Tracks.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/services/audioflinger/Tracks.cpp b/services/audioflinger/Tracks.cpp index 5966f85814..4fa024ea32 100644 --- a/services/audioflinger/Tracks.cpp +++ b/services/audioflinger/Tracks.cpp @@ -435,7 +435,8 @@ AudioFlinger::PlaybackThread::Track::Track( } 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 @@ void AudioFlinger::PlaybackThread::OutputTrack::stop() 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 @@ bool AudioFlinger::PlaybackThread::OutputTrack::write(void* data, uint32_t frame 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 @@ bool AudioFlinger::PlaybackThread::OutputTrack::write(void* data, uint32_t frame stop(); } - return outputBufferFull; + return frames - inBuffer.frameCount; // number of frames consumed. } void AudioFlinger::PlaybackThread::OutputTrack::copyMetadataTo(MetadataInserter& backInserter) const |