Add IAudioTrack::getTimestamp()
with dummy implementation in AudioFlinger::TrackHandle, and
implement AudioTrack::getTimestamp() using IAudioTrack.
Also document invariant that mAudioTrack and control block are always
non-0 after successful initialization.
Change-Id: I9861d1454cff7decf795d5d5898ac7999a9f3b7e
diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp
index d90e733..78ae37e 100644
--- a/media/libmedia/AudioTrack.cpp
+++ b/media/libmedia/AudioTrack.cpp
@@ -148,10 +148,8 @@
mAudioTrackThread->requestExitAndWait();
mAudioTrackThread.clear();
}
- if (mAudioTrack != 0) {
- mAudioTrack->asBinder()->unlinkToDeath(mDeathNotifier, this);
- mAudioTrack.clear();
- }
+ mAudioTrack->asBinder()->unlinkToDeath(mDeathNotifier, this);
+ mAudioTrack.clear();
IPCThreadState::self()->flushCommands();
AudioSystem::releaseAudioSessionId(mSessionId);
}
@@ -222,6 +220,7 @@
AutoMutex lock(mLock);
+ // invariant that mAudioTrack != 0 is true only after set() returns successfully
if (mAudioTrack != 0) {
ALOGE("Track already in use");
return INVALID_OPERATION;
@@ -965,6 +964,7 @@
ALOGE("Could not get control block");
return NO_INIT;
}
+ // invariant that mAudioTrack != 0 is true only after set() returns successfully
if (mAudioTrack != 0) {
mAudioTrack->asBinder()->unlinkToDeath(mDeathNotifier, this);
mDeathNotifier.clear();
@@ -1705,16 +1705,13 @@
status_t AudioTrack::setParameters(const String8& keyValuePairs)
{
AutoMutex lock(mLock);
- if (mAudioTrack != 0) {
- return mAudioTrack->setParameters(keyValuePairs);
- } else {
- return NO_INIT;
- }
+ return mAudioTrack->setParameters(keyValuePairs);
}
status_t AudioTrack::getTimestamp(AudioTimestamp& timestamp)
{
- return INVALID_OPERATION;
+ AutoMutex lock(mLock);
+ return mAudioTrack->getTimestamp(timestamp);
}
String8 AudioTrack::getParameters(const String8& keys)