summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--media/libmediaplayerservice/MediaPlayerService.cpp85
1 files changed, 47 insertions, 38 deletions
diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp
index 20d6d7a..4bf2d3f 100644
--- a/media/libmediaplayerservice/MediaPlayerService.cpp
+++ b/media/libmediaplayerservice/MediaPlayerService.cpp
@@ -1542,6 +1542,43 @@ status_t MediaPlayerService::AudioOutput::open(
}
}
+ AudioTrack *t;
+ CallbackData *newcbd = NULL;
+ if (mCallback != NULL) {
+ newcbd = new CallbackData(this);
+ t = new AudioTrack(
+ mStreamType,
+ sampleRate,
+ format,
+ channelMask,
+ frameCount,
+ flags,
+ CallbackWrapper,
+ newcbd,
+ 0, // notification frames
+ mSessionId);
+ } else {
+ t = new AudioTrack(
+ mStreamType,
+ sampleRate,
+ format,
+ channelMask,
+ frameCount,
+ flags,
+ NULL,
+ NULL,
+ 0,
+ mSessionId);
+ }
+
+ if ((t == 0) || (t->initCheck() != NO_ERROR)) {
+ ALOGE("Unable to create audio track");
+ delete t;
+ delete newcbd;
+ return NO_INIT;
+ }
+
+
if (mRecycledTrack) {
// check if the existing track can be reused as-is, or if a new track needs to be created.
@@ -1553,11 +1590,14 @@ status_t MediaPlayerService::AudioOutput::open(
reuse = false;
} else if ((mRecycledTrack->getSampleRate() != sampleRate) ||
(mRecycledTrack->channelCount() != channelCount) ||
- (mRecycledTrack->frameCount() != frameCount)) {
- ALOGV("samplerate, channelcount or framecount differ");
+ (mRecycledTrack->frameCount() != t->frameCount())) {
+ ALOGV("samplerate, channelcount or framecount differ: %d/%d Hz, %d/%d ch, %d/%d frames",
+ mRecycledTrack->getSampleRate(), sampleRate,
+ mRecycledTrack->channelCount(), channelCount,
+ mRecycledTrack->frameCount(), t->frameCount());
reuse = false;
- } if (flags != mFlags) {
- ALOGV("output flags differ");
+ } else if (flags != mFlags) {
+ ALOGV("output flags differ %08x/%08x", flags, mFlags);
reuse = false;
}
if (reuse) {
@@ -1568,6 +1608,8 @@ status_t MediaPlayerService::AudioOutput::open(
if (mCallbackData != NULL) {
mCallbackData->setOutput(this);
}
+ delete t;
+ delete newcbd;
return OK;
}
@@ -1584,40 +1626,7 @@ status_t MediaPlayerService::AudioOutput::open(
close();
}
- AudioTrack *t;
- if (mCallback != NULL) {
- mCallbackData = new CallbackData(this);
- t = new AudioTrack(
- mStreamType,
- sampleRate,
- format,
- channelMask,
- frameCount,
- flags,
- CallbackWrapper,
- mCallbackData,
- 0, // notification frames
- mSessionId);
- } else {
- t = new AudioTrack(
- mStreamType,
- sampleRate,
- format,
- channelMask,
- frameCount,
- flags,
- NULL,
- NULL,
- 0,
- mSessionId);
- }
-
- if ((t == 0) || (t->initCheck() != NO_ERROR)) {
- ALOGE("Unable to create audio track");
- delete t;
- return NO_INIT;
- }
-
+ mCallbackData = newcbd;
ALOGV("setVolume");
t->setVolume(mLeftVolume, mRightVolume);