diff options
author | Andreas Huber <andih@google.com> | 2010-09-28 11:56:39 -0700 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2010-09-28 11:56:39 -0700 |
commit | ed54ad0f8619ae416b0968ade6248894cbfc4dba (patch) | |
tree | 87a03bed454558ee3dee7826b9fb7e30fdf707b7 | |
parent | db6222212528637d8f2afa7f49fc3c8c915bafbe (diff) | |
download | frameworks_av-ed54ad0f8619ae416b0968ade6248894cbfc4dba.zip frameworks_av-ed54ad0f8619ae416b0968ade6248894cbfc4dba.tar.gz frameworks_av-ed54ad0f8619ae416b0968ade6248894cbfc4dba.tar.bz2 |
Instead of constantly polling the AudioPlayer to see if it reached EOS or finished seeking, initiate the notification from the AudioPlayer when the event happens.
Change-Id: I43875b6adaf96d4e982ef3dfc3d6c8f7034ac51d
related-to-bug: 3036592
-rw-r--r-- | include/media/stagefright/AudioPlayer.h | 6 | ||||
-rw-r--r-- | media/libstagefright/AudioPlayer.cpp | 16 | ||||
-rw-r--r-- | media/libstagefright/AwesomePlayer.cpp | 16 | ||||
-rw-r--r-- | media/libstagefright/include/AwesomePlayer.h | 3 |
4 files changed, 32 insertions, 9 deletions
diff --git a/include/media/stagefright/AudioPlayer.h b/include/media/stagefright/AudioPlayer.h index 9a09586..ed2f7d7 100644 --- a/include/media/stagefright/AudioPlayer.h +++ b/include/media/stagefright/AudioPlayer.h @@ -27,6 +27,7 @@ namespace android { class MediaSource; class AudioTrack; +class AwesomePlayer; class AudioPlayer : public TimeSource { public: @@ -35,7 +36,9 @@ public: SEEK_COMPLETE }; - AudioPlayer(const sp<MediaPlayerBase::AudioSink> &audioSink); + AudioPlayer(const sp<MediaPlayerBase::AudioSink> &audioSink, + AwesomePlayer *audioObserver = NULL); + virtual ~AudioPlayer(); // Caller retains ownership of "source". @@ -91,6 +94,7 @@ private: MediaBuffer *mFirstBuffer; sp<MediaPlayerBase::AudioSink> mAudioSink; + AwesomePlayer *mObserver; static void AudioCallback(int event, void *user, void *info); void AudioCallback(int event, void *info); diff --git a/media/libstagefright/AudioPlayer.cpp b/media/libstagefright/AudioPlayer.cpp index c27cfc8..47a385d 100644 --- a/media/libstagefright/AudioPlayer.cpp +++ b/media/libstagefright/AudioPlayer.cpp @@ -27,9 +27,13 @@ #include <media/stagefright/MediaSource.h> #include <media/stagefright/MetaData.h> +#include "include/AwesomePlayer.h" + namespace android { -AudioPlayer::AudioPlayer(const sp<MediaPlayerBase::AudioSink> &audioSink) +AudioPlayer::AudioPlayer( + const sp<MediaPlayerBase::AudioSink> &audioSink, + AwesomePlayer *observer) : mAudioTrack(NULL), mInputBuffer(NULL), mSampleRate(0), @@ -45,7 +49,8 @@ AudioPlayer::AudioPlayer(const sp<MediaPlayerBase::AudioSink> &audioSink) mIsFirstBuffer(false), mFirstBufferResult(OK), mFirstBuffer(NULL), - mAudioSink(audioSink) { + mAudioSink(audioSink), + mObserver(observer) { } AudioPlayer::~AudioPlayer() { @@ -301,6 +306,9 @@ size_t AudioPlayer::fillBuffer(void *data, size_t size) { } mSeeking = false; + if (mObserver) { + mObserver->postAudioSeekComplete(); + } } } @@ -323,6 +331,10 @@ size_t AudioPlayer::fillBuffer(void *data, size_t size) { Mutex::Autolock autoLock(mLock); if (err != OK) { + if (mObserver && !mReachedEOS) { + mObserver->postAudioEOS(); + } + mReachedEOS = true; mFinalStatus = err; break; diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp index 8507afc..12022bd 100644 --- a/media/libstagefright/AwesomePlayer.cpp +++ b/media/libstagefright/AwesomePlayer.cpp @@ -639,7 +639,7 @@ status_t AwesomePlayer::play_l() { if (mAudioSource != NULL) { if (mAudioPlayer == NULL) { if (mAudioSink != NULL) { - mAudioPlayer = new AudioPlayer(mAudioSink); + mAudioPlayer = new AudioPlayer(mAudioSink, this); mAudioPlayer->setSource(mAudioSource); // We've already started the MediaSource in order to enable @@ -666,8 +666,6 @@ status_t AwesomePlayer::play_l() { } else { mAudioPlayer->resume(); } - - postCheckAudioStatusEvent_l(); } if (mTimeSource == NULL && mAudioPlayer == NULL) { @@ -1169,7 +1167,7 @@ void AwesomePlayer::postCheckAudioStatusEvent_l() { return; } mAudioStatusEventPending = true; - mQueue.postEventWithDelay(mCheckAudioStatusEvent, 100000ll); + mQueue.postEvent(mCheckAudioStatusEvent); } void AwesomePlayer::onCheckAudioStatus() { @@ -1200,8 +1198,6 @@ void AwesomePlayer::onCheckAudioStatus() { mFlags |= FIRST_FRAME; postStreamDoneEvent_l(finalStatus); } - - postCheckAudioStatusEvent_l(); } status_t AwesomePlayer::prepare() { @@ -1662,5 +1658,13 @@ uint32_t AwesomePlayer::flags() const { return mExtractorFlags; } +void AwesomePlayer::postAudioEOS() { + postCheckAudioStatusEvent_l(); +} + +void AwesomePlayer::postAudioSeekComplete() { + postCheckAudioStatusEvent_l(); +} + } // namespace android diff --git a/media/libstagefright/include/AwesomePlayer.h b/media/libstagefright/include/AwesomePlayer.h index 1f3946c..600faca 100644 --- a/media/libstagefright/include/AwesomePlayer.h +++ b/media/libstagefright/include/AwesomePlayer.h @@ -92,6 +92,9 @@ struct AwesomePlayer { // This is a mask of MediaExtractor::Flags. uint32_t flags() const; + void postAudioEOS(); + void postAudioSeekComplete(); + private: friend struct AwesomeEvent; |