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

Commit 453d633b authored by Chong Zhang's avatar Chong Zhang Committed by Android (Google) Code Review
Browse files

Merge "render one video frame after flush even when we're paused" into lmp-dev

parents 97d547da fbe8bef8
Loading
Loading
Loading
Loading
+28 −15
Original line number Diff line number Diff line
@@ -58,7 +58,8 @@ NuPlayer::Renderer::Renderer(
      mVideoRenderingStartGeneration(0),
      mAudioRenderingStartGeneration(0),
      mLastPositionUpdateUs(-1ll),
      mVideoLateByUs(0ll) {
      mVideoLateByUs(0ll),
      mVideoSampleReceived(false) {
}

NuPlayer::Renderer::~Renderer() {
@@ -491,7 +492,9 @@ int64_t NuPlayer::Renderer::getAudioPendingPlayoutUs() {
}

void NuPlayer::Renderer::postDrainVideoQueue() {
    if (mDrainVideoQueuePending || mSyncQueues || mPaused) {
    if (mDrainVideoQueuePending
            || mSyncQueues
            || (mPaused && mVideoSampleReceived)) {
        return;
    }

@@ -570,8 +573,11 @@ void NuPlayer::Renderer::onDrainVideoQueue() {
        realTimeUs = mediaTimeUs - mAnchorTimeMediaUs + mAnchorTimeRealUs;
    }

    bool tooLate = false;

    if (!mPaused) {
        mVideoLateByUs = ALooper::GetNowUs() - realTimeUs;
    bool tooLate = (mVideoLateByUs > 40000);
        tooLate = (mVideoLateByUs > 40000);

        if (tooLate) {
            ALOGV("video late by %lld us (%.2f secs)",
@@ -581,18 +587,24 @@ void NuPlayer::Renderer::onDrainVideoQueue() {
                    (mFlags & FLAG_REAL_TIME ? realTimeUs :
                    (realTimeUs + mAnchorTimeMediaUs - mAnchorTimeRealUs)) / 1E6);
        }
    } else {
        mVideoLateByUs = 0ll;
    }

    entry->mNotifyConsumed->setInt32("render", !tooLate);
    entry->mNotifyConsumed->post();
    mVideoQueue.erase(mVideoQueue.begin());
    entry = NULL;

    mVideoSampleReceived = true;

    if (!mPaused) {
        if (!mVideoRenderingStarted) {
            mVideoRenderingStarted = true;
            notifyVideoRenderingStart();
        }

        notifyIfMediaRenderingStarted();
    }

    notifyPosition();
}
@@ -791,6 +803,7 @@ void NuPlayer::Renderer::onFlush(const sp<AMessage> &msg) {
        prepareForMediaRenderingStart();
    }

    mVideoSampleReceived = false;
    notifyFlushComplete(audio);
}

+1 −0
Original line number Diff line number Diff line
@@ -119,6 +119,7 @@ private:
    bool mSyncQueues;

    bool mPaused;
    bool mVideoSampleReceived;
    bool mVideoRenderingStarted;
    int32_t mVideoRenderingStartGeneration;
    int32_t mAudioRenderingStartGeneration;