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

Commit 56e84ba1 authored by Andreas Huber's avatar Andreas Huber
Browse files

Resize internal PES buffers dynamically instead of relying on a fixed maximum size.

Change-Id: Ibe720e6148799e32d039ccdb4b269659bc779952
parent 669ad13d
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -369,7 +369,18 @@ void ATSParser::Stream::parse(
    size_t payloadSizeBits = br->numBitsLeft();
    CHECK_EQ(payloadSizeBits % 8, 0u);

    CHECK_LE(mBuffer->size() + payloadSizeBits / 8, mBuffer->capacity());
    size_t neededSize = mBuffer->size() + payloadSizeBits / 8;
    if (mBuffer->capacity() < neededSize) {
        // Increment in multiples of 64K.
        neededSize = (neededSize + 65535) & ~65535;

        LOGI("resizing buffer to %d bytes", neededSize);

        sp<ABuffer> newBuffer = new ABuffer(neededSize);
        memcpy(newBuffer->data(), mBuffer->data(), mBuffer->size());
        newBuffer->setRange(0, mBuffer->size());
        mBuffer = newBuffer;
    }

    memcpy(mBuffer->data() + mBuffer->size(), br->data(), payloadSizeBits / 8);
    mBuffer->setRange(0, mBuffer->size() + payloadSizeBits / 8);