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

Commit 528c8403 authored by Andy Hung's avatar Andy Hung
Browse files

NuPlayerRenderer: Reduce calls into AudioTrack::getTimestamp

Bug: 26513187
Change-Id: I2e1792fedd81f95272485b0122f1dfe04113f1ac
parent e8c8ed47
Loading
Loading
Loading
Loading
+17 −5
Original line number Diff line number Diff line
@@ -72,6 +72,8 @@ static const int64_t kOffloadPauseMaxUs = 10000000ll;
// Maximum allowed delay from AudioSink, 1.5 seconds.
static const int64_t kMaxAllowedAudioSinkDelayUs = 1500000ll;

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

// static
const NuPlayer::Renderer::PcmInfo NuPlayer::Renderer::AUDIO_PCMINFO_INITIALIZER = {
        AUDIO_CHANNEL_NONE,
@@ -116,6 +118,7 @@ NuPlayer::Renderer::Renderer(
      mVideoRenderingStartGeneration(0),
      mAudioRenderingStartGeneration(0),
      mRenderingDataDelivered(false),
      mNextAudioClockUpdateTimeUs(-1),
      mLastAudioMediaTimeUs(-1),
      mAudioOffloadPauseTimeoutGeneration(0),
      mAudioTornDown(false),
@@ -1039,12 +1042,20 @@ void NuPlayer::Renderer::onNewAudioMediaTime(int64_t mediaTimeUs) {
    }
    setAudioFirstAnchorTimeIfNeeded_l(mediaTimeUs);

    // mNextAudioClockUpdateTimeUs is -1 if we're waiting for audio sink to start
    if (mNextAudioClockUpdateTimeUs == -1) {
        AudioTimestamp ts;
    status_t res = mAudioSink->getTimestamp(ts);
        if (mAudioSink->getTimestamp(ts) == OK && ts.mPosition > 0) {
            mNextAudioClockUpdateTimeUs = 0; // start our clock updates
        }
    }
    int64_t nowUs = ALooper::GetNowUs();
    if (res == OK) {
    if (mNextAudioClockUpdateTimeUs >= 0) {
        if (nowUs >= mNextAudioClockUpdateTimeUs) {
            int64_t nowMediaUs = mediaTimeUs - getPendingAudioPlayoutDurationUs(nowUs);
            mMediaClock->updateAnchor(nowMediaUs, nowUs, mediaTimeUs);
            mNextAudioClockUpdateTimeUs = nowUs + kMinimumAudioClockUpdatePeriodUs;
        }
    } else {
        int64_t unused;
        if ((mMediaClock->getMediaTime(nowUs, &unused) != OK)
@@ -1478,6 +1489,7 @@ void NuPlayer::Renderer::onFlush(const sp<AMessage> &msg) {
            }
            mNumFramesWritten = 0;
        }
        mNextAudioClockUpdateTimeUs = -1;
    } else {
        flushQueue(&mVideoQueue);

+1 −0
Original line number Diff line number Diff line
@@ -179,6 +179,7 @@ private:
    int32_t mAudioRenderingStartGeneration;
    bool mRenderingDataDelivered;

    int64_t mNextAudioClockUpdateTimeUs;
    // the media timestamp of last audio sample right before EOS.
    int64_t mLastAudioMediaTimeUs;