Content found in the wild violated the MPEG4 systems specs

but other players apparently worked around it as well, so we do to.

Change-Id: I8269d2344b010d1d704028c8a9c05bddab53828d
related-to-bug: 5049979
diff --git a/media/libstagefright/ESDS.cpp b/media/libstagefright/ESDS.cpp
index b7c8e0c..1f7ee25 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 @@
     }
     while (more);
 
+    LOGV("tag=0x%02x data_size=%d", *tag, *data_size);
+
     if (*data_size > size) {
         return ERROR_MALFORMED;
     }
@@ -146,8 +152,20 @@
     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;
     }