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

Commit 474d7c77 authored by Wei Jia's avatar Wei Jia
Browse files

NuPlayerRenderer: Update mAnchorMaxMediaUs when anchor time is changed to fix...

NuPlayerRenderer: Update mAnchorMaxMediaUs when anchor time is changed to fix pause-seek-getCurrentPosition.

NuPlayerDecoder: Notify resume is done when EOS is reached.

GenericSource: add code to signal pre-roll for seek so that it will seek to the requested position,
not only I-frame. This code is disabled temporarily till we have a full solution to handle both
single seek and continous seek gracefully.

Bug: 18625723
Change-Id: I99a54d4d549e0d805e3abcc227fbf96c16405af0
parent 9257000c
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -1179,6 +1179,7 @@ status_t NuPlayer::GenericSource::doSeek(int64_t seekTimeUs) {
sp<ABuffer> NuPlayer::GenericSource::mediaBufferToABuffer(
        MediaBuffer* mb,
        media_track_type trackType,
        int64_t /* seekTimeUs */,
        int64_t *actualTimeUs) {
    bool audio = trackType == MEDIA_TRACK_TYPE_AUDIO;
    size_t outLength = mb->range_length();
@@ -1216,6 +1217,16 @@ sp<ABuffer> NuPlayer::GenericSource::mediaBufferToABuffer(
    CHECK(mb->meta_data()->findInt64(kKeyTime, &timeUs));
    meta->setInt64("timeUs", timeUs);

#if 0
    // Temporarily disable pre-roll till we have a full solution to handle
    // both single seek and continous seek gracefully.
    if (seekTimeUs > timeUs) {
        sp<AMessage> extra = new AMessage;
        extra->setInt64("resume-at-mediaTimeUs", seekTimeUs);
        meta->setMessage("extra", extra);
    }
#endif

    if (trackType == MEDIA_TRACK_TYPE_TIMEDTEXT) {
        const char *mime;
        CHECK(mTimedTextTrack.mSource != NULL
@@ -1348,7 +1359,8 @@ void NuPlayer::GenericSource::readBuffer(
                track->mPackets->queueDiscontinuity( type, NULL, true /* discard */);
            }

            sp<ABuffer> buffer = mediaBufferToABuffer(mbuf, trackType, actualTimeUs);
            sp<ABuffer> buffer = mediaBufferToABuffer(
                    mbuf, trackType, seekTimeUs, actualTimeUs);
            track->mPackets->queueAccessUnit(buffer);
            formatChange = false;
            seeking = false;
+1 −0
Original line number Diff line number Diff line
@@ -182,6 +182,7 @@ private:
    sp<ABuffer> mediaBufferToABuffer(
            MediaBuffer *mbuf,
            media_track_type trackType,
            int64_t seekTimeUs,
            int64_t *actualTimeUs = NULL);

    void postReadBuffer(media_track_type trackType);
+1 −0
Original line number Diff line number Diff line
@@ -476,6 +476,7 @@ bool NuPlayer::Decoder::handleAnOutputBuffer() {
    buffer->meta()->setInt64("timeUs", timeUs);
    if (flags & MediaCodec::BUFFER_FLAG_EOS) {
        buffer->meta()->setInt32("eos", true);
        notifyResumeCompleteIfNecessary();
    }
    // we do not expect CODECCONFIG or SYNCFRAME for decoder

+1 −0
Original line number Diff line number Diff line
@@ -771,6 +771,7 @@ void NuPlayer::Renderer::postDrainVideoQueue() {

        if (mAnchorTimeMediaUs < 0) {
            setAnchorTime(mediaTimeUs, nowUs);
            mAnchorMaxMediaUs = mediaTimeUs;
            realTimeUs = nowUs;
        } else {
            realTimeUs = getRealTimeUs(mediaTimeUs, nowUs);