diff options
author | Andreas Huber <andih@google.com> | 2010-01-21 10:28:45 -0800 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2010-01-21 10:28:45 -0800 |
commit | 0726045216f576e97672ebeefc265d39c4ebaaa5 (patch) | |
tree | c98efa07de08f9cebd3d0dd33a1404b8168fdf9c /media/libstagefright/AwesomePlayer.cpp | |
parent | 570a3cb7582daa030cb38eedc5eb6a06f86ecc7f (diff) | |
download | frameworks_av-0726045216f576e97672ebeefc265d39c4ebaaa5.zip frameworks_av-0726045216f576e97672ebeefc265d39c4ebaaa5.tar.gz frameworks_av-0726045216f576e97672ebeefc265d39c4ebaaa5.tar.bz2 |
Fix circular dependency between StagefrightPlayer and AwesomePlayer that prevented proper cleanup.
related-to-bug: 2355922
Diffstat (limited to 'media/libstagefright/AwesomePlayer.cpp')
-rw-r--r-- | media/libstagefright/AwesomePlayer.cpp | 25 |
1 files changed, 14 insertions, 11 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; |