diff options
| author | Andreas Huber <andih@google.com> | 2010-10-07 12:21:33 -0700 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2010-10-07 12:21:33 -0700 |
| commit | a458719bb6ebbcce99d4dba43af4bd51c5a06216 (patch) | |
| tree | 6749676e32e62171ac2ae40dea62ad5ac2303981 | |
| parent | c5610a4c1308e2d52108131fbdef35e432a414b6 (diff) | |
| parent | 56ee1080f004110bff622e5b60c243d9cabfe120 (diff) | |
| download | frameworks_base-a458719bb6ebbcce99d4dba43af4bd51c5a06216.zip frameworks_base-a458719bb6ebbcce99d4dba43af4bd51c5a06216.tar.gz frameworks_base-a458719bb6ebbcce99d4dba43af4bd51c5a06216.tar.bz2 | |
am 56ee1080: am 17bc4f65: Merge "Make sure to call AudioTrack::stop() instead of AudioTrack::pause() after submitting all samples to AudioTrack to make sure those remaining samples are actually played out." into gingerbread
Merge commit '56ee1080f004110bff622e5b60c243d9cabfe120'
* commit '56ee1080f004110bff622e5b60c243d9cabfe120':
Make sure to call AudioTrack::stop() instead of AudioTrack::pause() after submitting all samples to AudioTrack to make sure those remaining samples are actually played out.
| -rw-r--r-- | include/media/stagefright/AudioPlayer.h | 6 | ||||
| -rw-r--r-- | media/libstagefright/AudioPlayer.cpp | 20 | ||||
| -rw-r--r-- | media/libstagefright/AwesomePlayer.cpp | 15 | ||||
| -rw-r--r-- | media/libstagefright/include/AwesomePlayer.h | 2 |
4 files changed, 29 insertions, 14 deletions
diff --git a/include/media/stagefright/AudioPlayer.h b/include/media/stagefright/AudioPlayer.h index ed2f7d7..37af032 100644 --- a/include/media/stagefright/AudioPlayer.h +++ b/include/media/stagefright/AudioPlayer.h @@ -49,11 +49,9 @@ public: status_t start(bool sourceAlreadyStarted = false); - void pause(); + void pause(bool playPendingSamples = false); void resume(); - void stop(); - // Returns the timestamp of the last buffer played (in us). int64_t getMediaTimeUs(); @@ -107,6 +105,8 @@ private: int64_t getRealTimeUsLocked() const; + void reset(); + AudioPlayer(const AudioPlayer &); AudioPlayer &operator=(const AudioPlayer &); }; diff --git a/media/libstagefright/AudioPlayer.cpp b/media/libstagefright/AudioPlayer.cpp index b314114..5ff934d 100644 --- a/media/libstagefright/AudioPlayer.cpp +++ b/media/libstagefright/AudioPlayer.cpp @@ -55,7 +55,7 @@ AudioPlayer::AudioPlayer( AudioPlayer::~AudioPlayer() { if (mStarted) { - stop(); + reset(); } } @@ -165,13 +165,21 @@ status_t AudioPlayer::start(bool sourceAlreadyStarted) { return OK; } -void AudioPlayer::pause() { +void AudioPlayer::pause(bool playPendingSamples) { CHECK(mStarted); - if (mAudioSink.get() != NULL) { - mAudioSink->pause(); + if (playPendingSamples) { + if (mAudioSink.get() != NULL) { + mAudioSink->stop(); + } else { + mAudioTrack->stop(); + } } else { - mAudioTrack->stop(); + if (mAudioSink.get() != NULL) { + mAudioSink->pause(); + } else { + mAudioTrack->pause(); + } } } @@ -185,7 +193,7 @@ void AudioPlayer::resume() { } } -void AudioPlayer::stop() { +void AudioPlayer::reset() { CHECK(mStarted); if (mAudioSink.get() != NULL) { diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp index 31c03ad..4f5ff75 100644 --- a/media/libstagefright/AwesomePlayer.cpp +++ b/media/libstagefright/AwesomePlayer.cpp @@ -579,7 +579,7 @@ void AwesomePlayer::onStreamDone() { notifyListener_l( MEDIA_ERROR, MEDIA_ERROR_UNKNOWN, mStreamDoneStatus); - pause_l(); + pause_l(true /* at eos */); mFlags |= AT_EOS; return; @@ -603,7 +603,7 @@ void AwesomePlayer::onStreamDone() { LOGV("MEDIA_PLAYBACK_COMPLETE"); notifyListener_l(MEDIA_PLAYBACK_COMPLETE); - pause_l(); + pause_l(true /* at eos */); mFlags |= AT_EOS; } @@ -752,7 +752,7 @@ status_t AwesomePlayer::pause() { return pause_l(); } -status_t AwesomePlayer::pause_l() { +status_t AwesomePlayer::pause_l(bool at_eos) { if (!(mFlags & PLAYING)) { return OK; } @@ -760,7 +760,14 @@ status_t AwesomePlayer::pause_l() { cancelPlayerEvents(true /* keepBufferingGoing */); if (mAudioPlayer != NULL) { - mAudioPlayer->pause(); + if (at_eos) { + // If we played the audio stream to completion we + // want to make sure that all samples remaining in the audio + // track's queue are played out. + mAudioPlayer->pause(true /* playPendingSamples */); + } else { + mAudioPlayer->pause(); + } } mFlags &= ~PLAYING; diff --git a/media/libstagefright/include/AwesomePlayer.h b/media/libstagefright/include/AwesomePlayer.h index db98253..e04a24d 100644 --- a/media/libstagefright/include/AwesomePlayer.h +++ b/media/libstagefright/include/AwesomePlayer.h @@ -223,7 +223,7 @@ private: status_t setDataSource_l(const sp<MediaExtractor> &extractor); void reset_l(); status_t seekTo_l(int64_t timeUs); - status_t pause_l(); + status_t pause_l(bool at_eos = false); void initRenderer_l(); void notifyVideoSize_l(); void seekAudioIfNecessary_l(); |
