summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Andreas Huber <andih@google.com> 2011-07-20 08:05:06 -0700
committer Android (Google) Code Review <android-gerrit@google.com> 2011-07-20 08:05:06 -0700
commit85111ee50108e66254c6edbda76c7ed9676dc536 (patch)
treec06ddf2b685882dea3e65e80172faf3fa6b68f0e
parente8c3986b5c9377b0992bc77680954cb1b9f7f49b (diff)
parent80d9064a14b4172d18edd3a5a70e6c2459b59eb7 (diff)
Merge "Content found in the wild violated the MPEG4 systems specs"
-rw-r--r--media/libstagefright/ESDS.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/media/libstagefright/ESDS.cpp b/media/libstagefright/ESDS.cpp
index b7c8e0c967c7..1f7ee252eb45 100644
--- a/media/libstagefright/ESDS.cpp
+++ b/media/libstagefright/ESDS.cpp
@@ -14,6 +14,10 @@
* limitations under the License.
*/
+//#define LOG_NDEBUG 0
+#define LOG_TAG "ESDS"
+#include <utils/Log.h>
+
#include "include/ESDS.h"
#include <string.h>
@@ -87,6 +91,8 @@ status_t ESDS::skipDescriptorHeader(
}
while (more);
+ LOGV("tag=0x%02x data_size=%d", *tag, *data_size);
+
if (*data_size > size) {
return ERROR_MALFORMED;
}
@@ -146,8 +152,20 @@ status_t ESDS::parseESDescriptor(size_t offset, size_t size) {
if (OCRstreamFlag) {
offset += 2;
size -= 2;
+
+ if ((offset >= size || mData[offset] != kTag_DecoderConfigDescriptor)
+ && offset - 2 < size
+ && mData[offset - 2] == kTag_DecoderConfigDescriptor) {
+ // Content found "in the wild" had OCRstreamFlag set but was
+ // missing OCR_ES_Id, the decoder config descriptor immediately
+ // followed instead.
+ offset -= 2;
+ size += 2;
+
+ LOGW("Found malformed 'esds' atom, ignoring missing OCR_ES_Id.");
+ }
}
-
+
if (offset >= size) {
return ERROR_MALFORMED;
}