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

Commit f56d42cf authored by Ray Essick's avatar Ray Essick Committed by Automerger Merge Worker
Browse files

Fix NuMediaExtractor::readSampleData buffer Handling am: 84c69bca am:...

Fix NuMediaExtractor::readSampleData buffer Handling am: 84c69bca am: c2c61513 am: 63e84ef1 am: 9e14ac6b am: 14e71a39 am: 45057003 am: 5f037125 am: dc0875b8

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/av/+/22348680



Change-Id: Ibd8e19e73d93ea8c7e675834722289725728169f
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 18c7ad17 dc0875b8
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -639,9 +639,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;
@@ -690,6 +692,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;
    }
@@ -705,25 +709,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;
}