diff --git a/media/libstagefright/gtest/TestParser.cpp b/media/libstagefright/gtest/TestParser.cpp new file mode 100644 index 000000000000..9f5197627060 --- /dev/null +++ b/media/libstagefright/gtest/TestParser.cpp @@ -0,0 +1,64 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "gtest/gtest.h" +#include "MediaData.h" +#include "mp4_demuxer/BufferStream.h" +#include "mp4_demuxer/MP4Metadata.h" +#include "mp4_demuxer/MoofParser.h" + +using namespace mozilla; +using namespace mp4_demuxer; + +TEST(stagefright_MP4Metadata, EmptyStream) +{ + nsRefPtr buffer = new MediaByteBuffer(0); + nsRefPtr stream = new BufferStream(buffer); + + EXPECT_FALSE(MP4Metadata::HasCompleteMetadata(stream)); + nsRefPtr metadataBuffer = MP4Metadata::Metadata(stream); + EXPECT_FALSE(metadataBuffer); + + MP4Metadata metadata(stream); + EXPECT_EQ(0u, metadata.GetNumberTracks(TrackInfo::kUndefinedTrack)); + EXPECT_EQ(0u, metadata.GetNumberTracks(TrackInfo::kAudioTrack)); + EXPECT_EQ(0u, metadata.GetNumberTracks(TrackInfo::kVideoTrack)); + EXPECT_EQ(0u, metadata.GetNumberTracks(TrackInfo::kTextTrack)); + EXPECT_EQ(0u, metadata.GetNumberTracks(static_cast(-1))); + EXPECT_FALSE(metadata.GetTrackInfo(TrackInfo::kUndefinedTrack, 0)); + EXPECT_FALSE(metadata.GetTrackInfo(TrackInfo::kAudioTrack, 0)); + EXPECT_FALSE(metadata.GetTrackInfo(TrackInfo::kVideoTrack, 0)); + EXPECT_FALSE(metadata.GetTrackInfo(TrackInfo::kTextTrack, 0)); + EXPECT_FALSE(metadata.GetTrackInfo(static_cast(-1), 0)); + // We can seek anywhere in any MPEG4. + EXPECT_TRUE(metadata.CanSeek()); + EXPECT_FALSE(metadata.Crypto().valid); +} + +TEST(stagefright_MoofParser, EmptyStream) +{ + nsRefPtr buffer = new MediaByteBuffer(0); + nsRefPtr stream = new BufferStream(buffer); + + mozilla::Monitor monitor("MP4Metadata::gtest"); + mozilla::MonitorAutoLock mon(monitor); + MoofParser parser(stream, 0, false, &monitor); + EXPECT_EQ(0u, parser.mOffset); + EXPECT_TRUE(parser.ReachedEnd()); + + nsTArray byteRanges; + byteRanges.AppendElement(MediaByteRange(0, 0)); + EXPECT_FALSE(parser.RebuildFragmentedIndex(byteRanges)); + + EXPECT_TRUE(parser.GetCompositionRange(byteRanges).IsNull()); + EXPECT_TRUE(parser.mInitRange.IsNull()); + EXPECT_EQ(0u, parser.mOffset); + EXPECT_TRUE(parser.ReachedEnd()); + EXPECT_FALSE(parser.HasMetadata()); + nsRefPtr metadataBuffer = parser.Metadata(); + EXPECT_FALSE(metadataBuffer); + EXPECT_TRUE(parser.FirstCompleteMediaSegment().IsNull()); + EXPECT_TRUE(parser.FirstCompleteMediaHeader().IsNull()); +} diff --git a/media/libstagefright/gtest/moz.build b/media/libstagefright/gtest/moz.build index 070d82b4536c..02f1d59565de 100644 --- a/media/libstagefright/gtest/moz.build +++ b/media/libstagefright/gtest/moz.build @@ -8,6 +8,7 @@ Library('stagefright_gtest') SOURCES += [ 'TestInterval.cpp', + 'TestParser.cpp', ] if CONFIG['MOZ_RUST']: