summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice/MediaPlayerService.cpp
diff options
context:
space:
mode:
authorHaynes Mathew George <hgeorge@codeaurora.org>2015-03-05 16:05:05 -0800
committerLinux Build Service Account <lnxbuild@localhost>2015-10-06 03:24:44 -0600
commitc8b69ad554f45b779c9fd651b3f3a23b0323ac5f (patch)
tree97d5f3be0f416858c46685787685557eae1fe86a /media/libmediaplayerservice/MediaPlayerService.cpp
parentb0206de4583c3b447bce7ebe78eacec19d374083 (diff)
downloadframeworks_av-c8b69ad554f45b779c9fd651b3f3a23b0323ac5f.zip
frameworks_av-c8b69ad554f45b779c9fd651b3f3a23b0323ac5f.tar.gz
frameworks_av-c8b69ad554f45b779c9fd651b3f3a23b0323ac5f.tar.bz2
AudioOutput: Consider output bit width when reusing offload output
Consider bit width of the incoming audio stream before deciding to recycle the previously used AudioTrack object. CRs-Fixed: 802834 Change-Id: I33058fb4af2fb3b10714b14d8591f5f6b81e57d1
Diffstat (limited to 'media/libmediaplayerservice/MediaPlayerService.cpp')
-rw-r--r--media/libmediaplayerservice/MediaPlayerService.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp
index da72a55..0ce0c3f 100644
--- a/media/libmediaplayerservice/MediaPlayerService.cpp
+++ b/media/libmediaplayerservice/MediaPlayerService.cpp
@@ -1375,6 +1375,7 @@ MediaPlayerService::AudioOutput::AudioOutput(int sessionId, int uid, int pid,
}
setMinBufferCount();
+ mBitWidth = 16;
}
MediaPlayerService::AudioOutput::~AudioOutput()
@@ -1631,6 +1632,15 @@ status_t MediaPlayerService::AudioOutput::open(
} else if (mRecycledTrack->format() != format) {
reuse = false;
}
+
+ if (bothOffloaded) {
+ if (mBitWidth != offloadInfo->bit_width) {
+ ALOGV("output bit width differs %d v/s %d",
+ mBitWidth, offloadInfo->bit_width);
+ reuse = false;
+ }
+ }
+
} else {
ALOGV("no track available to recycle");
}
@@ -1746,6 +1756,13 @@ status_t MediaPlayerService::AudioOutput::open(
mFlags = flags;
mMsecsPerFrame = 1E3f / (mPlaybackRate.mSpeed * sampleRate);
mFrameSize = t->frameSize();
+
+ if (offloadInfo) {
+ mBitWidth = offloadInfo->bit_width;
+ } else {
+ mBitWidth = 16;
+ }
+
uint32_t pos;
if (t->getPosition(&pos) == OK) {
mBytesWritten = uint64_t(pos) * mFrameSize;
@@ -1846,6 +1863,7 @@ void MediaPlayerService::AudioOutput::switchToNextOutput() {
mNextOutput->mBytesWritten = mBytesWritten;
mNextOutput->mFlags = mFlags;
mNextOutput->mFrameSize = mFrameSize;
+ mNextOutput->mBitWidth = mBitWidth;
close_l();
mCallbackData = NULL; // destruction handled by mNextOutput
} else {