Merge "Fix circular dependency between StagefrightPlayer and AwesomePlayer that prevented proper cleanup."
This commit is contained in:
committed by
Android (Google) Code Review
commit
48da344cf0
@@ -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;
|
||||
|
||||
@@ -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 &);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user