summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--media/libmedia/AudioTrack.cpp13
-rw-r--r--media/libnbaio/AudioStreamOutSink.cpp3
-rw-r--r--services/audioflinger/Tracks.cpp6
3 files changed, 20 insertions, 2 deletions
diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp
index 176197c..744faee 100644
--- a/media/libmedia/AudioTrack.cpp
+++ b/media/libmedia/AudioTrack.cpp
@@ -1714,7 +1714,18 @@ status_t AudioTrack::setParameters(const String8& keyValuePairs)
status_t AudioTrack::getTimestamp(AudioTimestamp& timestamp)
{
AutoMutex lock(mLock);
- return mAudioTrack->getTimestamp(timestamp);
+ // FIXME not implemented for fast tracks; should use proxy and SSQ
+ if (mFlags & AUDIO_OUTPUT_FLAG_FAST) {
+ return INVALID_OPERATION;
+ }
+ if (mState != STATE_ACTIVE && mState != STATE_PAUSED) {
+ return INVALID_OPERATION;
+ }
+ status_t status = mAudioTrack->getTimestamp(timestamp);
+ if (status == NO_ERROR) {
+ timestamp.mPosition += mProxy->getEpoch();
+ }
+ return status;
}
String8 AudioTrack::getParameters(const String8& keys)
diff --git a/media/libnbaio/AudioStreamOutSink.cpp b/media/libnbaio/AudioStreamOutSink.cpp
index b2de8a2..e4341d7 100644
--- a/media/libnbaio/AudioStreamOutSink.cpp
+++ b/media/libnbaio/AudioStreamOutSink.cpp
@@ -81,6 +81,9 @@ status_t AudioStreamOutSink::getNextWriteTimestamp(int64_t *timestamp) {
status_t AudioStreamOutSink::getTimestamp(AudioTimestamp& timestamp)
{
+ if (mStream->get_presentation_position == NULL) {
+ return INVALID_OPERATION;
+ }
// FIXME position64 won't be needed after AudioTimestamp.mPosition is changed to uint64_t
uint64_t position64;
int ok = mStream->get_presentation_position(mStream, &position64, &timestamp.mTime);
diff --git a/services/audioflinger/Tracks.cpp b/services/audioflinger/Tracks.cpp
index db67be6..2042050 100644
--- a/services/audioflinger/Tracks.cpp
+++ b/services/audioflinger/Tracks.cpp
@@ -727,9 +727,13 @@ status_t AudioFlinger::PlaybackThread::Track::setParameters(const String8& keyVa
status_t AudioFlinger::PlaybackThread::Track::getTimestamp(AudioTimestamp& timestamp)
{
+ // Client should implement this using SSQ; the unpresented frame count in latch is irrelevant
+ if (isFastTrack()) {
+ return INVALID_OPERATION;
+ }
sp<ThreadBase> thread = mThread.promote();
if (thread == 0) {
- return false;
+ return INVALID_OPERATION;
}
Mutex::Autolock _l(thread->mLock);
PlaybackThread *playbackThread = (PlaybackThread *)thread.get();