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

Commit 22fc52f6 authored by Andreas Huber's avatar Andreas Huber
Browse files

Some more fixes regarding HTTP live in NuPlayer.

Change-Id: I9e29615fa8ee6c7bd4189373a75c20caef3fd2b1
parent 43c3e6ce
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -79,7 +79,7 @@ bool NuPlayer::HTTPLiveSource::feedMoreTSData() {
    sp<LiveDataSource> source =
        static_cast<LiveDataSource *>(mLiveSession->getDataSource().get());

    for (int32_t i = 0; i < 10; ++i) {
    for (int32_t i = 0; i < 50; ++i) {
        char buffer[188];
        ssize_t n = source->readAtNonBlocking(mOffset, buffer, sizeof(buffer));

+4 −10
Original line number Diff line number Diff line
@@ -394,7 +394,7 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
            int64_t seekTimeUs;
            CHECK(msg->findInt64("seekTimeUs", &seekTimeUs));

            LOGI("kWhatSeek seekTimeUs=%lld us (%.2f secs)",
            LOGV("kWhatSeek seekTimeUs=%lld us (%.2f secs)",
                 seekTimeUs, seekTimeUs / 1E6);

            mSource->seekTo(seekTimeUs);
@@ -428,17 +428,11 @@ void NuPlayer::finishFlushIfPossible() {

    mRenderer->signalTimeDiscontinuity();

    bool scanSourcesAgain = false;

    if (mFlushingAudio == SHUT_DOWN) {
        scanSourcesAgain = true;
    } else if (mAudioDecoder != NULL) {
    if (mAudioDecoder != NULL) {
        mAudioDecoder->signalResume();
    }

    if (mFlushingVideo == SHUT_DOWN) {
        scanSourcesAgain = true;
    } else if (mVideoDecoder != NULL) {
    if (mVideoDecoder != NULL) {
        mVideoDecoder->signalResume();
    }

@@ -453,7 +447,7 @@ void NuPlayer::finishFlushIfPossible() {
    } else if (mResetPostponed) {
        (new AMessage(kWhatReset, id()))->post();
        mResetPostponed = false;
    } else if (scanSourcesAgain) {
    } else if (mAudioDecoder == NULL || mVideoDecoder == NULL) {
        postScanSources();
    }
}
+17 −3
Original line number Diff line number Diff line
@@ -385,6 +385,7 @@ void LiveSession::onDownloadNext() {
    }

    bool explicitDiscontinuity = false;
    bool bandwidthChanged = false;

    if (mSeekTimeUs >= 0) {
        int32_t targetDuration;
@@ -404,7 +405,14 @@ void LiveSession::onDownloadNext() {

                    mDataSource->reset();

                    // reseting the data source will have had the
                    // side effect of discarding any previously queued
                    // bandwidth change discontinuity.
                    // Therefore we'll need to treat these explicit
                    // discontinuities as involving a bandwidth change
                    // even if they aren't directly.
                    explicitDiscontinuity = true;
                    bandwidthChanged = true;
                }
            }
        }
@@ -484,9 +492,15 @@ void LiveSession::onDownloadNext() {
        return;
    }

    bool bandwidthChanged =
        mPrevBandwidthIndex >= 0
            && (size_t)mPrevBandwidthIndex != bandwidthIndex;
    if ((size_t)mPrevBandwidthIndex != bandwidthIndex) {
        bandwidthChanged = true;
    }

    if (mPrevBandwidthIndex < 0) {
        // Don't signal a bandwidth change at the very beginning of
        // playback.
        bandwidthChanged = false;
    }

    if (explicitDiscontinuity || bandwidthChanged) {
        // Signal discontinuity.
+0 −1
Original line number Diff line number Diff line
@@ -351,7 +351,6 @@ void ATSParser::Stream::signalDiscontinuity(DiscontinuityType type) {
            mQueue.clear(!isASeek);

            if (mSource != NULL) {
                mSource->clear();
                mSource->queueDiscontinuity(type);
            }
            break;
+13 −6
Original line number Diff line number Diff line
@@ -142,15 +142,22 @@ void AnotherPacketSource::queueDiscontinuity(

    Mutex::Autolock autoLock(mLock);

    mBuffers.push_back(buffer);
    mCondition.signal();
}
#if 0
    if (type == ATSParser::DISCONTINUITY_SEEK
            || type == ATSParser::DISCONTINUITY_FORMATCHANGE) {
        // XXX Fix this: This will also clear any pending discontinuities,
        // If there's a pending DISCONTINUITY_FORMATCHANGE and the new
        // discontinuity is "just" a DISCONTINUITY_SEEK, this will effectively
        // downgrade the type of discontinuity received by the client.

void AnotherPacketSource::clear() {
    Mutex::Autolock autoLock(mLock);
        mBuffers.clear();
        mEOSResult = OK;
    }
#endif

    mBuffers.push_back(buffer);
    mCondition.signal();
}

void AnotherPacketSource::signalEOS(status_t result) {
    CHECK(result != OK);
Loading