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

Commit 48da344c 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 84a93a56 a3f4384c
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 &);
};