summaryrefslogtreecommitdiffstats
path: root/media/libmedia/IAudioTrack.cpp
diff options
context:
space:
mode:
authorGlenn Kasten <gkasten@google.com>2013-08-29 09:01:02 -0700
committerGlenn Kasten <gkasten@google.com>2013-08-29 09:19:07 -0700
commit53cec22821072719ee02c856e9ac2dda2496c570 (patch)
tree1ac72eaf3ba6059680f8c3d7e39ae58a9e03adc8 /media/libmedia/IAudioTrack.cpp
parentce70374bf105f8a6160bf5dd70affea012b2a464 (diff)
downloadframeworks_av-53cec22821072719ee02c856e9ac2dda2496c570.zip
frameworks_av-53cec22821072719ee02c856e9ac2dda2496c570.tar.gz
frameworks_av-53cec22821072719ee02c856e9ac2dda2496c570.tar.bz2
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
Diffstat (limited to 'media/libmedia/IAudioTrack.cpp')
-rw-r--r--media/libmedia/IAudioTrack.cpp30
1 files changed, 29 insertions, 1 deletions
diff --git a/media/libmedia/IAudioTrack.cpp b/media/libmedia/IAudioTrack.cpp
index a2b49a3..f0d75ba 100644
--- a/media/libmedia/IAudioTrack.cpp
+++ b/media/libmedia/IAudioTrack.cpp
@@ -39,7 +39,8 @@ enum {
ALLOCATE_TIMED_BUFFER,
QUEUE_TIMED_BUFFER,
SET_MEDIA_TIME_TRANSFORM,
- SET_PARAMETERS
+ SET_PARAMETERS,
+ GET_TIMESTAMP,
};
class BpAudioTrack : public BpInterface<IAudioTrack>
@@ -166,6 +167,21 @@ public:
}
return status;
}
+
+ virtual status_t getTimestamp(AudioTimestamp& timestamp) {
+ Parcel data, reply;
+ data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor());
+ status_t status = remote()->transact(GET_TIMESTAMP, data, &reply);
+ if (status == NO_ERROR) {
+ status = reply.readInt32();
+ if (status == NO_ERROR) {
+ timestamp.mPosition = reply.readInt32();
+ timestamp.mTime.tv_sec = reply.readInt32();
+ timestamp.mTime.tv_nsec = reply.readInt32();
+ }
+ }
+ return status;
+ }
};
IMPLEMENT_META_INTERFACE(AudioTrack, "android.media.IAudioTrack");
@@ -241,6 +257,18 @@ status_t BnAudioTrack::onTransact(
reply->writeInt32(setParameters(keyValuePairs));
return NO_ERROR;
} break;
+ case GET_TIMESTAMP: {
+ CHECK_INTERFACE(IAudioTrack, data, reply);
+ AudioTimestamp timestamp;
+ status_t status = getTimestamp(timestamp);
+ reply->writeInt32(status);
+ if (status == NO_ERROR) {
+ reply->writeInt32(timestamp.mPosition);
+ reply->writeInt32(timestamp.mTime.tv_sec);
+ reply->writeInt32(timestamp.mTime.tv_nsec);
+ }
+ return NO_ERROR;
+ } break;
default:
return BBinder::onTransact(code, data, reply, flags);
}