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

Commit 1b55817b authored by Andreas Huber's avatar Andreas Huber Committed by Android (Google) Code Review
Browse files

Merge "Fix circular dependency between StagefrightPlayer and AwesomePlayer...

Merge "Fix circular dependency between StagefrightPlayer and AwesomePlayer that prevented proper cleanup."
parents b49676a5 07260452
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 &);
};