--- a/media/libstagefright/gtest/TestParser.cpp
+++ b/media/libstagefright/gtest/TestParser.cpp
@@ -157,225 +157,183 @@ ReadTestFile(const char* aFilename)
}
return buffer;
}
struct TestFileData
{
const char* mFilename;
+ bool mParseResult;
uint32_t mNumberVideoTracks;
bool mHasVideoIndice;
int64_t mVideoDuration; // For first video track, -1 if N/A.
int32_t mWidth;
int32_t mHeight;
uint32_t mNumberAudioTracks;
int64_t mAudioDuration; // For first audio track, -1 if N/A.
bool mHasCrypto;
uint64_t mMoofReachedOffset; // or 0 for the end.
bool mValidMoof;
bool mHeader;
int8_t mAudioProfile;
};
+
static const TestFileData testFiles[] = {
- // filename #V V-ind dur w h #A dur crypt off moof headr audio_profile
- { "test_case_1156505.mp4", 0, false, -1, 0, 0, 0, -1, false, 152, false, false, 0 },
- { "test_case_1181213.mp4", 0, false, -1, 0, 0, 0, -1, false, 0, false, false, 0 },
- { "test_case_1181215.mp4", 0, false, -1, 0, 0, 0, -1, false, 0, false, false, 0 },
- { "test_case_1181220.mp4", 0, false, -1, 0, 0, 0, -1, false, 0, false, false, 0 },
- { "test_case_1181223.mp4", 0, false, -1, 0, 0, 0, -1, false, 0, false, false, 0 },
- { "test_case_1181719.mp4", 0, false, -1, 0, 0, 0, -1, false, 0, false, false, 0 },
- { "test_case_1185230.mp4", 1, true, 416666,
- 320, 240, 1, 5, false, 0, false, false, 2 },
- { "test_case_1187067.mp4", 1, true, 80000,
+ // filename parse #V dur w h #A dur crypt off moof headr audio_profile
+ { "test_case_1156505.mp4", false, 0, false, -1, 0, 0, 0, -1, false, 152, false, false, 0 }, // invalid ''trak box
+ { "test_case_1181213.mp4", true, 1, true, 416666,
+ 320, 240, 1, 477460,
+ true, 0, false, false, 2 },
+ { "test_case_1181215.mp4", true, 0, false, -1, 0, 0, 0, -1, false, 0, false, false, 0 },
+ { "test_case_1181220.mp4", false, 0, false, -1, 0, 0, 0, -1, false, 0, false, false, 0 }, // invalid audio 'sinf' box
+ { "test_case_1181223.mp4", false, 0, false, 416666,
+ 320, 240, 0, -1, false, 0, false, false, 0 },
+ { "test_case_1181719.mp4", false, 0, false, -1, 0, 0, 0, -1, false, 0, false, false, 0 },
+ { "test_case_1185230.mp4", true, 2, true, 416666,
+ 320, 240, 2, 5, false, 0, false, false, 2 },
+ { "test_case_1187067.mp4", true, 1, true, 80000,
160, 90, 0, -1, false, 0, false, false, 0 },
- { "test_case_1200326.mp4", 0, false, -1, 0, 0, 0, -1, false, 0, false, false, 0 },
- { "test_case_1204580.mp4", 1, true, 502500,
+ { "test_case_1200326.mp4", false, 0, false, -1, 0, 0, 0, -1, false, 0, false, false, 0 },
+ { "test_case_1204580.mp4", true, 1, true, 502500,
320, 180, 0, -1, false, 0, false, false, 0 },
- { "test_case_1216748.mp4", 0, false, -1, 0, 0, 0, -1, false, 152, false, false, 0 },
- { "test_case_1296473.mp4", 0, false, -1, 0, 0, 0, -1, false, 0, false, false, 0 },
- { "test_case_1296532.mp4", 1, true, 5589333,
+ { "test_case_1216748.mp4", false, 0, false, -1, 0, 0, 0, -1, false, 152, false, false, 0 }, // invalid 'trak' box
+ { "test_case_1296473.mp4", false, 0, false, -1, 0, 0, 0, -1, false, 0, false, false, 0 },
+ { "test_case_1296532.mp4", true, 1, true, 5589333,
560, 320, 1, 5589333,
true, 0, true, true, 2 },
- { "test_case_1301065.mp4", 0, false, -1, 0, 0, 1, 100079991719000000,
- false, 0, false, false, 2 },
- { "test_case_1301065-u32max.mp4", 0, false, -1, 0, 0, 1, 97391548639,
- false, 0, false, false, 2 },
- { "test_case_1301065-max-ez.mp4", 0, false, -1, 0, 0, 1, 209146758205306,
- false, 0, false, false, 2 },
- { "test_case_1301065-harder.mp4", 0, false, -1, 0, 0, 1, 209146758205328,
+ { "test_case_1301065.mp4", true, 0, false, -1, 0, 0, 1, 100079991719000000,
false, 0, false, false, 2 },
- { "test_case_1301065-max-ok.mp4", 0, false, -1, 0, 0, 1, 9223372036854775804,
+ { "test_case_1301065-u32max.mp4", true, 0, false, -1, 0, 0, 1, 97391548639,
false, 0, false, false, 2 },
- { "test_case_1301065-overfl.mp4", 0, false, -1, 0, 0, 0, -1, false, 0, false, false, 0 },
- { "test_case_1301065-i64max.mp4", 0, false, -1, 0, 0, 0, -1, false, 0, false, false, 0 },
- { "test_case_1301065-i64min.mp4", 0, false, -1, 0, 0, 0, -1, false, 0, false, false, 0 },
- { "test_case_1301065-u64max.mp4", 0, false, -1, 0, 0, 1, 0, false, 0, false, false, 2 },
- { "test_case_1329061.mov", 0, false, -1, 0, 0, 1, 234567981,
+ { "test_case_1301065-max-ez.mp4", true, 0, false, -1, 0, 0, 1, 209146758205306,
false, 0, false, false, 2 },
- { "test_case_1351094.mp4", 0, false, -1, 0, 0, 0, -1, false, 0, true, true, 0 },
-};
-
-static const TestFileData rustTestFiles[] = {
- // filename #V dur w h #A dur crypt off moof headr audio_profile
- { "test_case_1156505.mp4", 0, false, -1, 0, 0, 0, -1, false, 152, false, false, 0 },
- { "test_case_1181213.mp4", 1, true, 416666,
- 320, 240, 1, 477460,
- true, 0, false, false, 2 },
- { "test_case_1181215.mp4", 0, false, -1, 0, 0, 0, -1, false, 0, false, false, 0 },
- { "test_case_1181220.mp4", 0, false, -1, 0, 0, 0, -1, false, 0, false, false, 0 },
- { "test_case_1181223.mp4", 0, false, 416666,
- 320, 240, 0, -1, false, 0, false, false, 0 },
- { "test_case_1181719.mp4", 0, false, -1, 0, 0, 0, -1, false, 0, false, false, 0 },
- { "test_case_1185230.mp4", 2, true, 416666,
- 320, 240, 2, 5, false, 0, false, false, 2 },
- { "test_case_1187067.mp4", 1, true, 80000,
- 160, 90, 0, -1, false, 0, false, false, 0 },
- { "test_case_1200326.mp4", 0, false, -1, 0, 0, 0, -1, false, 0, false, false, 0 },
- { "test_case_1204580.mp4", 1, true, 502500,
- 320, 180, 0, -1, false, 0, false, false, 0 },
- { "test_case_1216748.mp4", 0, false, -1, 0, 0, 0, -1, false, 152, false, false, 0 },
- { "test_case_1296473.mp4", 0, false, -1, 0, 0, 0, -1, false, 0, false, false, 0 },
- { "test_case_1296532.mp4", 1, true, 5589333,
- 560, 320, 1, 5589333,
- true, 0, true, true, 2 },
- { "test_case_1301065.mp4", 0, false, -1, 0, 0, 1, 100079991719000000,
+ { "test_case_1301065-harder.mp4", true, 0, false, -1, 0, 0, 1, 209146758205328,
false, 0, false, false, 2 },
- { "test_case_1301065-u32max.mp4", 0, false, -1, 0, 0, 1, 97391548639,
- false, 0, false, false, 2 },
- { "test_case_1301065-max-ez.mp4", 0, false, -1, 0, 0, 1, 209146758205306,
+ { "test_case_1301065-max-ok.mp4", true, 0, false, -1, 0, 0, 1, 9223372036854775804,
false, 0, false, false, 2 },
- { "test_case_1301065-harder.mp4", 0, false, -1, 0, 0, 1, 209146758205328,
- false, 0, false, false, 2 },
- { "test_case_1301065-max-ok.mp4", 0, false, -1, 0, 0, 1, 9223372036854775804,
- false, 0, false, false, 2 },
- // The duration is overflow for int64_t in TestFileData, rust parser uses uint64_t so
+ // The duration is overflow for int64_t in TestFileData, parser uses uint64_t so
// this file is ignore.
//{ "test_case_1301065-overfl.mp4", 0, -1, 0, 0, 1, 9223372036854775827,
// false, 0, false, false, 2 },
- { "test_case_1301065-i64max.mp4", 0, false, -1, 0, 0, 0, -1, false, 0, false, false, 0 },
- { "test_case_1301065-i64min.mp4", 0, false, -1, 0, 0, 0, -1, false, 0, false, false, 0 },
- { "test_case_1301065-u64max.mp4", 0, false, -1, 0, 0, 1, 0, false, 0, false, false, 2 },
- { "test_case_1329061.mov", 0, false, -1, 0, 0, 1, 234567981,
+ { "test_case_1301065-i64max.mp4", true, 0, false, -1, 0, 0, 0, -1, false, 0, false, false, 0 },
+ { "test_case_1301065-i64min.mp4", true, 0, false, -1, 0, 0, 0, -1, false, 0, false, false, 0 },
+ { "test_case_1301065-u64max.mp4", true, 0, false, -1, 0, 0, 1, 0, false, 0, false, false, 2 },
+ { "test_case_1329061.mov", false, 0, false, -1, 0, 0, 1, 234567981,
false, 0, false, false, 2 },
- { "test_case_1351094.mp4", 0, false, -1, 0, 0, 0, -1, false, 0, true, true, 0 },
- { "test_case_1389299.mp4", 1, true, 5589333,
+ { "test_case_1351094.mp4", true, 0, false, -1, 0, 0, 0, -1, false, 0, true, true, 0 },
+ { "test_case_1389299.mp4", true, 1, true, 5589333,
560, 320, 1, 5589333,
true, 0, true, true, 2 },
- { "test_case_1389527.mp4", 1, false, 5005000,
+ { "test_case_1389527.mp4", true, 1, false, 5005000,
80, 128, 1, 4992000, false, 0, false, false, 2 },
- { "test_case_1395244.mp4", 1, true, 416666,
+ { "test_case_1395244.mp4", true, 1, true, 416666,
320, 240, 1,477460, false,0, false, false, 2 },
- { "test_case_1388991.mp4", 0, false, -1, 0, 0, 1, 30000181, false, 0, false, false, 2 },
- { "test_case_1380468.mp4", 0, false, 0, 0, 0, 0, 0, false, 0, false, false, 0 },
- { "test_case_1410565.mp4", 1, true, 0,
- 320, 180, 1, 0, false, 955100, true, true, 2 },
+ { "test_case_1388991.mp4", true, 0, false, -1, 0, 0, 1, 30000181, false, 0, false, false, 2 },
+ { "test_case_1380468.mp4", false, 0, false, 0, 0, 0, 0, 0, false, 0, false, false, 0 },
+ { "test_case_1410565.mp4", false, 0, false, 0, 0, 0, 0, 0, false, 955100, true, true, 2 }, // negative 'timescale'
};
+
TEST(stagefright_MPEG4Metadata, test_case_mp4)
{
- for (bool rust : { !MediaPrefs::EnableRustMP4Parser(),
- MediaPrefs::EnableRustMP4Parser() }) {
- mozilla::Preferences::SetBool("media.rust.mp4parser", rust);
- ASSERT_EQ(rust, MediaPrefs::EnableRustMP4Parser());
+ const TestFileData* tests = nullptr;
+ size_t length = 0;
+
+ tests = testFiles;
+ length = ArrayLength(testFiles);
+
+ for (size_t test = 0; test < length; ++test) {
+ nsTArray<uint8_t> buffer = ReadTestFile(tests[test].mFilename);
+ ASSERT_FALSE(buffer.IsEmpty());
+ RefPtr<Stream> stream = new TestStream(buffer.Elements(), buffer.Length());
- const TestFileData* tests = nullptr;
- size_t length = 0;
+ MP4Metadata::ResultAndByteBuffer metadataBuffer =
+ MP4Metadata::Metadata(stream);
+ EXPECT_EQ(NS_OK, metadataBuffer.Result());
+ EXPECT_TRUE(metadataBuffer.Ref());
- if (rust) {
- tests = rustTestFiles;
- length = ArrayLength(rustTestFiles);
- } else {
- tests = testFiles;
- length = ArrayLength(testFiles);
+ MP4Metadata metadata(stream);
+ nsresult res = metadata.Parse();
+ EXPECT_EQ(tests[test].mParseResult, NS_SUCCEEDED(res)) << tests[test].mFilename;
+ if (!tests[test].mParseResult) {
+ continue;
}
- for (size_t test = 0; test < length; ++test) {
- nsTArray<uint8_t> buffer = ReadTestFile(tests[test].mFilename);
- ASSERT_FALSE(buffer.IsEmpty());
- RefPtr<Stream> stream = new TestStream(buffer.Elements(), buffer.Length());
-
- MP4Metadata::ResultAndByteBuffer metadataBuffer =
- MP4Metadata::Metadata(stream);
- EXPECT_EQ(NS_OK, metadataBuffer.Result());
- EXPECT_TRUE(metadataBuffer.Ref());
+ EXPECT_EQ(tests[test].mNumberAudioTracks,
+ metadata.GetNumberTracks(TrackInfo::kAudioTrack).Ref())
+ << tests[test].mFilename;
+ EXPECT_EQ(tests[test].mNumberVideoTracks,
+ metadata.GetNumberTracks(TrackInfo::kVideoTrack).Ref())
+ << tests[test].mFilename;
+ // If there is an error, we should expect an error code instead of zero
+ // for non-Audio/Video tracks.
+ const uint32_t None = (tests[test].mNumberVideoTracks == E) ? E : 0;
+ EXPECT_EQ(None, metadata.GetNumberTracks(TrackInfo::kUndefinedTrack).Ref())
+ << tests[test].mFilename;
+ EXPECT_EQ(None, metadata.GetNumberTracks(TrackInfo::kTextTrack).Ref())
+ << tests[test].mFilename;
+ EXPECT_FALSE(metadata.GetTrackInfo(TrackInfo::kUndefinedTrack, 0).Ref());
+ MP4Metadata::ResultAndTrackInfo trackInfo =
+ metadata.GetTrackInfo(TrackInfo::kVideoTrack, 0);
+ if (!!tests[test].mNumberVideoTracks) {
+ ASSERT_TRUE(!!trackInfo.Ref());
+ const VideoInfo* videoInfo = trackInfo.Ref()->GetAsVideoInfo();
+ ASSERT_TRUE(!!videoInfo);
+ EXPECT_TRUE(videoInfo->IsValid()) << tests[test].mFilename;
+ EXPECT_TRUE(videoInfo->IsVideo()) << tests[test].mFilename;
+ EXPECT_EQ(tests[test].mVideoDuration,
+ videoInfo->mDuration.ToMicroseconds()) << tests[test].mFilename;
+ EXPECT_EQ(tests[test].mWidth, videoInfo->mDisplay.width) << tests[test].mFilename;
+ EXPECT_EQ(tests[test].mHeight, videoInfo->mDisplay.height) << tests[test].mFilename;
- MP4Metadata metadata(stream);
- EXPECT_EQ(tests[test].mNumberAudioTracks,
- metadata.GetNumberTracks(TrackInfo::kAudioTrack).Ref())
- << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
- EXPECT_EQ(tests[test].mNumberVideoTracks,
- metadata.GetNumberTracks(TrackInfo::kVideoTrack).Ref())
- << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
- // If there is an error, we should expect an error code instead of zero
- // for non-Audio/Video tracks.
- const uint32_t None = (tests[test].mNumberVideoTracks == E) ? E : 0;
- EXPECT_EQ(None, metadata.GetNumberTracks(TrackInfo::kUndefinedTrack).Ref())
- << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
- EXPECT_EQ(None, metadata.GetNumberTracks(TrackInfo::kTextTrack).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) {
- ASSERT_TRUE(!!trackInfo.Ref());
- const VideoInfo* videoInfo = trackInfo.Ref()->GetAsVideoInfo();
- ASSERT_TRUE(!!videoInfo);
- 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()) << (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_EQ(!!indices.Ref(), tests[test].mHasVideoIndice) << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
- if (tests[test].mHasVideoIndice) {
- for (size_t i = 0; i < indices.Ref()->Length(); i++) {
- Index::Indice data;
- 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;
- }
+ MP4Metadata::ResultAndIndice indices =
+ metadata.GetTrackIndice(videoInfo->mTrackId);
+ EXPECT_EQ(!!indices.Ref(), tests[test].mHasVideoIndice) << tests[test].mFilename;
+ if (tests[test].mHasVideoIndice) {
+ for (size_t i = 0; i < indices.Ref()->Length(); i++) {
+ Index::Indice data;
+ EXPECT_TRUE(indices.Ref()->GetIndice(i, data)) << tests[test].mFilename;
+ EXPECT_TRUE(data.start_offset <= data.end_offset) << tests[test].mFilename;
+ EXPECT_TRUE(data.start_composition <= data.end_composition) << tests[test].mFilename;
}
}
- trackInfo = metadata.GetTrackInfo(TrackInfo::kAudioTrack, 0);
- if (tests[test].mNumberAudioTracks == 0 ||
- tests[test].mNumberAudioTracks == E) {
- 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()) << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
- EXPECT_TRUE(audioInfo->IsAudio()) << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
- EXPECT_EQ(tests[test].mAudioDuration,
- 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);
- }
+ }
+ trackInfo = metadata.GetTrackInfo(TrackInfo::kAudioTrack, 0);
+ if (tests[test].mNumberAudioTracks == 0 ||
+ tests[test].mNumberAudioTracks == E) {
+ EXPECT_TRUE(!trackInfo.Ref()) << tests[test].mFilename;
+ } else {
+ ASSERT_TRUE(!!trackInfo.Ref());
+ const AudioInfo* audioInfo = trackInfo.Ref()->GetAsAudioInfo();
+ ASSERT_TRUE(!!audioInfo);
+ EXPECT_TRUE(audioInfo->IsValid()) << tests[test].mFilename;
+ EXPECT_TRUE(audioInfo->IsAudio()) << tests[test].mFilename;
+ EXPECT_EQ(tests[test].mAudioDuration,
+ audioInfo->mDuration.ToMicroseconds()) << tests[test].mFilename;
+ EXPECT_EQ(tests[test].mAudioProfile, audioInfo->mProfile) << 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()) << (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)) << (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;
- }
+ MP4Metadata::ResultAndIndice indices =
+ metadata.GetTrackIndice(audioInfo->mTrackId);
+ EXPECT_TRUE(!!indices.Ref()) << tests[test].mFilename;
+ for (size_t i = 0; i < indices.Ref()->Length(); i++) {
+ Index::Indice data;
+ EXPECT_TRUE(indices.Ref()->GetIndice(i, data)) << tests[test].mFilename;
+ EXPECT_TRUE(data.start_offset <= data.end_offset) << tests[test].mFilename;
+ EXPECT_TRUE(int64_t(data.start_composition) <= int64_t(data.end_composition)) << tests[test].mFilename;
}
- EXPECT_FALSE(metadata.GetTrackInfo(TrackInfo::kTextTrack, 0).Ref()) << (rust ? "rust/" : "stagefright/") << tests[test].mFilename;
- // We can see anywhere in any MPEG4.
- 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;
}
+ EXPECT_FALSE(metadata.GetTrackInfo(TrackInfo::kTextTrack, 0).Ref()) << tests[test].mFilename;
+ // We can see anywhere in any MPEG4.
+ EXPECT_TRUE(metadata.CanSeek()) << tests[test].mFilename;
+ EXPECT_EQ(tests[test].mHasCrypto, metadata.Crypto().Ref()->valid) << tests[test].mFilename;
}
}
// Bug 1224019: This test produces way to much output, disabling for now.
#if 0
TEST(stagefright_MPEG4Metadata, test_case_mp4_subsets)
{
static const size_t step = 1u;
@@ -410,65 +368,54 @@ TEST(stagefright_MPEG4Metadata, test_cas
}
}
}
}
#endif
TEST(stagefright_MoofParser, test_case_mp4)
{
- for (bool rust : { !MediaPrefs::EnableRustMP4Parser(),
- MediaPrefs::EnableRustMP4Parser() }) {
- mozilla::Preferences::SetBool("media.rust.mp4parser", rust);
- ASSERT_EQ(rust, MediaPrefs::EnableRustMP4Parser());
+ const TestFileData* tests = nullptr;
+ size_t length = 0;
+
+ tests = testFiles;
+ length = ArrayLength(testFiles);
+
+ for (size_t test = 0; test < length; ++test) {
+ nsTArray<uint8_t> buffer = ReadTestFile(tests[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) << tests[test].mFilename;
+ EXPECT_FALSE(parser.ReachedEnd()) << tests[test].mFilename;
+ EXPECT_TRUE(parser.mInitRange.IsEmpty()) << tests[test].mFilename;
- const TestFileData* tests = nullptr;
- size_t length = 0;
+ EXPECT_TRUE(parser.HasMetadata()) << tests[test].mFilename;
+ RefPtr<MediaByteBuffer> metadataBuffer = parser.Metadata();
+ EXPECT_TRUE(metadataBuffer) << tests[test].mFilename;
- if (rust) {
- tests = rustTestFiles;
- length = ArrayLength(rustTestFiles);
+ EXPECT_FALSE(parser.mInitRange.IsEmpty()) << tests[test].mFilename;
+ const MediaByteRangeSet byteRanges(
+ MediaByteRange(0, int64_t(buffer.Length())));
+ EXPECT_EQ(tests[test].mValidMoof,
+ parser.RebuildFragmentedIndex(byteRanges)) << tests[test].mFilename;
+ if (tests[test].mMoofReachedOffset == 0) {
+ EXPECT_EQ(buffer.Length(), parser.mOffset) << tests[test].mFilename;
+ EXPECT_TRUE(parser.ReachedEnd()) << tests[test].mFilename;
} else {
- tests = testFiles;
- length = ArrayLength(testFiles);
+ EXPECT_EQ(tests[test].mMoofReachedOffset, parser.mOffset) << tests[test].mFilename;
+ EXPECT_FALSE(parser.ReachedEnd()) << tests[test].mFilename;
}
- for (size_t test = 0; test < length; ++test) {
- nsTArray<uint8_t> buffer = ReadTestFile(tests[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());
- EXPECT_TRUE(parser.mInitRange.IsEmpty());
-
- 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(tests[test].mValidMoof,
- parser.RebuildFragmentedIndex(byteRanges));
- if (tests[test].mMoofReachedOffset == 0) {
- EXPECT_EQ(buffer.Length(), parser.mOffset);
- EXPECT_TRUE(parser.ReachedEnd());
- } else {
- EXPECT_EQ(tests[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_EQ(tests[test].mHeader,
- !parser.FirstCompleteMediaHeader().IsEmpty());
- }
+ EXPECT_FALSE(parser.mInitRange.IsEmpty()) << tests[test].mFilename;
+ EXPECT_TRUE(parser.GetCompositionRange(byteRanges).IsNull()) << tests[test].mFilename;
+ EXPECT_TRUE(parser.FirstCompleteMediaSegment().IsEmpty()) << tests[test].mFilename;
+ EXPECT_EQ(tests[test].mHeader,
+ !parser.FirstCompleteMediaHeader().IsEmpty()) << tests[test].mFilename;
}
}
// 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;
@@ -506,17 +453,17 @@ TEST(stagefright_MoofParser, test_case_m
size -= 1;
}
}
}
}
}
#endif
-uint8_t media_libstagefright_gtest_video_init_mp4[] = {
+uint8_t media_gtest_video_init_mp4[] = {
0x00, 0x00, 0x00, 0x18, 0x66, 0x74, 0x79, 0x70, 0x69, 0x73, 0x6f, 0x6d,
0x00, 0x00, 0x00, 0x01, 0x69, 0x73, 0x6f, 0x6d, 0x61, 0x76, 0x63, 0x31,
0x00, 0x00, 0x02, 0xd1, 0x6d, 0x6f, 0x6f, 0x76, 0x00, 0x00, 0x00, 0x6c,
0x6d, 0x76, 0x68, 0x64, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x49, 0x73, 0xf8,
0xc8, 0x4a, 0xc5, 0x7a, 0x00, 0x00, 0x02, 0x58, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
@@ -572,31 +519,31 @@ uint8_t media_libstagefright_gtest_video
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6d, 0x76, 0x65,
0x78, 0x00, 0x00, 0x00, 0x10, 0x6d, 0x65, 0x68, 0x64, 0x00, 0x00, 0x00,
0x00, 0x00, 0x05, 0x76, 0x18, 0x00, 0x00, 0x00, 0x20, 0x74, 0x72, 0x65,
0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x03, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
0x00
};
-const uint32_t media_libstagefright_gtest_video_init_mp4_len = 745;
+const uint32_t media_gtest_video_init_mp4_len = 745;
TEST(stagefright_MP4Metadata, EmptyCTTS)
{
- RefPtr<MediaByteBuffer> buffer = new MediaByteBuffer(media_libstagefright_gtest_video_init_mp4_len);
- buffer->AppendElements(media_libstagefright_gtest_video_init_mp4, media_libstagefright_gtest_video_init_mp4_len);
+ RefPtr<MediaByteBuffer> buffer = new MediaByteBuffer(media_gtest_video_init_mp4_len);
+ buffer->AppendElements(media_gtest_video_init_mp4, media_gtest_video_init_mp4_len);
RefPtr<BufferStream> stream = new BufferStream(buffer);
MP4Metadata::ResultAndByteBuffer metadataBuffer =
MP4Metadata::Metadata(stream);
EXPECT_EQ(NS_OK, metadataBuffer.Result());
EXPECT_TRUE(metadataBuffer.Ref());
MP4Metadata metadata(stream);
-
+ EXPECT_EQ(metadata.Parse(), NS_OK);
EXPECT_EQ(1u, metadata.GetNumberTracks(TrackInfo::kVideoTrack).Ref());
MP4Metadata::ResultAndTrackInfo track = metadata.GetTrackInfo(TrackInfo::kVideoTrack, 0);
EXPECT_TRUE(track.Ref() != nullptr);
// We can seek anywhere in any MPEG4.
EXPECT_TRUE(metadata.CanSeek());
EXPECT_FALSE(metadata.Crypto().Ref()->valid);
}