Loading include/media/AudioTrack.h +6 −0 Original line number Diff line number Diff line Loading @@ -644,6 +644,12 @@ public: * BAD_VALUE size is invalid * WOULD_BLOCK when obtainBuffer() returns same, or * AudioTrack was stopped during the write * DEAD_OBJECT when AudioFlinger dies or the output device changes and * the track cannot be automatically restored. * The application needs to recreate the AudioTrack * because the audio device changed or AudioFlinger died. * This typically occurs for direct or offload tracks * or if mDoNotReconnect is true. * or any other error code returned by IAudioTrack::start() or restoreTrack_l(). * Default behavior is to only return when all data has been transferred. Set 'blocking' to * false for the method to return immediately without waiting to try multiple times to write Loading media/libmedia/AudioTrack.cpp +8 −4 Original line number Diff line number Diff line Loading @@ -986,15 +986,18 @@ status_t AudioTrack::getPosition(uint32_t *position) } if (mOutput != AUDIO_IO_HANDLE_NONE) { uint32_t halFrames; AudioSystem::getRenderPosition(mOutput, &halFrames, &dspFrames); uint32_t halFrames; // actually unused (void) AudioSystem::getRenderPosition(mOutput, &halFrames, &dspFrames); // FIXME: on getRenderPosition() error, we return OK with frame position 0. } // FIXME: dspFrames may not be zero in (mState == STATE_STOPPED || mState == STATE_FLUSHED) // due to hardware latency. We leave this behavior for now. *position = dspFrames; } else { if (mCblk->mFlags & CBLK_INVALID) { restoreTrack_l("getPosition"); (void) restoreTrack_l("getPosition"); // FIXME: for compatibility with the Java API we ignore the restoreTrack_l() // error here (e.g. DEAD_OBJECT) and return OK with the last recorded server position. } // IAudioTrack::stop() isn't synchronous; we don't know when presentation completes Loading Loading @@ -2080,7 +2083,8 @@ status_t AudioTrack::restoreTrack_l(const char *from) AudioSystem::clearAudioConfigCache(); if (isOffloadedOrDirect_l() || mDoNotReconnect) { // FIXME re-creation of offloaded tracks is not yet implemented // FIXME re-creation of offloaded and direct tracks is not yet implemented; // reconsider enabling for linear PCM encodings when position can be preserved. return DEAD_OBJECT; } Loading Loading
include/media/AudioTrack.h +6 −0 Original line number Diff line number Diff line Loading @@ -644,6 +644,12 @@ public: * BAD_VALUE size is invalid * WOULD_BLOCK when obtainBuffer() returns same, or * AudioTrack was stopped during the write * DEAD_OBJECT when AudioFlinger dies or the output device changes and * the track cannot be automatically restored. * The application needs to recreate the AudioTrack * because the audio device changed or AudioFlinger died. * This typically occurs for direct or offload tracks * or if mDoNotReconnect is true. * or any other error code returned by IAudioTrack::start() or restoreTrack_l(). * Default behavior is to only return when all data has been transferred. Set 'blocking' to * false for the method to return immediately without waiting to try multiple times to write Loading
media/libmedia/AudioTrack.cpp +8 −4 Original line number Diff line number Diff line Loading @@ -986,15 +986,18 @@ status_t AudioTrack::getPosition(uint32_t *position) } if (mOutput != AUDIO_IO_HANDLE_NONE) { uint32_t halFrames; AudioSystem::getRenderPosition(mOutput, &halFrames, &dspFrames); uint32_t halFrames; // actually unused (void) AudioSystem::getRenderPosition(mOutput, &halFrames, &dspFrames); // FIXME: on getRenderPosition() error, we return OK with frame position 0. } // FIXME: dspFrames may not be zero in (mState == STATE_STOPPED || mState == STATE_FLUSHED) // due to hardware latency. We leave this behavior for now. *position = dspFrames; } else { if (mCblk->mFlags & CBLK_INVALID) { restoreTrack_l("getPosition"); (void) restoreTrack_l("getPosition"); // FIXME: for compatibility with the Java API we ignore the restoreTrack_l() // error here (e.g. DEAD_OBJECT) and return OK with the last recorded server position. } // IAudioTrack::stop() isn't synchronous; we don't know when presentation completes Loading Loading @@ -2080,7 +2083,8 @@ status_t AudioTrack::restoreTrack_l(const char *from) AudioSystem::clearAudioConfigCache(); if (isOffloadedOrDirect_l() || mDoNotReconnect) { // FIXME re-creation of offloaded tracks is not yet implemented // FIXME re-creation of offloaded and direct tracks is not yet implemented; // reconsider enabling for linear PCM encodings when position can be preserved. return DEAD_OBJECT; } Loading