From 15ebd70bdb7aeb3d5ce309710dbd64c0ea038113 Mon Sep 17 00:00:00 2001 From: Wei Jia Date: Wed, 3 Dec 2014 14:10:16 -0800 Subject: avc_util: try to find the first start code prefix 0x000001 even though there is non-zero byte at the beginning of the buffer. ESQueue: allow one PES playload contains multiple ADTS AAC frames. Bug: 18532335 Change-Id: I1f42017cff139d5e932e0aaa3e7d33164d1a48e7 --- media/libstagefright/avc_utils.cpp | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) (limited to 'media/libstagefright/avc_utils.cpp') diff --git a/media/libstagefright/avc_utils.cpp b/media/libstagefright/avc_utils.cpp index 38a1f6b..cbdb816 100644 --- a/media/libstagefright/avc_utils.cpp +++ b/media/libstagefright/avc_utils.cpp @@ -222,28 +222,25 @@ status_t getNextNALUnit( *nalStart = NULL; *nalSize = 0; - if (size == 0) { + if (size < 3) { return -EAGAIN; } - // Skip any number of leading 0x00. - size_t offset = 0; - while (offset < size && data[offset] == 0x00) { - ++offset; - } - - if (offset == size) { - return -EAGAIN; - } // A valid startcode consists of at least two 0x00 bytes followed by 0x01. - - if (offset < 2 || data[offset] != 0x01) { - return ERROR_MALFORMED; + for (; offset + 2 < size; ++offset) { + if (data[offset + 2] == 0x01 && data[offset] == 0x00 + && data[offset + 1] == 0x00) { + break; + } } - - ++offset; + if (offset + 2 >= size) { + *_data = &data[offset]; + *_size = 2; + return -EAGAIN; + } + offset += 3; size_t startOffset = offset; -- cgit v1.1