Loading include/media/AudioTrack.h +3 −2 Original line number Diff line number Diff line Loading @@ -227,6 +227,7 @@ public: * - INVALID_OPERATION: AudioTrack is already initialized * - BAD_VALUE: invalid parameter (channelMask, format, sampleRate...) * - NO_INIT: audio server or audio hardware not initialized * If status is not equal to NO_ERROR, don't call any other APIs on this AudioTrack. * If sharedBuffer is non-0, the frameCount parameter is ignored and * replaced by the shared buffer's total allocated size in frame units. * Loading @@ -249,7 +250,7 @@ public: transfer_type transferType = TRANSFER_DEFAULT, const audio_offload_info_t *offloadInfo = NULL); /* Result of constructing the AudioTrack. This must be checked /* Result of constructing the AudioTrack. This must be checked for successful initialization * before using any AudioTrack API (except for set()), because using * an uninitialized AudioTrack produces undefined results. * See set() method above for possible return codes. Loading Loading @@ -646,7 +647,7 @@ protected: bool isOffloaded() const { return (mFlags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) != 0; } // may be changed if IAudioTrack is re-created // Next 3 fields may be changed if IAudioTrack is re-created, but always != 0 sp<IAudioTrack> mAudioTrack; sp<IMemory> mCblkMemory; audio_track_cblk_t* mCblk; // re-load after mLock.unlock() Loading include/media/IAudioTrack.h +4 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ #include <binder/IMemory.h> #include <utils/LinearTransform.h> #include <utils/String8.h> #include <media/AudioTimestamp.h> namespace android { Loading Loading @@ -86,6 +87,9 @@ public: /* Send parameters to the audio hardware */ virtual status_t setParameters(const String8& keyValuePairs) = 0; /* Return NO_ERROR if timestamp is valid */ virtual status_t getTimestamp(AudioTimestamp& timestamp) = 0; }; // ---------------------------------------------------------------------------- Loading media/libmedia/AudioTrack.cpp +7 −10 Original line number Diff line number Diff line Loading @@ -148,10 +148,8 @@ AudioTrack::~AudioTrack() mAudioTrackThread->requestExitAndWait(); mAudioTrackThread.clear(); } if (mAudioTrack != 0) { mAudioTrack->asBinder()->unlinkToDeath(mDeathNotifier, this); mAudioTrack.clear(); } IPCThreadState::self()->flushCommands(); AudioSystem::releaseAudioSessionId(mSessionId); } Loading Loading @@ -222,6 +220,7 @@ status_t AudioTrack::set( 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; Loading Loading @@ -968,6 +967,7 @@ status_t AudioTrack::createTrack_l( 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(); Loading Loading @@ -1708,16 +1708,13 @@ status_t AudioTrack::restoreTrack_l(const char *from) status_t AudioTrack::setParameters(const String8& keyValuePairs) { AutoMutex lock(mLock); if (mAudioTrack != 0) { return mAudioTrack->setParameters(keyValuePairs); } else { return NO_INIT; } } status_t AudioTrack::getTimestamp(AudioTimestamp& timestamp) { return INVALID_OPERATION; AutoMutex lock(mLock); return mAudioTrack->getTimestamp(timestamp); } String8 AudioTrack::getParameters(const String8& keys) Loading media/libmedia/IAudioTrack.cpp +29 −1 Original line number Diff line number Diff line Loading @@ -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> Loading Loading @@ -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"); Loading Loading @@ -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); } Loading services/audioflinger/AudioFlinger.h +1 −0 Original line number Diff line number Diff line Loading @@ -411,6 +411,7 @@ private: virtual status_t setMediaTimeTransform(const LinearTransform& xform, int target); virtual status_t setParameters(const String8& keyValuePairs); virtual status_t getTimestamp(AudioTimestamp& timestamp); virtual status_t onTransact( uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags); Loading Loading
include/media/AudioTrack.h +3 −2 Original line number Diff line number Diff line Loading @@ -227,6 +227,7 @@ public: * - INVALID_OPERATION: AudioTrack is already initialized * - BAD_VALUE: invalid parameter (channelMask, format, sampleRate...) * - NO_INIT: audio server or audio hardware not initialized * If status is not equal to NO_ERROR, don't call any other APIs on this AudioTrack. * If sharedBuffer is non-0, the frameCount parameter is ignored and * replaced by the shared buffer's total allocated size in frame units. * Loading @@ -249,7 +250,7 @@ public: transfer_type transferType = TRANSFER_DEFAULT, const audio_offload_info_t *offloadInfo = NULL); /* Result of constructing the AudioTrack. This must be checked /* Result of constructing the AudioTrack. This must be checked for successful initialization * before using any AudioTrack API (except for set()), because using * an uninitialized AudioTrack produces undefined results. * See set() method above for possible return codes. Loading Loading @@ -646,7 +647,7 @@ protected: bool isOffloaded() const { return (mFlags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) != 0; } // may be changed if IAudioTrack is re-created // Next 3 fields may be changed if IAudioTrack is re-created, but always != 0 sp<IAudioTrack> mAudioTrack; sp<IMemory> mCblkMemory; audio_track_cblk_t* mCblk; // re-load after mLock.unlock() Loading
include/media/IAudioTrack.h +4 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ #include <binder/IMemory.h> #include <utils/LinearTransform.h> #include <utils/String8.h> #include <media/AudioTimestamp.h> namespace android { Loading Loading @@ -86,6 +87,9 @@ public: /* Send parameters to the audio hardware */ virtual status_t setParameters(const String8& keyValuePairs) = 0; /* Return NO_ERROR if timestamp is valid */ virtual status_t getTimestamp(AudioTimestamp& timestamp) = 0; }; // ---------------------------------------------------------------------------- Loading
media/libmedia/AudioTrack.cpp +7 −10 Original line number Diff line number Diff line Loading @@ -148,10 +148,8 @@ AudioTrack::~AudioTrack() mAudioTrackThread->requestExitAndWait(); mAudioTrackThread.clear(); } if (mAudioTrack != 0) { mAudioTrack->asBinder()->unlinkToDeath(mDeathNotifier, this); mAudioTrack.clear(); } IPCThreadState::self()->flushCommands(); AudioSystem::releaseAudioSessionId(mSessionId); } Loading Loading @@ -222,6 +220,7 @@ status_t AudioTrack::set( 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; Loading Loading @@ -968,6 +967,7 @@ status_t AudioTrack::createTrack_l( 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(); Loading Loading @@ -1708,16 +1708,13 @@ status_t AudioTrack::restoreTrack_l(const char *from) status_t AudioTrack::setParameters(const String8& keyValuePairs) { AutoMutex lock(mLock); if (mAudioTrack != 0) { return mAudioTrack->setParameters(keyValuePairs); } else { return NO_INIT; } } status_t AudioTrack::getTimestamp(AudioTimestamp& timestamp) { return INVALID_OPERATION; AutoMutex lock(mLock); return mAudioTrack->getTimestamp(timestamp); } String8 AudioTrack::getParameters(const String8& keys) Loading
media/libmedia/IAudioTrack.cpp +29 −1 Original line number Diff line number Diff line Loading @@ -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> Loading Loading @@ -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"); Loading Loading @@ -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); } Loading
services/audioflinger/AudioFlinger.h +1 −0 Original line number Diff line number Diff line Loading @@ -411,6 +411,7 @@ private: virtual status_t setMediaTimeTransform(const LinearTransform& xform, int target); virtual status_t setParameters(const String8& keyValuePairs); virtual status_t getTimestamp(AudioTimestamp& timestamp); virtual status_t onTransact( uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags); Loading