Merge "Cannot play back mov file which contains udta atom"
diff --git a/media/extractors/mp4/MPEG4Extractor.cpp b/media/extractors/mp4/MPEG4Extractor.cpp
index 262852f..cc1534a 100644
--- a/media/extractors/mp4/MPEG4Extractor.cpp
+++ b/media/extractors/mp4/MPEG4Extractor.cpp
@@ -985,6 +985,22 @@
off64_t stop_offset = *offset + chunk_size;
*offset = data_offset;
while (*offset < stop_offset) {
+
+ // pass udata terminate
+ if (mIsQT && stop_offset - *offset == 4 && chunk_type == FOURCC("udta")) {
+ // handle the case that udta terminates with terminate code x00000000
+ // note that 0 terminator is optional and we just handle this case.
+ uint32_t terminate_code = 1;
+ mDataSource->readAt(*offset, &terminate_code, 4);
+ if (0 == terminate_code) {
+ *offset += 4;
+ ALOGD("Terminal code for udta");
+ continue;
+ } else {
+ ALOGW("invalid udta Terminal code");
+ }
+ }
+
status_t err = parseChunk(offset, depth + 1);
if (err != OK) {
if (isTrack) {