From 2267ba18d0d2b2d4bd7f5411821ad89ac2659a88 Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Wed, 7 Sep 2011 11:13:23 -0700 Subject: 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(-) (limited to 'media') diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp index 7509239..c2c6715 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."); -- cgit v1.1