From 0162d00a38cdb5f4eba5dfe8cd272f69ddbc8c21 Mon Sep 17 00:00:00 2001 From: Wei Jia Date: Tue, 9 Jun 2015 11:59:33 -0700 Subject: AudioSink: use flags granted by AudioTrack, instead of the requested flags. Do not call AudioTrack::setPlaybackRate when DIRECT flag is set. Bug: 17459982 Change-Id: Ib8fb07be72558234519590bcc3bb88c4f6edfa37 --- media/libmediaplayerservice/MediaPlayerService.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'media/libmediaplayerservice/MediaPlayerService.cpp') diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp index 7c40121..4e57813 100644 --- a/media/libmediaplayerservice/MediaPlayerService.cpp +++ b/media/libmediaplayerservice/MediaPlayerService.cpp @@ -1669,7 +1669,7 @@ status_t MediaPlayerService::AudioOutput::open( t->setVolume(mLeftVolume, mRightVolume); mSampleRateHz = sampleRate; - mFlags = flags; + mFlags = t->getFlags(); // we suggest the flags above, but new AudioTrack() may not grant it. mMsecsPerFrame = 1E3f / (mPlaybackRate.mSpeed * sampleRate); uint32_t pos; if (t->getPosition(&pos) == OK) { @@ -1678,7 +1678,9 @@ status_t MediaPlayerService::AudioOutput::open( mTrack = t; status_t res = NO_ERROR; - if ((flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) == 0) { + // Note some output devices may give us a direct track even though we don't specify it. + // Example: Line application b/17459982. + if ((mFlags & (AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD | AUDIO_OUTPUT_FLAG_DIRECT)) == 0) { res = t->setPlaybackRate(mPlaybackRate); if (res == NO_ERROR) { t->setAuxEffectSendLevel(mSendLevel); -- cgit v1.1