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

Commit 53a46c27 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Merge cherrypicks of ['googleplex-android-review.googlesource.com/22348680']...

Merge cherrypicks of ['googleplex-android-review.googlesource.com/22348680'] into security-aosp-rvc-release.

Change-Id: I1b29319fffe87bd6d6e0b6ae2c0c64e86bac703f
parents cf977af9 f8d8c0de
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -613,9 +613,11 @@ status_t NuMediaExtractor::appendVorbisNumPageSamples(
        numPageSamples = -1;
    }

    // insert, including accounting for the space used.
    memcpy((uint8_t *)buffer->data() + mbuf->range_length(),
           &numPageSamples,
           sizeof(numPageSamples));
    buffer->setRange(buffer->offset(), buffer->size() + sizeof(numPageSamples));

    uint32_t type;
    const void *data;
@@ -664,6 +666,8 @@ status_t NuMediaExtractor::readSampleData(const sp<ABuffer> &buffer) {

    ssize_t minIndex = fetchAllTrackSamples();

    buffer->setRange(0, 0);     // start with an empty buffer

    if (minIndex < 0) {
        return ERROR_END_OF_STREAM;
    }
@@ -679,25 +683,25 @@ status_t NuMediaExtractor::readSampleData(const sp<ABuffer> &buffer) {
        sampleSize += sizeof(int32_t);
    }

    // capacity() is ok since we cleared out the buffer
    if (buffer->capacity() < sampleSize) {
        return -ENOMEM;
    }

    const size_t srclen = it->mBuffer->range_length();
    const uint8_t *src =
        (const uint8_t *)it->mBuffer->data()
            + it->mBuffer->range_offset();

    memcpy((uint8_t *)buffer->data(), src, it->mBuffer->range_length());
    memcpy((uint8_t *)buffer->data(), src, srclen);
    buffer->setRange(0, srclen);

    status_t err = OK;
    if (info->mTrackFlags & kIsVorbis) {
        // adjusts range when it inserts the extra bits
        err = appendVorbisNumPageSamples(it->mBuffer, buffer);
    }

    if (err == OK) {
        buffer->setRange(0, sampleSize);
    }

    return err;
}