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

Commit 6ffb1fd6 authored by Robert Shih's avatar Robert Shih
Browse files

NuPlayer: pass media time to selectTrack for responsiveness

Bug: 18020001
Change-Id: Id50f8473992f39d8c0aa86a1fabb2601093d2572
parent 35b0f709
Loading
Loading
Loading
Loading
+23 −3
Original line number Original line Diff line number Diff line
@@ -999,11 +999,12 @@ ssize_t NuPlayer::GenericSource::doGetSelectedTrack(media_track_type type) const
    return -1;
    return -1;
}
}


status_t NuPlayer::GenericSource::selectTrack(size_t trackIndex, bool select) {
status_t NuPlayer::GenericSource::selectTrack(size_t trackIndex, bool select, int64_t timeUs) {
    ALOGV("%s track: %zu", select ? "select" : "deselect", trackIndex);
    ALOGV("%s track: %zu", select ? "select" : "deselect", trackIndex);
    sp<AMessage> msg = new AMessage(kWhatSelectTrack, id());
    sp<AMessage> msg = new AMessage(kWhatSelectTrack, id());
    msg->setInt32("trackIndex", trackIndex);
    msg->setInt32("trackIndex", trackIndex);
    msg->setInt32("select", select);
    msg->setInt32("select", select);
    msg->setInt64("timeUs", timeUs);


    sp<AMessage> response;
    sp<AMessage> response;
    status_t err = msg->postAndAwaitResponse(&response);
    status_t err = msg->postAndAwaitResponse(&response);
@@ -1016,11 +1017,13 @@ status_t NuPlayer::GenericSource::selectTrack(size_t trackIndex, bool select) {


void NuPlayer::GenericSource::onSelectTrack(sp<AMessage> msg) {
void NuPlayer::GenericSource::onSelectTrack(sp<AMessage> msg) {
    int32_t trackIndex, select;
    int32_t trackIndex, select;
    int64_t timeUs;
    CHECK(msg->findInt32("trackIndex", &trackIndex));
    CHECK(msg->findInt32("trackIndex", &trackIndex));
    CHECK(msg->findInt32("select", &select));
    CHECK(msg->findInt32("select", &select));
    CHECK(msg->findInt64("timeUs", &timeUs));


    sp<AMessage> response = new AMessage;
    sp<AMessage> response = new AMessage;
    status_t err = doSelectTrack(trackIndex, select);
    status_t err = doSelectTrack(trackIndex, select, timeUs);
    response->setInt32("err", err);
    response->setInt32("err", err);


    uint32_t replyID;
    uint32_t replyID;
@@ -1028,7 +1031,7 @@ void NuPlayer::GenericSource::onSelectTrack(sp<AMessage> msg) {
    response->postReply(replyID);
    response->postReply(replyID);
}
}


status_t NuPlayer::GenericSource::doSelectTrack(size_t trackIndex, bool select) {
status_t NuPlayer::GenericSource::doSelectTrack(size_t trackIndex, bool select, int64_t timeUs) {
    if (trackIndex >= mSources.size()) {
    if (trackIndex >= mSources.size()) {
        return BAD_INDEX;
        return BAD_INDEX;
    }
    }
@@ -1081,6 +1084,23 @@ status_t NuPlayer::GenericSource::doSelectTrack(size_t trackIndex, bool select)
            mFetchTimedTextDataGeneration++;
            mFetchTimedTextDataGeneration++;
        }
        }


        status_t eosResult; // ignored
        if (mSubtitleTrack.mSource != NULL
                && !mSubtitleTrack.mPackets->hasBufferAvailable(&eosResult)) {
            sp<AMessage> msg = new AMessage(kWhatFetchSubtitleData, id());
            msg->setInt64("timeUs", timeUs);
            msg->setInt32("generation", mFetchSubtitleDataGeneration);
            msg->post();
        }

        if (mTimedTextTrack.mSource != NULL
                && !mTimedTextTrack.mPackets->hasBufferAvailable(&eosResult)) {
            sp<AMessage> msg = new AMessage(kWhatFetchTimedTextData, id());
            msg->setInt64("timeUs", timeUs);
            msg->setInt32("generation", mFetchTimedTextDataGeneration);
            msg->post();
        }

        return OK;
        return OK;
    } else if (!strncasecmp(mime, "audio/", 6) || !strncasecmp(mime, "video/", 6)) {
    } else if (!strncasecmp(mime, "audio/", 6) || !strncasecmp(mime, "video/", 6)) {
        bool audio = !strncasecmp(mime, "audio/", 6);
        bool audio = !strncasecmp(mime, "audio/", 6);
+2 −2
Original line number Original line Diff line number Diff line
@@ -67,7 +67,7 @@ struct NuPlayer::GenericSource : public NuPlayer::Source {
    virtual size_t getTrackCount() const;
    virtual size_t getTrackCount() const;
    virtual sp<AMessage> getTrackInfo(size_t trackIndex) const;
    virtual sp<AMessage> getTrackInfo(size_t trackIndex) const;
    virtual ssize_t getSelectedTrack(media_track_type type) const;
    virtual ssize_t getSelectedTrack(media_track_type type) const;
    virtual status_t selectTrack(size_t trackIndex, bool select);
    virtual status_t selectTrack(size_t trackIndex, bool select, int64_t timeUs);
    virtual status_t seekTo(int64_t seekTimeUs);
    virtual status_t seekTo(int64_t seekTimeUs);


    virtual status_t setBuffers(bool audio, Vector<MediaBuffer *> &buffers);
    virtual status_t setBuffers(bool audio, Vector<MediaBuffer *> &buffers);
@@ -164,7 +164,7 @@ private:
    ssize_t doGetSelectedTrack(media_track_type type) const;
    ssize_t doGetSelectedTrack(media_track_type type) const;


    void onSelectTrack(sp<AMessage> msg);
    void onSelectTrack(sp<AMessage> msg);
    status_t doSelectTrack(size_t trackIndex, bool select);
    status_t doSelectTrack(size_t trackIndex, bool select, int64_t timeUs);


    void onSeek(sp<AMessage> msg);
    void onSeek(sp<AMessage> msg);
    status_t doSeek(int64_t seekTimeUs);
    status_t doSeek(int64_t seekTimeUs);
+1 −1
Original line number Original line Diff line number Diff line
@@ -147,7 +147,7 @@ ssize_t NuPlayer::HTTPLiveSource::getSelectedTrack(media_track_type type) const
    }
    }
}
}


status_t NuPlayer::HTTPLiveSource::selectTrack(size_t trackIndex, bool select) {
status_t NuPlayer::HTTPLiveSource::selectTrack(size_t trackIndex, bool select, int64_t /*timeUs*/) {
    status_t err = mLiveSession->selectTrack(trackIndex, select);
    status_t err = mLiveSession->selectTrack(trackIndex, select);


    if (err == OK) {
    if (err == OK) {
+1 −1
Original line number Original line Diff line number Diff line
@@ -43,7 +43,7 @@ struct NuPlayer::HTTPLiveSource : public NuPlayer::Source {
    virtual size_t getTrackCount() const;
    virtual size_t getTrackCount() const;
    virtual sp<AMessage> getTrackInfo(size_t trackIndex) const;
    virtual sp<AMessage> getTrackInfo(size_t trackIndex) const;
    virtual ssize_t getSelectedTrack(media_track_type /* type */) const;
    virtual ssize_t getSelectedTrack(media_track_type /* type */) const;
    virtual status_t selectTrack(size_t trackIndex, bool select);
    virtual status_t selectTrack(size_t trackIndex, bool select, int64_t timeUs);
    virtual status_t seekTo(int64_t seekTimeUs);
    virtual status_t seekTo(int64_t seekTimeUs);


protected:
protected:
+5 −2
Original line number Original line Diff line number Diff line
@@ -453,8 +453,10 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {


            size_t trackIndex;
            size_t trackIndex;
            int32_t select;
            int32_t select;
            int64_t timeUs;
            CHECK(msg->findSize("trackIndex", &trackIndex));
            CHECK(msg->findSize("trackIndex", &trackIndex));
            CHECK(msg->findInt32("select", &select));
            CHECK(msg->findInt32("select", &select));
            CHECK(msg->findInt64("timeUs", &timeUs));


            status_t err = INVALID_OPERATION;
            status_t err = INVALID_OPERATION;


@@ -468,7 +470,7 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
            }
            }


            if (trackIndex < inbandTracks) {
            if (trackIndex < inbandTracks) {
                err = mSource->selectTrack(trackIndex, select);
                err = mSource->selectTrack(trackIndex, select, timeUs);


                if (!select && err == OK) {
                if (!select && err == OK) {
                    int32_t type;
                    int32_t type;
@@ -1624,10 +1626,11 @@ status_t NuPlayer::getSelectedTrack(int32_t type, Parcel* reply) const {
    return err;
    return err;
}
}


status_t NuPlayer::selectTrack(size_t trackIndex, bool select) {
status_t NuPlayer::selectTrack(size_t trackIndex, bool select, int64_t timeUs) {
    sp<AMessage> msg = new AMessage(kWhatSelectTrack, id());
    sp<AMessage> msg = new AMessage(kWhatSelectTrack, id());
    msg->setSize("trackIndex", trackIndex);
    msg->setSize("trackIndex", trackIndex);
    msg->setInt32("select", select);
    msg->setInt32("select", select);
    msg->setInt64("timeUs", timeUs);


    sp<AMessage> response;
    sp<AMessage> response;
    status_t err = msg->postAndAwaitResponse(&response);
    status_t err = msg->postAndAwaitResponse(&response);
Loading