--- 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;