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

Commit 647b67ae authored by Wei Jia's avatar Wei Jia Committed by android-build-merger
Browse files

Merge "NuPlayerRenderer: allow video rendering after flushing audio" into qt-dev am: 6764012d

am: 1ce74477

Change-Id: I3adea38ce8dca538db1752edc8fa132c992c9f13
parents bbd3d66f 1ce74477
Loading
Loading
Loading
Loading
+17 −4
Original line number Diff line number Diff line
@@ -76,6 +76,10 @@ static const int64_t kMaxAllowedAudioSinkDelayUs = 1500000LL;

static const int64_t kMinimumAudioClockUpdatePeriodUs = 20 /* msec */ * 1000;

// Default video frame display duration when only video exists.
// Used to set max media time in MediaClock.
static const int64_t kDefaultVideoFrameIntervalUs = 100000LL;

// static
const NuPlayer2::Renderer::PcmInfo NuPlayer2::Renderer::AUDIO_PCMINFO_INITIALIZER = {
        AUDIO_CHANNEL_NONE,
@@ -305,11 +309,11 @@ void NuPlayer2::Renderer::flush(bool audio, bool notifyComplete) {
            mNotifyCompleteVideo |= notifyComplete;
            ++mVideoQueueGeneration;
            ++mVideoDrainGeneration;
            mNextVideoTimeMediaUs = -1;
        }

        mMediaClock->clearAnchor();
        mVideoLateByUs = 0;
        mNextVideoTimeMediaUs = -1;
        mSyncQueues = false;
    }

@@ -1288,7 +1292,7 @@ void NuPlayer2::Renderer::postDrainVideoQueue() {
    mNextVideoTimeMediaUs = mediaTimeUs;
    if (!mHasAudio) {
        // smooth out videos >= 10fps
        mMediaClock->updateMaxTimeMedia(mediaTimeUs + 100000);
        mMediaClock->updateMaxTimeMedia(mediaTimeUs + kDefaultVideoFrameIntervalUs);
    }

    if (!mVideoSampleReceived || mediaTimeUs < mAudioFirstAnchorTimeMediaUs) {
@@ -1355,7 +1359,7 @@ void NuPlayer2::Renderer::onDrainVideoQueue() {
                    && mediaTimeUs > mLastAudioMediaTimeUs) {
                // If audio ends before video, video continues to drive media clock.
                // Also smooth out videos >= 10fps.
                mMediaClock->updateMaxTimeMedia(mediaTimeUs + 100000);
                mMediaClock->updateMaxTimeMedia(mediaTimeUs + kDefaultVideoFrameIntervalUs);
            }
        }
    } else {
@@ -1430,7 +1434,8 @@ void NuPlayer2::Renderer::notifyEOS_l(bool audio, status_t finalResult, int64_t
                }
            } else {
                mMediaClock->updateAnchor(
                        mNextVideoTimeMediaUs, nowUs, mNextVideoTimeMediaUs + 100000);
                        mNextVideoTimeMediaUs, nowUs,
                        mNextVideoTimeMediaUs + kDefaultVideoFrameIntervalUs);
            }
        }
    }
@@ -1583,6 +1588,14 @@ void NuPlayer2::Renderer::onFlush(const sp<AMessage> &msg) {
            notifyComplete = mNotifyCompleteAudio;
            mNotifyCompleteAudio = false;
            mLastAudioMediaTimeUs = -1;

            mHasAudio = false;
            if (mNextVideoTimeMediaUs >= 0) {
                int64_t nowUs = ALooper::GetNowUs();
                mMediaClock->updateAnchor(
                        mNextVideoTimeMediaUs, nowUs,
                        mNextVideoTimeMediaUs + kDefaultVideoFrameIntervalUs);
            }
        } else {
            notifyComplete = mNotifyCompleteVideo;
            mNotifyCompleteVideo = false;
+17 −4
Original line number Diff line number Diff line
@@ -77,6 +77,10 @@ static const int64_t kMaxAllowedAudioSinkDelayUs = 1500000LL;

static const int64_t kMinimumAudioClockUpdatePeriodUs = 20 /* msec */ * 1000;

// Default video frame display duration when only video exists.
// Used to set max media time in MediaClock.
static const int64_t kDefaultVideoFrameIntervalUs = 100000LL;

// static
const NuPlayer::Renderer::PcmInfo NuPlayer::Renderer::AUDIO_PCMINFO_INITIALIZER = {
        AUDIO_CHANNEL_NONE,
@@ -314,11 +318,11 @@ void NuPlayer::Renderer::flush(bool audio, bool notifyComplete) {
            mNotifyCompleteVideo |= notifyComplete;
            ++mVideoQueueGeneration;
            ++mVideoDrainGeneration;
            mNextVideoTimeMediaUs = -1;
        }

        mMediaClock->clearAnchor();
        mVideoLateByUs = 0;
        mNextVideoTimeMediaUs = -1;
        mSyncQueues = false;
    }

@@ -1302,7 +1306,7 @@ void NuPlayer::Renderer::postDrainVideoQueue() {
    mNextVideoTimeMediaUs = mediaTimeUs;
    if (!mHasAudio) {
        // smooth out videos >= 10fps
        mMediaClock->updateMaxTimeMedia(mediaTimeUs + 100000);
        mMediaClock->updateMaxTimeMedia(mediaTimeUs + kDefaultVideoFrameIntervalUs);
    }

    if (!mVideoSampleReceived || mediaTimeUs < mAudioFirstAnchorTimeMediaUs) {
@@ -1369,7 +1373,7 @@ void NuPlayer::Renderer::onDrainVideoQueue() {
                    && mediaTimeUs > mLastAudioMediaTimeUs) {
                // If audio ends before video, video continues to drive media clock.
                // Also smooth out videos >= 10fps.
                mMediaClock->updateMaxTimeMedia(mediaTimeUs + 100000);
                mMediaClock->updateMaxTimeMedia(mediaTimeUs + kDefaultVideoFrameIntervalUs);
            }
        }
    } else {
@@ -1444,7 +1448,8 @@ void NuPlayer::Renderer::notifyEOS_l(bool audio, status_t finalResult, int64_t d
                }
            } else {
                mMediaClock->updateAnchor(
                        mNextVideoTimeMediaUs, nowUs, mNextVideoTimeMediaUs + 100000);
                        mNextVideoTimeMediaUs, nowUs,
                        mNextVideoTimeMediaUs + kDefaultVideoFrameIntervalUs);
            }
        }
    }
@@ -1597,6 +1602,14 @@ void NuPlayer::Renderer::onFlush(const sp<AMessage> &msg) {
            notifyComplete = mNotifyCompleteAudio;
            mNotifyCompleteAudio = false;
            mLastAudioMediaTimeUs = -1;

            mHasAudio = false;
            if (mNextVideoTimeMediaUs >= 0) {
                int64_t nowUs = ALooper::GetNowUs();
                mMediaClock->updateAnchor(
                        mNextVideoTimeMediaUs, nowUs,
                        mNextVideoTimeMediaUs + kDefaultVideoFrameIntervalUs);
            }
        } else {
            notifyComplete = mNotifyCompleteVideo;
            mNotifyCompleteVideo = false;