diff options
Diffstat (limited to 'media')
-rw-r--r-- | media/libstagefright/AwesomePlayer.cpp | 25 | ||||
-rw-r--r-- | media/libstagefright/include/AwesomePlayer.h | 6 |
2 files changed, 18 insertions, 13 deletions
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp index 6bcdfba..cc45114 100644 --- a/media/libstagefright/AwesomePlayer.cpp +++ b/media/libstagefright/AwesomePlayer.cpp @@ -139,7 +139,7 @@ void AwesomePlayer::cancelPlayerEvents() { mStreamDoneEventPending = false; } -void AwesomePlayer::setListener(const sp<MediaPlayerBase> &listener) { +void AwesomePlayer::setListener(const wp<MediaPlayerBase> &listener) { Mutex::Autolock autoLock(mLock); mListener = listener; } @@ -268,10 +268,7 @@ void AwesomePlayer::AudioNotify(void *_me, int what) { case AudioPlayer::SEEK_COMPLETE: { - if (me->mListener != NULL) { - me->mListener->sendEvent(MEDIA_SEEK_COMPLETE); - } - + me->notifyListener_l(MEDIA_SEEK_COMPLETE); break; } @@ -281,6 +278,16 @@ void AwesomePlayer::AudioNotify(void *_me, int what) { } } +void AwesomePlayer::notifyListener_l(int msg) { + if (mListener != NULL) { + sp<MediaPlayerBase> listener = mListener.promote(); + + if (listener != NULL) { + listener->sendEvent(msg); + } + } +} + void AwesomePlayer::onStreamDone() { // Posted whenever any stream finishes playing. @@ -294,9 +301,7 @@ void AwesomePlayer::onStreamDone() { postVideoEvent_l(); } } else { - if (mListener != NULL) { - mListener->sendEvent(MEDIA_PLAYBACK_COMPLETE); - } + notifyListener_l(MEDIA_PLAYBACK_COMPLETE); pause_l(); } @@ -643,9 +648,7 @@ void AwesomePlayer::onEvent(int32_t code) { } else { // If we're playing video only, report seek complete now, // otherwise audio player will notify us later. - if (mListener != NULL) { - mListener->sendEvent(MEDIA_SEEK_COMPLETE); - } + notifyListener_l(MEDIA_SEEK_COMPLETE); } mFlags |= FIRST_FRAME; diff --git a/media/libstagefright/include/AwesomePlayer.h b/media/libstagefright/include/AwesomePlayer.h index 37b14eb..b28a12c 100644 --- a/media/libstagefright/include/AwesomePlayer.h +++ b/media/libstagefright/include/AwesomePlayer.h @@ -46,7 +46,7 @@ struct AwesomePlayer { AwesomePlayer(); ~AwesomePlayer(); - void setListener(const sp<MediaPlayerBase> &listener); + void setListener(const wp<MediaPlayerBase> &listener); status_t setDataSource(const char *uri); status_t setDataSource(int fd, int64_t offset, int64_t length); @@ -82,7 +82,7 @@ private: OMXClient mClient; TimedEventQueue mQueue; - sp<MediaPlayerBase> mListener; + wp<MediaPlayerBase> mListener; sp<ISurface> mISurface; sp<MediaPlayerBase::AudioSink> mAudioSink; @@ -133,6 +133,8 @@ private: static void AudioNotify(void *me, int what); void onStreamDone(); + void notifyListener_l(int msg); + AwesomePlayer(const AwesomePlayer &); AwesomePlayer &operator=(const AwesomePlayer &); }; |