summaryrefslogtreecommitdiffstats
path: root/media/libmedia/AudioTrackShared.cpp
diff options
context:
space:
mode:
authorAndy Hung <hunga@google.com>2014-11-12 13:18:52 -0800
committerAndy Hung <hunga@google.com>2014-11-24 17:25:18 -0800
commit680b795435a5a501a56610258dce5eda40a1725d (patch)
treedb2d003b9b147e5f51e4cf6bf05d497d8ce4acb7 /media/libmedia/AudioTrackShared.cpp
parentbc0f452b9a76dd8c8244e775bc9c5aa85cae3ddf (diff)
downloadframeworks_av-680b795435a5a501a56610258dce5eda40a1725d.zip
frameworks_av-680b795435a5a501a56610258dce5eda40a1725d.tar.gz
frameworks_av-680b795435a5a501a56610258dce5eda40a1725d.tar.bz2
Fix AudioTrack loop mode to play audio from buffer start
Bug: 18217633 Change-Id: Ica77acf0a32832d9b04eb657ef2f4f5329f8fbda
Diffstat (limited to 'media/libmedia/AudioTrackShared.cpp')
-rw-r--r--media/libmedia/AudioTrackShared.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/media/libmedia/AudioTrackShared.cpp b/media/libmedia/AudioTrackShared.cpp
index 62362da..4a783b3 100644
--- a/media/libmedia/AudioTrackShared.cpp
+++ b/media/libmedia/AudioTrackShared.cpp
@@ -503,7 +503,11 @@ void StaticAudioTrackClientProxy::setLoop(size_t loopStart, size_t loopEnd, int
newState.mLoopStart = (uint32_t) loopStart;
newState.mLoopEnd = (uint32_t) loopEnd;
newState.mLoopCount = loopCount;
- mBufferPosition = loopStart;
+ size_t bufferPosition;
+ if (loopCount == 0 || (bufferPosition = getBufferPosition()) >= loopEnd) {
+ bufferPosition = loopStart;
+ }
+ mBufferPosition = bufferPosition; // snapshot buffer position until loop is acknowledged.
(void) mMutator.push(newState);
}
@@ -776,7 +780,9 @@ ssize_t StaticAudioTrackServerProxy::pollPosition()
} else if (state.mLoopCount >= -1) {
if (loopStart < loopEnd && loopEnd <= mFrameCount &&
loopEnd - loopStart >= MIN_LOOP) {
- if (!(loopStart <= position && position < loopEnd)) {
+ // If the current position is greater than the end of the loop
+ // we "wrap" to the loop start. This might cause an audible pop.
+ if (position >= loopEnd) {
mPosition = position = loopStart;
}
if (state.mLoopCount == -1) {