auto import from //branches/cupcake/...@125939
diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp
index d4f2e5a..ce65312 100644
--- a/media/libmedia/AudioTrack.cpp
+++ b/media/libmedia/AudioTrack.cpp
@@ -231,20 +231,22 @@
mAudioTrack = track;
mCblkMemory = cblk;
mCblk = static_cast<audio_track_cblk_t*>(cblk->pointer());
+ mCblk->out = 1;
+ // Update buffer size in case it has been limited by AudioFlinger during track creation
+ mFrameCount = mCblk->frameCount;
if (sharedBuffer == 0) {
mCblk->buffers = (char*)mCblk + sizeof(audio_track_cblk_t);
} else {
mCblk->buffers = sharedBuffer->pointer();
+ // Force buffer full condition as data is already present in shared memory
+ mCblk->stepUser(mFrameCount);
}
- mCblk->out = 1;
mCblk->volume[0] = mCblk->volume[1] = 0x1000;
mVolume[LEFT] = 1.0f;
mVolume[RIGHT] = 1.0f;
mSampleRate = sampleRate;
mStreamType = streamType;
mFormat = format;
- // Update buffer size in case it has been limited by AudioFlinger during track creation
- mFrameCount = mCblk->frameCount;
mChannelCount = channelCount;
mSharedBuffer = sharedBuffer;
mMuted = false;
@@ -327,11 +329,6 @@
}
if (android_atomic_or(1, &mActive) == 0) {
- if (mSharedBuffer != 0) {
- // Force buffer full condition as data is already present in shared memory
- mCblk->user = mFrameCount;
- mCblk->flowControlFlag = 0;
- }
mNewPosition = mCblk->server + mUpdatePeriod;
if (t != 0) {
t->run("AudioTrackThread", THREAD_PRIORITY_AUDIO_CLIENT);
@@ -467,7 +464,6 @@
}
if (loopStart >= loopEnd ||
- loopStart < cblk->user ||
loopEnd - loopStart > mFrameCount) {
LOGW("setLoop invalid value: loopStart %d, loopEnd %d, loopCount %d, framecount %d, user %d", loopStart, loopEnd, loopCount, mFrameCount, cblk->user);
return BAD_VALUE;
@@ -958,12 +954,8 @@
uint32_t s = this->server;
if (out) {
- if (u < loopEnd) {
- return s + frameCount - u;
- } else {
- uint32_t limit = (s < loopStart) ? s : loopStart;
- return limit + frameCount - u;
- }
+ uint32_t limit = (s < loopStart) ? s : loopStart;
+ return limit + frameCount - u;
} else {
return frameCount + u - s;
}