Merge "Fix circular dependency between StagefrightPlayer and AwesomePlayer that prevented proper cleanup."

This commit is contained in:
Andreas Huber
2010-01-21 10:44:54 -08:00
committed by Android (Google) Code Review
2 changed files with 18 additions and 13 deletions

View File

@@ -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;

View File

@@ -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 &);
};