summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice/MediaPlayerService.cpp
diff options
context:
space:
mode:
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 {