diff options
author | Glenn Kasten <gkasten@google.com> | 2013-07-17 16:05:07 -0700 |
---|---|---|
committer | Glenn Kasten <gkasten@google.com> | 2013-07-31 09:15:00 -0700 |
commit | 82aaf94a5b18939e4d790bbc752031f3070704a3 (patch) | |
tree | 4e39e32d0ccde726548afcbd81e253d5e316b295 /include | |
parent | b08ab81bab9e8cd2e3a7fff02725a387070fd078 (diff) | |
download | frameworks_av-82aaf94a5b18939e4d790bbc752031f3070704a3.zip frameworks_av-82aaf94a5b18939e4d790bbc752031f3070704a3.tar.gz frameworks_av-82aaf94a5b18939e4d790bbc752031f3070704a3.tar.bz2 |
Report underruns for fast tracks also
This fixes a regression that was introduced earlier
by commit 9f80dd223d83d9bb9077fb6baee056cee4eaf7e5
called "New control block for AudioTrack and AudioRecord".
That commit broke underrun reporting for fast tracks.
Also remove Track::mUnderrunCount, which counted the number of underrun
events, and was only used by dumpsys media.audio_flinger.
Now dumpsys media.audio_flinger reports the number of underrun frames,
Isolated underrun-related control block accesses via the proxy, so that
the server is not directly poking around in the control block.
The new proxy APIs are AudioTrackServerProxy::getUnderrunFrames() and
AudioTrackServerProxy::tallyUnderrunFrames(). getUnderrunFrames() returns
a rolling counter for streaming tracks, or zero for static buffer tracks
which never underrun, but do a kind of 'pause' at end of buffer.
tallyUnderrunFrames() increments the counter by a specified number of frames.
Change-Id: Ib31fd73eb17cbb23888ce3af8ff29f471f5bd5a2
Diffstat (limited to 'include')
-rw-r--r-- | include/private/media/AudioTrackShared.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/include/private/media/AudioTrackShared.h b/include/private/media/AudioTrackShared.h index 6d778dd..1379379 100644 --- a/include/private/media/AudioTrackShared.h +++ b/include/private/media/AudioTrackShared.h @@ -415,6 +415,13 @@ public: virtual void framesReadyIsCalledByMultipleThreads() { } bool setStreamEndDone(); // and return previous value + + // Add to the tally of underrun frames, and inform client of underrun + virtual void tallyUnderrunFrames(uint32_t frameCount); + + // Return the total number of frames which AudioFlinger desired but were unavailable, + // and thus which resulted in an underrun. + virtual uint32_t getUnderrunFrames() const { return mCblk->u.mStreaming.mUnderrunFrames; } }; class StaticAudioTrackServerProxy : public AudioTrackServerProxy { @@ -429,6 +436,8 @@ public: virtual void framesReadyIsCalledByMultipleThreads(); virtual status_t obtainBuffer(Buffer* buffer); virtual void releaseBuffer(Buffer* buffer); + virtual void tallyUnderrunFrames(uint32_t frameCount); + virtual uint32_t getUnderrunFrames() const { return 0; } private: ssize_t pollPosition(); // poll for state queue update, and return current position |