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

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

Merge "Don't perform RTSP seeks right away but queue them for 200ms" into ics-mr1

parents 1906e5c7 ee736e9e
Loading
Loading
Loading
Loading
+26 −4
Original line number Diff line number Diff line
@@ -38,7 +38,8 @@ NuPlayer::RTSPSource::RTSPSource(
      mFlags(0),
      mState(DISCONNECTED),
      mFinalResult(OK),
      mDisconnectReplyID(0) {
      mDisconnectReplyID(0),
      mSeekGeneration(0) {
    if (headers) {
        mExtraHeaders = *headers;

@@ -146,14 +147,21 @@ status_t NuPlayer::RTSPSource::getDuration(int64_t *durationUs) {
}

status_t NuPlayer::RTSPSource::seekTo(int64_t seekTimeUs) {
    sp<AMessage> msg = new AMessage(kWhatPerformSeek, mReflector->id());
    msg->setInt32("generation", ++mSeekGeneration);
    msg->setInt64("timeUs", seekTimeUs);
    msg->post(200000ll);

    return OK;
}

void NuPlayer::RTSPSource::performSeek(int64_t seekTimeUs) {
    if (mState != CONNECTED) {
        return UNKNOWN_ERROR;
        return;
    }

    mState = SEEKING;
    mHandler->seek(seekTimeUs);

    return OK;
}

bool NuPlayer::RTSPSource::isSeekable() {
@@ -168,6 +176,20 @@ void NuPlayer::RTSPSource::onMessageReceived(const sp<AMessage> &msg) {
        mDisconnectReplyID = replyID;
        finishDisconnectIfPossible();
        return;
    } else if (msg->what() == kWhatPerformSeek) {
        int32_t generation;
        CHECK(msg->findInt32("generation", &generation));

        if (generation != mSeekGeneration) {
            // obsolete.
            return;
        }

        int64_t seekTimeUs;
        CHECK(msg->findInt64("timeUs", &seekTimeUs));

        performSeek(seekTimeUs);
        return;
    }

    CHECK_EQ(msg->what(), (int)kWhatNotify);
+5 −0
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ private:
    enum {
        kWhatNotify          = 'noti',
        kWhatDisconnect      = 'disc',
        kWhatPerformSeek     = 'seek',
    };

    enum State {
@@ -96,12 +97,16 @@ private:
    sp<AnotherPacketSource> mAudioTrack;
    sp<AnotherPacketSource> mVideoTrack;

    int32_t mSeekGeneration;

    sp<AnotherPacketSource> getSource(bool audio);

    void onConnected();
    void onDisconnected(const sp<AMessage> &msg);
    void finishDisconnectIfPossible();

    void performSeek(int64_t seekTimeUs);

    DISALLOW_EVIL_CONSTRUCTORS(RTSPSource);
};