Loading services/audioflinger/BufferProviders.cpp +26 −23 Original line number Diff line number Diff line Loading @@ -386,6 +386,8 @@ status_t TimestretchBufferProvider::getNextBuffer( // need to fetch more data const size_t outputDesired = pBuffer->frameCount - mRemaining; size_t dstAvailable; do { mBuffer.frameCount = mPlaybackRate.mSpeed == AUDIO_TIMESTRETCH_SPEED_NORMAL ? outputDesired : outputDesired * mPlaybackRate.mSpeed + 1; Loading @@ -393,7 +395,7 @@ status_t TimestretchBufferProvider::getNextBuffer( ALOG_ASSERT(res == OK || mBuffer.frameCount == 0); if (res != OK || mBuffer.frameCount == 0) { // not needed by API spec, but to be safe. ALOGD("buffer error"); ALOGV("upstream provider cannot provide data"); if (mRemaining == 0) { pBuffer->raw = NULL; pBuffer->frameCount = 0; Loading @@ -406,7 +408,7 @@ status_t TimestretchBufferProvider::getNextBuffer( } // time-stretch the data size_t dstAvailable = min(mLocalBufferFrameCount - mRemaining, outputDesired); dstAvailable = min(mLocalBufferFrameCount - mRemaining, outputDesired); size_t srcAvailable = mBuffer.frameCount; processFrames((uint8_t*)mLocalBufferData + mRemaining * mFrameSize, &dstAvailable, mBuffer.raw, &srcAvailable); Loading @@ -414,6 +416,7 @@ status_t TimestretchBufferProvider::getNextBuffer( // release all data consumed mBuffer.frameCount = srcAvailable; mTrackBufferProvider->releaseBuffer(&mBuffer); } while (dstAvailable == 0); // try until we get output data or upstream provider fails. // update buffer vars with the actual data processed and return with buffer mRemaining += dstAvailable; Loading Loading
services/audioflinger/BufferProviders.cpp +26 −23 Original line number Diff line number Diff line Loading @@ -386,6 +386,8 @@ status_t TimestretchBufferProvider::getNextBuffer( // need to fetch more data const size_t outputDesired = pBuffer->frameCount - mRemaining; size_t dstAvailable; do { mBuffer.frameCount = mPlaybackRate.mSpeed == AUDIO_TIMESTRETCH_SPEED_NORMAL ? outputDesired : outputDesired * mPlaybackRate.mSpeed + 1; Loading @@ -393,7 +395,7 @@ status_t TimestretchBufferProvider::getNextBuffer( ALOG_ASSERT(res == OK || mBuffer.frameCount == 0); if (res != OK || mBuffer.frameCount == 0) { // not needed by API spec, but to be safe. ALOGD("buffer error"); ALOGV("upstream provider cannot provide data"); if (mRemaining == 0) { pBuffer->raw = NULL; pBuffer->frameCount = 0; Loading @@ -406,7 +408,7 @@ status_t TimestretchBufferProvider::getNextBuffer( } // time-stretch the data size_t dstAvailable = min(mLocalBufferFrameCount - mRemaining, outputDesired); dstAvailable = min(mLocalBufferFrameCount - mRemaining, outputDesired); size_t srcAvailable = mBuffer.frameCount; processFrames((uint8_t*)mLocalBufferData + mRemaining * mFrameSize, &dstAvailable, mBuffer.raw, &srcAvailable); Loading @@ -414,6 +416,7 @@ status_t TimestretchBufferProvider::getNextBuffer( // release all data consumed mBuffer.frameCount = srcAvailable; mTrackBufferProvider->releaseBuffer(&mBuffer); } while (dstAvailable == 0); // try until we get output data or upstream provider fails. // update buffer vars with the actual data processed and return with buffer mRemaining += dstAvailable; Loading