From 2e422c472c91aa7912befd0fc038d1e11f354bc1 Mon Sep 17 00:00:00 2001 From: Glenn Kasten Date: Fri, 18 Oct 2013 13:00:29 -0700 Subject: Allow releaseBuffer after flush After AudioTrack start checks for pending flush, allow releaseBuffer on any previously obtained buffer. For example, this can happen if the resampler has obtained a buffer but not released the whole buffer yet. Note that the resampler will be reading obsolete data. Bug: 11285590 Change-Id: I0614fbb62e43604aac3089cce4b7797c87a306b5 --- include/private/media/AudioTrackShared.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'include') diff --git a/include/private/media/AudioTrackShared.h b/include/private/media/AudioTrackShared.h index 395f164..7fd9379 100644 --- a/include/private/media/AudioTrackShared.h +++ b/include/private/media/AudioTrackShared.h @@ -360,6 +360,7 @@ public: // which must be > 0. // buffer->mNonContig is unused. // buffer->mRaw is unused. + // ackFlush is true iff being called from Track::start to acknowledge a pending flush. // On exit: // buffer->mFrameCount has the actual number of contiguous available frames, // which is always 0 when the return status != NO_ERROR. @@ -370,7 +371,7 @@ public: // NO_ERROR Success, buffer->mFrameCount > 0. // WOULD_BLOCK No frames are available. // NO_INIT Shared memory is corrupt. - virtual status_t obtainBuffer(Buffer* buffer); + virtual status_t obtainBuffer(Buffer* buffer, bool ackFlush = false); // Release (some of) the frames last obtained. // On entry, buffer->mFrameCount should have the number of frames to release, @@ -437,7 +438,7 @@ protected: public: virtual size_t framesReady(); virtual void framesReadyIsCalledByMultipleThreads(); - virtual status_t obtainBuffer(Buffer* buffer); + virtual status_t obtainBuffer(Buffer* buffer, bool ackFlush); virtual void releaseBuffer(Buffer* buffer); virtual void tallyUnderrunFrames(uint32_t frameCount); virtual uint32_t getUnderrunFrames() const { return 0; } -- cgit v1.1