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

Commit bb9a36c2 authored by Dan Austin's avatar Dan Austin Committed by Android Git Automerger
Browse files

am 54b3c3c7: am 6c4cf7fb: Merge "Fix benign overflow in AudioTrack"

* commit '54b3c3c7':
  Fix benign overflow in AudioTrack
parents 9977b476 54b3c3c7
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -2147,8 +2147,7 @@ uint32_t AudioTrack::updateAndGetPosition_l()
{
    // This is the sole place to read server consumed frames
    uint32_t newServer = mProxy->getPosition();
    int32_t delta = newServer - mServer;
    mServer = newServer;
    uint32_t delta = newServer > mServer ? newServer - mServer : 0;
    // TODO There is controversy about whether there can be "negative jitter" in server position.
    //      This should be investigated further, and if possible, it should be addressed.
    //      A more definite failure mode is infrequent polling by client.
@@ -2157,11 +2156,12 @@ uint32_t AudioTrack::updateAndGetPosition_l()
    //      That should ensure delta never goes negative for infrequent polling
    //      unless the server has more than 2^31 frames in its buffer,
    //      in which case the use of uint32_t for these counters has bigger issues.
    if (delta < 0) {
        ALOGE("detected illegal retrograde motion by the server: mServer advanced by %d", delta);
        delta = 0;
    if (newServer < mServer) {
        ALOGE("detected illegal retrograde motion by the server: mServer advanced by %d",
              (int32_t) newServer - mServer);
    }
    return mPosition += (uint32_t) delta;
    mServer = newServer;
    return mPosition += delta;
}

bool AudioTrack::isSampleRateSpeedAllowed_l(uint32_t sampleRate, float speed) const