diff options
author | Ray Essick <essick@google.com> | 2018-03-06 15:55:29 -0800 |
---|---|---|
committer | MSe <mse1969@posteo.de> | 2018-05-22 10:49:14 +0200 |
commit | 1aaaef2a808df2de8a92132c55415a08971bf53b (patch) | |
tree | de8719bd3a53fa7bd74e987f459adc3ccf3af0e0 | |
parent | a794b89fe00d214c8c1ced6a9519dd48b1ceb4af (diff) | |
download | frameworks_av-1aaaef2a808df2de8a92132c55415a08971bf53b.tar.gz frameworks_av-1aaaef2a808df2de8a92132c55415a08971bf53b.tar.bz2 frameworks_av-1aaaef2a808df2de8a92132c55415a08971bf53b.zip |
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 371066d073c5db289b0f38b9d2bfd3e326c78c66)
Change-Id: I3c51c62355c810e1b8dbc644cad3de335b7d8108
-rw-r--r-- | media/libstagefright/mpeg2ts/ESQueue.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/media/libstagefright/mpeg2ts/ESQueue.cpp b/media/libstagefright/mpeg2ts/ESQueue.cpp index 7359e8bb1f..0542792278 100644 --- a/media/libstagefright/mpeg2ts/ESQueue.cpp +++ b/media/libstagefright/mpeg2ts/ESQueue.cpp @@ -1178,7 +1178,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; } @@ -1186,7 +1188,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; @@ -1237,6 +1239,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; } |