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

Commit 811b520a authored by Shunkai Yao's avatar Shunkai Yao
Browse files

Fix Visualizer capture size reset in wraparound

Bug: 271500140
Test: Youtube with 3rd part Visualizer
Merged-In: I82bda04b7d00c76f74f8082f78a54ef81152e908
Change-Id: I82bda04b7d00c76f74f8082f78a54ef81152e908
(cherry picked from commit b1ea0df0)
parent cbf1eb34
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -223,8 +223,7 @@ std::vector<uint8_t> VisualizerContext::capture() {
        deltaSamples = kMaxCaptureBufSize;
    }

    int32_t capturePoint;
    //capturePoint = (int32_t)mCaptureIdx - deltaSamples;
    int32_t capturePoint, captureSamples = mCaptureSamples;
    __builtin_sub_overflow((int32_t) mCaptureIdx, deltaSamples, &capturePoint);
    // a negative capturePoint means we wrap the buffer.
    if (capturePoint < 0) {
@@ -232,13 +231,14 @@ std::vector<uint8_t> VisualizerContext::capture() {
        if (size > mCaptureSamples) {
            size = mCaptureSamples;
        }
        // first part of two stages copy, capture to the end of buffer and reset the size/point
        result.insert(result.end(), &mCaptureBuf[kMaxCaptureBufSize + capturePoint],
                        &mCaptureBuf[kMaxCaptureBufSize + capturePoint + size]);
        mCaptureSamples -= size;
        captureSamples -= size;
        capturePoint = 0;
    }
    result.insert(result.end(), &mCaptureBuf[capturePoint],
                    &mCaptureBuf[capturePoint + mCaptureSamples]);
                  &mCaptureBuf[capturePoint + captureSamples]);
    mLastCaptureIdx = mCaptureIdx;
    return result;
}