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

Commit 77028b27 authored by Ray Essick's avatar Ray Essick Committed by JP Sugarbroad
Browse files

better mpeg2 TS elementary stream Access Unit parsing

mpeg2 es stream access units have a 3 byte prefix and a 1 byte start
code. Searching for the next access unit started after the prefix
instead of after the start byte.

Bug: 74114680
Test: ran POC before/after
(cherry picked from commit 371066d0)
parent 67360f44
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -1486,7 +1486,9 @@ static ssize_t getNextChunkSize(
        const uint8_t *data, size_t size) {
    static const char kStartCode[] = "\x00\x00\x01";

    if (size < 3) {
    // per ISO/IEC 14496-2 6.2.1, a chunk has a 3-byte prefix + 1-byte start code
    // we need at least <prefix><start><next prefix> to successfully scan
    if (size < 3 + 1 + 3) {
        return -EAGAIN;
    }

@@ -1494,7 +1496,7 @@ static ssize_t getNextChunkSize(
        return -EAGAIN;
    }

    size_t offset = 3;
    size_t offset = 4;
    while (offset + 2 < size) {
        if (!memcmp(&data[offset], kStartCode, 3)) {
            return offset;
@@ -1545,6 +1547,9 @@ sp<ABuffer> ElementaryStreamQueue::dequeueAccessUnitMPEG4Video() {
                    state = EXPECT_VISUAL_OBJECT_START;
                } else {
                    discard = true;
                    offset += chunkSize;
                    ALOGW("b/74114680, advance to next chunk");
                    android_errorWriteLog(0x534e4554, "74114680");
                }
                break;
            }