Bug 1380468 - don't fallback when table size is too large. r?kinetik draft
authorAlfredo Yang <ayang@mozilla.com>
Fri, 14 Jul 2017 10:34:52 +0800
changeset 609686 2b05993d207c54630ee5d9af272ac446449a0351
parent 609596 aff336ac161daa3ea350e59a288963edbd58ed39
child 609687 f2f4b282869dd0fa9f716a4216bc3ebaa4d837b6
push id68634
push userayang@mozilla.com
push dateMon, 17 Jul 2017 07:45:34 +0000
reviewerskinetik
bugs1380468
milestone56.0a1
Bug 1380468 - don't fallback when table size is too large. r?kinetik MozReview-Commit-ID: 3oLLtIm8XqO
media/libstagefright/binding/MP4Metadata.cpp
media/libstagefright/gtest/TestParser.cpp
--- a/media/libstagefright/binding/MP4Metadata.cpp
+++ b/media/libstagefright/binding/MP4Metadata.cpp
@@ -763,17 +763,17 @@ MP4MetadataRust::Init()
   if (MOZ_LOG_TEST(sLog, LogLevel::Debug)) {
     mp4parse_log(true);
   }
 
   mp4parse_status rv = mp4parse_read(mRustParser.get());
   MOZ_LOG(sLog, LogLevel::Debug, ("rust parser returned %d\n", rv));
   Telemetry::Accumulate(Telemetry::MEDIA_RUST_MP4PARSE_SUCCESS,
                         rv == mp4parse_status_OK);
-  if (rv != mp4parse_status_OK) {
+  if (rv != mp4parse_status_OK && rv != mp4parse_status_TABLE_TOO_LARGE) {
     MOZ_LOG(sLog, LogLevel::Info, ("Rust mp4 parser fails to parse this stream."));
     MOZ_ASSERT(rv > 0);
     Telemetry::Accumulate(Telemetry::MEDIA_RUST_MP4PARSE_ERROR_CODE, rv);
     return false;
   }
 
   UpdateCrypto();
 
--- a/media/libstagefright/gtest/TestParser.cpp
+++ b/media/libstagefright/gtest/TestParser.cpp
@@ -216,17 +216,17 @@ static const TestFileData testFiles[] = 
 };
 
 static const TestFileData rustTestFiles[] = {
   // filename                      #V dur   w    h  #A dur  crypt        off   moof  headr  audio_profile
   { "test_case_1156505.mp4",        0, -1,   0,   0, 0, -1, false, 152, false, false, 0 },
   { "test_case_1181213.mp4",        1, 416666,
                                            320, 240, 1, 477460,
                                                              true,   0, false, false, 2 },
-  { "test_case_1181215.mp4",        1, 4966666,   190,   240, 0, -1, false,   0, false, false, 0 },
+  { "test_case_1181215.mp4",        0, -1,   0,   0, 0, -1, false,   0, false, false, 0 },
   { "test_case_1181220.mp4",        0, -1,   0,   0, 0, -1, false,   0, false, false, 0 },
   { "test_case_1181223.mp4",        0, 416666,
                                            320, 240, 0, -1, false,   0, false, false, 0 },
   { "test_case_1181719.mp4",        0, -1,   0,   0, 0, -1, false,   0, false, false, 0 },
   { "test_case_1185230.mp4",        2, 416666,
                                            320, 240, 2,  5, false,   0, false, false, 2 },
   { "test_case_1187067.mp4",        1, 80000,
                                            160,  90, 0, -1, false,   0, false, false, 0 },
@@ -301,73 +301,70 @@ TEST(stagefright_MPEG4Metadata, test_cas
         << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
       EXPECT_EQ(None, metadata.GetNumberTracks(TrackInfo::kTextTrack).Ref())
         << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
       EXPECT_EQ(None, metadata.GetNumberTracks(static_cast<TrackInfo::TrackType>(-1)).Ref())
         << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
       EXPECT_FALSE(metadata.GetTrackInfo(TrackInfo::kUndefinedTrack, 0).Ref());
       MP4Metadata::ResultAndTrackInfo trackInfo =
         metadata.GetTrackInfo(TrackInfo::kVideoTrack, 0);
-      if (tests[test].mNumberVideoTracks == 0 ||
-          tests[test].mNumberVideoTracks == E) {
-        EXPECT_TRUE(!trackInfo.Ref());
-      } else {
+      if (!!tests[test].mNumberVideoTracks) {
         ASSERT_TRUE(!!trackInfo.Ref());
         const VideoInfo* videoInfo = trackInfo.Ref()->GetAsVideoInfo();
         ASSERT_TRUE(!!videoInfo);
-        EXPECT_TRUE(videoInfo->IsValid());
-        EXPECT_TRUE(videoInfo->IsVideo());
+        EXPECT_TRUE(videoInfo->IsValid()) << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
+        EXPECT_TRUE(videoInfo->IsVideo()) << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
         EXPECT_EQ(tests[test].mVideoDuration,
-                  videoInfo->mDuration.ToMicroseconds());
-        EXPECT_EQ(tests[test].mWidth, videoInfo->mDisplay.width);
-        EXPECT_EQ(tests[test].mHeight, videoInfo->mDisplay.height);
+                  videoInfo->mDuration.ToMicroseconds()) << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
+        EXPECT_EQ(tests[test].mWidth, videoInfo->mDisplay.width) << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
+        EXPECT_EQ(tests[test].mHeight, videoInfo->mDisplay.height) << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
 
         MP4Metadata::ResultAndIndice indices =
           metadata.GetTrackIndice(videoInfo->mTrackId);
-        EXPECT_TRUE(!!indices.Ref());
+        EXPECT_TRUE(!!indices.Ref()) << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
         for (size_t i = 0; i < indices.Ref()->Length(); i++) {
           Index::Indice data;
-          EXPECT_TRUE(indices.Ref()->GetIndice(i, data));
-          EXPECT_TRUE(data.start_offset <= data.end_offset);
-          EXPECT_TRUE(data.start_composition <= data.end_composition);
+          EXPECT_TRUE(indices.Ref()->GetIndice(i, data)) << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
+          EXPECT_TRUE(data.start_offset <= data.end_offset) << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
+          EXPECT_TRUE(data.start_composition <= data.end_composition) << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
         }
       }
       trackInfo = metadata.GetTrackInfo(TrackInfo::kAudioTrack, 0);
       if (tests[test].mNumberAudioTracks == 0 ||
           tests[test].mNumberAudioTracks == E) {
-        EXPECT_TRUE(!trackInfo.Ref());
+        EXPECT_TRUE(!trackInfo.Ref()) << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
       } else {
         ASSERT_TRUE(!!trackInfo.Ref());
         const AudioInfo* audioInfo = trackInfo.Ref()->GetAsAudioInfo();
         ASSERT_TRUE(!!audioInfo);
-        EXPECT_TRUE(audioInfo->IsValid());
-        EXPECT_TRUE(audioInfo->IsAudio());
+        EXPECT_TRUE(audioInfo->IsValid()) << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
+        EXPECT_TRUE(audioInfo->IsAudio()) << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
         EXPECT_EQ(tests[test].mAudioDuration,
-                  audioInfo->mDuration.ToMicroseconds());
-        EXPECT_EQ(tests[test].mAudioProfile, audioInfo->mProfile);
+                  audioInfo->mDuration.ToMicroseconds()) << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
+        EXPECT_EQ(tests[test].mAudioProfile, audioInfo->mProfile) << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
         if (tests[test].mAudioDuration !=
             audioInfo->mDuration.ToMicroseconds()) {
           MOZ_RELEASE_ASSERT(false);
         }
 
         MP4Metadata::ResultAndIndice indices =
           metadata.GetTrackIndice(audioInfo->mTrackId);
-        EXPECT_TRUE(!!indices.Ref());
+        EXPECT_TRUE(!!indices.Ref()) << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
         for (size_t i = 0; i < indices.Ref()->Length(); i++) {
           Index::Indice data;
-          EXPECT_TRUE(indices.Ref()->GetIndice(i, data));
-          EXPECT_TRUE(data.start_offset <= data.end_offset);
-          EXPECT_TRUE(int64_t(data.start_composition) <= int64_t(data.end_composition));
+          EXPECT_TRUE(indices.Ref()->GetIndice(i, data)) << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
+          EXPECT_TRUE(data.start_offset <= data.end_offset) << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
+          EXPECT_TRUE(int64_t(data.start_composition) <= int64_t(data.end_composition)) << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
         }
       }
-      EXPECT_FALSE(metadata.GetTrackInfo(TrackInfo::kTextTrack, 0).Ref());
-      EXPECT_FALSE(metadata.GetTrackInfo(static_cast<TrackInfo::TrackType>(-1), 0).Ref());
+      EXPECT_FALSE(metadata.GetTrackInfo(TrackInfo::kTextTrack, 0).Ref()) << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
+      EXPECT_FALSE(metadata.GetTrackInfo(static_cast<TrackInfo::TrackType>(-1), 0).Ref()) << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
       // We can see anywhere in any MPEG4.
-      EXPECT_TRUE(metadata.CanSeek());
-      EXPECT_EQ(tests[test].mHasCrypto, metadata.Crypto().Ref()->valid);
+      EXPECT_TRUE(metadata.CanSeek()) << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
+      EXPECT_EQ(tests[test].mHasCrypto, metadata.Crypto().Ref()->valid) << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
     }
   }
 }
 
 // Bug 1224019: This test produces way to much output, disabling for now.
 #if 0
 TEST(stagefright_MPEG4Metadata, test_case_mp4_subsets)
 {