summaryrefslogtreecommitdiffstats
path: root/services/audioflinger/Tracks.cpp
diff options
context:
space:
mode:
authorAndy Hung <hunga@google.com>2018-05-29 20:29:08 -0700
committerAndy Hung <hunga@google.com>2018-06-07 09:58:09 -0700
commit1c86ebe110381daa6b05d07020fb75f166280f34 (patch)
tree3fb0e5e985a35d01ad428098d4cadb1f66a03b0a /services/audioflinger/Tracks.cpp
parentdfc0730c3375c64b001b5672eedf94a2dbda59e1 (diff)
downloadframeworks_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.cpp10
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