From f1d360ac86ec1f59eab0d01c606099278aa3ca1e Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Wed, 7 Sep 2011 11:13:23 -0700 Subject: [PATCH] AudioTrack: extend callback thread sleep time Do not force wake up the AudioTrack thread every 10ms if no timed events (loop, markers..) have to be processed. This will help reduce power consumption. Change-Id: Icb425b13800690008dd07c27ffac84739e3dbba3 --- media/libmedia/AudioTrack.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp index 750923958b977..c2c67158299ff 100644 --- a/media/libmedia/AudioTrack.cpp +++ b/media/libmedia/AudioTrack.cpp @@ -1078,6 +1078,11 @@ bool AudioTrack::processAudioBuffer(const sp& thread) frames = mRemainingFrames; } + int32_t waitCount = -1; + if (mUpdatePeriod || (!mMarkerReached && mMarkerPosition) || mLoopCount) { + waitCount = 1; + } + do { audioBuffer.frameCount = frames; @@ -1085,7 +1090,7 @@ bool AudioTrack::processAudioBuffer(const sp& thread) // Calling obtainBuffer() with a wait count of 1 // limits wait time to WAIT_PERIOD_MS. This prevents from being // stuck here not being able to handle timed events (position, markers, loops). - status_t err = obtainBuffer(&audioBuffer, 1); + status_t err = obtainBuffer(&audioBuffer, waitCount); if (err < NO_ERROR) { if (err != TIMED_OUT) { LOGE_IF(err != status_t(NO_MORE_BUFFERS), "Error obtaining an audio buffer, giving up.");