From 62eac008504fefd05fa53bc74f7e001bf0a51975 Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Fri, 29 Jan 2010 13:24:58 -0800 Subject: [PATCH] Properly forward errors returned by AudioTrack up to the player. related-to-bug: 2300197 --- include/media/stagefright/AudioPlayer.h | 2 +- media/libstagefright/AudioPlayer.cpp | 24 ++++++++++++++++++++---- media/libstagefright/AwesomePlayer.cpp | 11 ++++++++++- 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/include/media/stagefright/AudioPlayer.h b/include/media/stagefright/AudioPlayer.h index 71344e6f89d76..26fcc95868777 100644 --- a/include/media/stagefright/AudioPlayer.h +++ b/include/media/stagefright/AudioPlayer.h @@ -47,7 +47,7 @@ public: // Return time in us. virtual int64_t getRealTimeUs(); - void start(); + status_t start(); void pause(); void resume(); diff --git a/media/libstagefright/AudioPlayer.cpp b/media/libstagefright/AudioPlayer.cpp index 14842c099be4b..efe7ebb641e3b 100644 --- a/media/libstagefright/AudioPlayer.cpp +++ b/media/libstagefright/AudioPlayer.cpp @@ -58,12 +58,15 @@ void AudioPlayer::setSource(const sp &source) { mSource = source; } -void AudioPlayer::start() { +status_t AudioPlayer::start() { CHECK(!mStarted); CHECK(mSource != NULL); status_t err = mSource->start(); - CHECK_EQ(err, OK); + + if (err != OK) { + return err; + } sp format = mSource->getFormat(); const char *mime; @@ -83,7 +86,11 @@ void AudioPlayer::start() { mSampleRate, numChannels, AudioSystem::PCM_16_BIT, DEFAULT_AUDIOSINK_BUFFERCOUNT, &AudioPlayer::AudioSinkCallback, this); - CHECK_EQ(err, OK); + if (err != OK) { + mSource->stop(); + + return err; + } mLatencyUs = (int64_t)mAudioSink->latency() * 1000; mFrameSize = mAudioSink->frameSize(); @@ -97,7 +104,14 @@ void AudioPlayer::start() { : AudioSystem::CHANNEL_OUT_MONO, 8192, 0, &AudioCallback, this, 0); - CHECK_EQ(mAudioTrack->initCheck(), OK); + if (mAudioTrack->initCheck() != OK) { + delete mAudioTrack; + mAudioTrack = NULL; + + mSource->stop(); + + return mAudioTrack->initCheck(); + } mLatencyUs = (int64_t)mAudioTrack->latency() * 1000; mFrameSize = mAudioTrack->frameSize(); @@ -106,6 +120,8 @@ void AudioPlayer::start() { } mStarted = true; + + return OK; } void AudioPlayer::pause() { diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp index 85019aae02cbd..4e7738e637c38 100644 --- a/media/libstagefright/AwesomePlayer.cpp +++ b/media/libstagefright/AwesomePlayer.cpp @@ -378,7 +378,16 @@ status_t AwesomePlayer::play() { &AwesomePlayer::AudioNotify, this); mAudioPlayer->setSource(mAudioSource); - mAudioPlayer->start(); + status_t err = mAudioPlayer->start(); + + if (err != OK) { + delete mAudioPlayer; + mAudioPlayer = NULL; + + mFlags &= ~(PLAYING | FIRST_FRAME); + + return err; + } delete mTimeSource; mTimeSource = mAudioPlayer;