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

Commit 88ba895b authored by Andreas Huber's avatar Andreas Huber Committed by Android (Google) Code Review
Browse files

Merge "Stop extrapolating audio time from the anchor if we're paused or reached eos." into jb-dev

parents cd28dc10 a99a5bca
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -100,6 +100,7 @@ private:
    bool mAllowDeepBuffering;       // allow audio deep audio buffers. Helps with low power audio
                                    // playback but implies high latency
    AwesomePlayer *mObserver;
    int64_t mPinnedTimeUs;

    static void AudioCallback(int event, void *user, void *info);
    void AudioCallback(int event, void *info);
+19 −2
Original line number Diff line number Diff line
@@ -54,7 +54,8 @@ AudioPlayer::AudioPlayer(
      mFirstBuffer(NULL),
      mAudioSink(audioSink),
      mAllowDeepBuffering(allowDeepBuffering),
      mObserver(observer) {
      mObserver(observer),
      mPinnedTimeUs(-1ll) {
}

AudioPlayer::~AudioPlayer() {
@@ -187,6 +188,7 @@ status_t AudioPlayer::start(bool sourceAlreadyStarted) {
    }

    mStarted = true;
    mPinnedTimeUs = -1ll;

    return OK;
}
@@ -209,6 +211,8 @@ void AudioPlayer::pause(bool playPendingSamples) {
        } else {
            mAudioTrack->pause();
        }

        mPinnedTimeUs = ALooper::GetNowUs();
    }
}

@@ -490,6 +494,12 @@ size_t AudioPlayer::fillBuffer(void *data, size_t size) {
        Mutex::Autolock autoLock(mLock);
        mNumFramesPlayed += size_done / mFrameSize;
        mNumFramesPlayedSysTimeUs = ALooper::GetNowUs();

        if (mReachedEOS) {
            mPinnedTimeUs = mNumFramesPlayedSysTimeUs;
        } else {
            mPinnedTimeUs = -1ll;
        }
    }

    if (postEOS) {
@@ -516,7 +526,14 @@ int64_t AudioPlayer::getRealTimeUsLocked() const {
    // Compensate for large audio buffers, updates of mNumFramesPlayed
    // are less frequent, therefore to get a "smoother" notion of time we
    // compensate using system time.
    int64_t diffUs = ALooper::GetNowUs() - mNumFramesPlayedSysTimeUs;
    int64_t diffUs;
    if (mPinnedTimeUs >= 0ll) {
        diffUs = mPinnedTimeUs;
    } else {
        diffUs = ALooper::GetNowUs();
    }

    diffUs -= mNumFramesPlayedSysTimeUs;

    return result + diffUs;
}