summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/AwesomePlayer.cpp
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2010-01-21 10:28:45 -0800
committerAndreas Huber <andih@google.com>2010-01-21 10:28:45 -0800
commit0726045216f576e97672ebeefc265d39c4ebaaa5 (patch)
treec98efa07de08f9cebd3d0dd33a1404b8168fdf9c /media/libstagefright/AwesomePlayer.cpp
parent570a3cb7582daa030cb38eedc5eb6a06f86ecc7f (diff)
downloadframeworks_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.cpp25
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;