Bug 1296532 - Fix MoofParser tests - r=jya draft
authorGerald Squelart <gsquelart@mozilla.com>
Thu, 25 Aug 2016 16:58:52 +1000
changeset 405907 feff313beb159c6b22361fabc188d33fa4b93220
parent 405906 5417415eae819aae75cf9f1557fa542c17173ca5
child 405908 fbdddecf6058662ae850366bb5f0c3afb691dd10
push id27594
push usergsquelart@mozilla.com
push dateFri, 26 Aug 2016 03:08:37 +0000
reviewersjya
bugs1296532
milestone51.0a1
Bug 1296532 - Fix MoofParser tests - r=jya Well, this is embarrassing: The MoofParser test was not parsing anything, because it was given an empty byte range! Also HasMetadata() has to run before RebuildFragmentedIndex(), because the latter moves the offset and would then leave nothing for the former to read. MozReview-Commit-ID: ZB35lc8iaE
media/libstagefright/gtest/TestParser.cpp
--- a/media/libstagefright/gtest/TestParser.cpp
+++ b/media/libstagefright/gtest/TestParser.cpp
@@ -156,31 +156,34 @@ ReadTestFile(const char* aFilename)
 struct TestFileData
 {
   const char* mFilename;
   uint32_t mNumberVideoTracks;
   int32_t mWidth;
   int32_t mHeight;
   uint32_t mNumberAudioTracks;
   bool mHasCrypto;
+  uint64_t mMoofReachedOffset; // or 0 for the end.
+  bool mValidMoof;
+  bool mHeader;
 };
 static const TestFileData testFiles[] = {
-  // filename               #V   w    h  #A  crypt
-  { "test_case_1156505.mp4", 0,   0,   0, 0, false },
-  { "test_case_1181213.mp4", 0,   0,   0, 0, false },
-  { "test_case_1181215.mp4", 0,   0,   0, 0, false },
-  { "test_case_1181220.mp4", 0,   0,   0, 0, false },
-  { "test_case_1181223.mp4", 0,   0,   0, 0, false },
-  { "test_case_1181719.mp4", 0,   0,   0, 0, false },
-  { "test_case_1185230.mp4", 1, 320, 240, 1, false },
-  { "test_case_1187067.mp4", 1, 160,  90, 0, false },
-  { "test_case_1200326.mp4", 0,   0,   0, 0, false },
-  { "test_case_1204580.mp4", 1, 320, 180, 0, false },
-  { "test_case_1216748.mp4", 0,   0,   0, 0, false },
-  { "test_case_1296473.mp4", 0,   0,   0, 0, false }
+  // filename               #V   w    h  #A  crypt  off   moof  headr
+  { "test_case_1156505.mp4", 0,   0,   0, 0, false, 152, false, false },
+  { "test_case_1181213.mp4", 0,   0,   0, 0, false,   0, false, false },
+  { "test_case_1181215.mp4", 0,   0,   0, 0, false,   0, false, false },
+  { "test_case_1181220.mp4", 0,   0,   0, 0, false,   0, false, false },
+  { "test_case_1181223.mp4", 0,   0,   0, 0, false,   0, false, false },
+  { "test_case_1181719.mp4", 0,   0,   0, 0, false,   0, false, false },
+  { "test_case_1185230.mp4", 1, 320, 240, 1, false,   0, false, false },
+  { "test_case_1187067.mp4", 1, 160,  90, 0, false,   0, false, false },
+  { "test_case_1200326.mp4", 0,   0,   0, 0, false,   0, false, false },
+  { "test_case_1204580.mp4", 1, 320, 180, 0, false,   0, false, false },
+  { "test_case_1216748.mp4", 0,   0,   0, 0, false, 152, false, false },
+  { "test_case_1296473.mp4", 0,   0,   0, 0, false,   0, false, false }
 };
 
 TEST(stagefright_MPEG4Metadata, test_case_mp4)
 {
   for (size_t test = 0; test < ArrayLength(testFiles); ++test) {
     nsTArray<uint8_t> buffer = ReadTestFile(testFiles[test].mFilename);
     ASSERT_FALSE(buffer.IsEmpty());
     RefPtr<Stream> stream = new TestStream(buffer.Elements(), buffer.Length());
@@ -284,29 +287,40 @@ TEST(stagefright_MoofParser, test_case_m
   for (size_t test = 0; test < ArrayLength(testFiles); ++test) {
     nsTArray<uint8_t> buffer = ReadTestFile(testFiles[test].mFilename);
     ASSERT_FALSE(buffer.IsEmpty());
     RefPtr<Stream> stream = new TestStream(buffer.Elements(), buffer.Length());
 
     MoofParser parser(stream, 0, false);
     EXPECT_EQ(0u, parser.mOffset);
     EXPECT_FALSE(parser.ReachedEnd());
-
-    MediaByteRangeSet byteRanges;
-    EXPECT_FALSE(parser.RebuildFragmentedIndex(byteRanges));
+    EXPECT_TRUE(parser.mInitRange.IsEmpty());
 
-    EXPECT_TRUE(parser.GetCompositionRange(byteRanges).IsNull());
-    EXPECT_TRUE(parser.mInitRange.IsEmpty());
-    EXPECT_EQ(0u, parser.mOffset);
-    EXPECT_FALSE(parser.ReachedEnd());
     EXPECT_TRUE(parser.HasMetadata());
     RefPtr<MediaByteBuffer> metadataBuffer = parser.Metadata();
     EXPECT_TRUE(metadataBuffer);
+
+    EXPECT_FALSE(parser.mInitRange.IsEmpty());
+    const MediaByteRangeSet byteRanges(
+      MediaByteRange(0, int64_t(buffer.Length())));
+    EXPECT_EQ(testFiles[test].mValidMoof,
+              parser.RebuildFragmentedIndex(byteRanges));
+    if (testFiles[test].mMoofReachedOffset == 0) {
+      EXPECT_EQ(buffer.Length(), parser.mOffset);
+      EXPECT_TRUE(parser.ReachedEnd());
+    } else {
+      EXPECT_EQ(testFiles[test].mMoofReachedOffset, parser.mOffset);
+      EXPECT_FALSE(parser.ReachedEnd());
+    }
+
+    EXPECT_FALSE(parser.mInitRange.IsEmpty());
+    EXPECT_TRUE(parser.GetCompositionRange(byteRanges).IsNull());
     EXPECT_TRUE(parser.FirstCompleteMediaSegment().IsEmpty());
-    EXPECT_TRUE(parser.FirstCompleteMediaHeader().IsEmpty());
+    EXPECT_EQ(testFiles[test].mHeader,
+              !parser.FirstCompleteMediaHeader().IsEmpty());
   }
 }
 
 // Bug 1224019: This test produces way to much output, disabling for now.
 #if 0
 TEST(stagefright_MoofParser, test_case_mp4_subsets)
 {
   const size_t step = 1u;