diff options
author | Glenn Kasten <gkasten@google.com> | 2013-08-29 09:01:02 -0700 |
---|---|---|
committer | Glenn Kasten <gkasten@google.com> | 2013-08-29 09:19:07 -0700 |
commit | 53cec22821072719ee02c856e9ac2dda2496c570 (patch) | |
tree | 1ac72eaf3ba6059680f8c3d7e39ae58a9e03adc8 /media/libmedia/IAudioTrack.cpp | |
parent | ce70374bf105f8a6160bf5dd70affea012b2a464 (diff) | |
download | frameworks_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.cpp | 30 |
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); } |