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

Commit 1225b932 authored by Wei Jia's avatar Wei Jia
Browse files

NuPlayerRenderer: handle fractional audio data before EOS

When audio reaches EOS and MediaClock has not started, use video
timestamp to start MediaClock.
Test: MediaPlayer sends MEDIA_PLAYBACK_COMPLETE
Bug: 122052445

Change-Id: Ia37643b8d5260cda0e7cde22dea883804511cff6
parent 8bd05d3c
Loading
Loading
Loading
Loading
+11 −5
Original line number Diff line number Diff line
@@ -1269,10 +1269,10 @@ void NuPlayer2::Renderer::postDrainVideoQueue() {
            mAnchorTimeMediaUs = mediaTimeUs;
        }
    }
    mNextVideoTimeMediaUs = mediaTimeUs + 100000;
    mNextVideoTimeMediaUs = mediaTimeUs;
    if (!mHasAudio) {
        // smooth out videos >= 10fps
        mMediaClock->updateMaxTimeMedia(mNextVideoTimeMediaUs);
        mMediaClock->updateMaxTimeMedia(mediaTimeUs + 100000);
    }

    if (!mVideoSampleReceived || mediaTimeUs < mAudioFirstAnchorTimeMediaUs) {
@@ -1406,10 +1406,16 @@ void NuPlayer2::Renderer::notifyEOS_l(bool audio, status_t finalResult, int64_t
        mHasAudio = false;
        if (mNextVideoTimeMediaUs >= 0) {
            int64_t mediaUs = 0;
            mMediaClock->getMediaTime(ALooper::GetNowUs(), &mediaUs);
            int64_t nowUs = ALooper::GetNowUs();
            status_t result = mMediaClock->getMediaTime(nowUs, &mediaUs);
            if (result == OK) {
                if (mNextVideoTimeMediaUs > mediaUs) {
                    mMediaClock->updateMaxTimeMedia(mNextVideoTimeMediaUs);
                }
            } else {
                mMediaClock->updateAnchor(
                        mNextVideoTimeMediaUs, nowUs, mNextVideoTimeMediaUs + 100000);
            }
        }
    }
}
+11 −5
Original line number Diff line number Diff line
@@ -1299,10 +1299,10 @@ void NuPlayer::Renderer::postDrainVideoQueue() {
            mAnchorTimeMediaUs = mediaTimeUs;
        }
    }
    mNextVideoTimeMediaUs = mediaTimeUs + 100000;
    mNextVideoTimeMediaUs = mediaTimeUs;
    if (!mHasAudio) {
        // smooth out videos >= 10fps
        mMediaClock->updateMaxTimeMedia(mNextVideoTimeMediaUs);
        mMediaClock->updateMaxTimeMedia(mediaTimeUs + 100000);
    }

    if (!mVideoSampleReceived || mediaTimeUs < mAudioFirstAnchorTimeMediaUs) {
@@ -1436,10 +1436,16 @@ void NuPlayer::Renderer::notifyEOS_l(bool audio, status_t finalResult, int64_t d
        mHasAudio = false;
        if (mNextVideoTimeMediaUs >= 0) {
            int64_t mediaUs = 0;
            mMediaClock->getMediaTime(ALooper::GetNowUs(), &mediaUs);
            int64_t nowUs = ALooper::GetNowUs();
            status_t result = mMediaClock->getMediaTime(nowUs, &mediaUs);
            if (result == OK) {
                if (mNextVideoTimeMediaUs > mediaUs) {
                    mMediaClock->updateMaxTimeMedia(mNextVideoTimeMediaUs);
                }
            } else {
                mMediaClock->updateAnchor(
                        mNextVideoTimeMediaUs, nowUs, mNextVideoTimeMediaUs + 100000);
            }
        }
    }
}