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

Commit 87cbe8ae authored by Andreas Huber's avatar Andreas Huber Committed by Android Git Automerger
Browse files

am 88ba895b: Merge "Stop extrapolating audio time from the anchor if we\'re...

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

* commit '88ba895b':
  Stop extrapolating audio time from the anchor if we're paused or reached eos.
parents 8c21080d 88ba895b
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;
}