Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a3f4384c authored by Andreas Huber's avatar Andreas Huber
Browse files

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

related-to-bug: 2355922
parent 703f0614
Loading
Loading
Loading
Loading
+14 −11
Original line number Diff line number Diff line
@@ -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;
+4 −2
Original line number Diff line number Diff line
@@ -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 &);
};