Index: media/formats/webm/webm_tracks_parser_unittest.cc |
diff --git a/media/formats/webm/webm_tracks_parser_unittest.cc b/media/formats/webm/webm_tracks_parser_unittest.cc |
index 0f8e3515c3828f5599bc0ce6d685f84a0de54d4d..b81aa2173f0bfe79e1827f0cc797b2bdf4186f8e 100644 |
--- a/media/formats/webm/webm_tracks_parser_unittest.cc |
+++ b/media/formats/webm/webm_tracks_parser_unittest.cc |
@@ -3,6 +3,7 @@ |
// found in the LICENSE file. |
#include "base/logging.h" |
+#include "media/base/channel_layout.h" |
#include "media/formats/webm/tracks_builder.h" |
#include "media/formats/webm/webm_constants.h" |
#include "media/formats/webm/webm_tracks_parser.h" |
@@ -15,6 +16,8 @@ using ::testing::_; |
namespace media { |
+static const double kDefaultTimecodeScaleInUs = 1000.0; // 1 ms resolution |
+ |
class WebMTracksParserTest : public testing::Test { |
public: |
WebMTracksParserTest() {} |
@@ -47,8 +50,7 @@ TEST_F(WebMTracksParserTest, SubtitleNoNameNoLang) { |
InSequence s; |
TracksBuilder tb; |
- tb.AddTrack(1, kWebMTrackTypeSubtitlesOrCaptions, 1, |
- kWebMCodecSubtitles, "", ""); |
+ tb.AddTextTrack(1, 1, kWebMCodecSubtitles, "", ""); |
const std::vector<uint8> buf = tb.Finish(); |
VerifyTextTrackInfo(&buf[0], buf.size(), kTextSubtitles, "", ""); |
@@ -58,8 +60,7 @@ TEST_F(WebMTracksParserTest, SubtitleYesNameNoLang) { |
InSequence s; |
TracksBuilder tb; |
- tb.AddTrack(1, kWebMTrackTypeSubtitlesOrCaptions, 1, |
- kWebMCodecSubtitles, "Spock", ""); |
+ tb.AddTextTrack(1, 1, kWebMCodecSubtitles, "Spock", ""); |
const std::vector<uint8> buf = tb.Finish(); |
VerifyTextTrackInfo(&buf[0], buf.size(), kTextSubtitles, "Spock", ""); |
@@ -69,8 +70,7 @@ TEST_F(WebMTracksParserTest, SubtitleNoNameYesLang) { |
InSequence s; |
TracksBuilder tb; |
- tb.AddTrack(1, kWebMTrackTypeSubtitlesOrCaptions, 1, |
- kWebMCodecSubtitles, "", "eng"); |
+ tb.AddTextTrack(1, 1, kWebMCodecSubtitles, "", "eng"); |
const std::vector<uint8> buf = tb.Finish(); |
VerifyTextTrackInfo(&buf[0], buf.size(), kTextSubtitles, "", "eng"); |
@@ -80,8 +80,7 @@ TEST_F(WebMTracksParserTest, SubtitleYesNameYesLang) { |
InSequence s; |
TracksBuilder tb; |
- tb.AddTrack(1, kWebMTrackTypeSubtitlesOrCaptions, 1, |
- kWebMCodecSubtitles, "Picard", "fre"); |
+ tb.AddTextTrack(1, 1, kWebMCodecSubtitles, "Picard", "fre"); |
const std::vector<uint8> buf = tb.Finish(); |
VerifyTextTrackInfo(&buf[0], buf.size(), kTextSubtitles, "Picard", "fre"); |
@@ -91,10 +90,8 @@ TEST_F(WebMTracksParserTest, IgnoringTextTracks) { |
InSequence s; |
TracksBuilder tb; |
- tb.AddTrack(1, kWebMTrackTypeSubtitlesOrCaptions, 1, |
- kWebMCodecSubtitles, "Subtitles", "fre"); |
- tb.AddTrack(2, kWebMTrackTypeSubtitlesOrCaptions, 2, |
- kWebMCodecSubtitles, "Commentary", "fre"); |
+ tb.AddTextTrack(1, 1, kWebMCodecSubtitles, "Subtitles", "fre"); |
+ tb.AddTextTrack(2, 2, kWebMCodecSubtitles, "Commentary", "fre"); |
const std::vector<uint8> buf = tb.Finish(); |
scoped_ptr<WebMTracksParser> parser(new WebMTracksParser(LogCB(), true)); |
@@ -119,4 +116,70 @@ TEST_F(WebMTracksParserTest, IgnoringTextTracks) { |
EXPECT_EQ(parser->text_tracks().size(), 2u); |
} |
+TEST_F(WebMTracksParserTest, AudioVideoDefaultDurationUnset) { |
+ // Other audio/video decoder config fields are necessary in the test |
+ // audio/video TrackEntry configurations. This method does only very minimal |
+ // verification of their inclusion and parsing; the goal is to confirm |
+ // TrackEntry DefaultDuration defaults to -1 if not included in audio or |
+ // video TrackEntry. |
+ TracksBuilder tb; |
+ tb.AddAudioTrack(1, 1, "A_VORBIS", "audio", "", -1, 2, 8000); |
+ tb.AddVideoTrack(2, 2, "V_VP8", "video", "", -1, 320, 240); |
+ const std::vector<uint8> buf = tb.Finish(); |
+ |
+ scoped_ptr<WebMTracksParser> parser(new WebMTracksParser(LogCB(), true)); |
+ int result = parser->Parse(&buf[0], buf.size()); |
+ EXPECT_LE(0, result); |
+ EXPECT_EQ(static_cast<int>(buf.size()), result); |
+ |
+ EXPECT_EQ(kNoTimestamp(), |
+ parser->GetAudioDefaultDuration(kDefaultTimecodeScaleInUs)); |
+ EXPECT_EQ(kNoTimestamp(), |
+ parser->GetVideoDefaultDuration(kDefaultTimecodeScaleInUs)); |
+ |
+ const VideoDecoderConfig& video_config = parser->video_decoder_config(); |
+ EXPECT_TRUE(video_config.IsValidConfig()); |
+ EXPECT_EQ(320, video_config.coded_size().width()); |
+ EXPECT_EQ(240, video_config.coded_size().height()); |
+ |
+ const AudioDecoderConfig& audio_config = parser->audio_decoder_config(); |
+ EXPECT_TRUE(audio_config.IsValidConfig()); |
+ EXPECT_EQ(CHANNEL_LAYOUT_STEREO, audio_config.channel_layout()); |
+ EXPECT_EQ(8000, audio_config.samples_per_second()); |
+} |
+ |
+TEST_F(WebMTracksParserTest, AudioVideoDefaultDurationSet) { |
+ // Confirm audio or video TrackEntry DefaultDuration values are parsed, if |
+ // present. |
+ TracksBuilder tb; |
+ tb.AddAudioTrack(1, 1, "A_VORBIS", "audio", "", 12345678, 2, 8000); |
+ tb.AddVideoTrack(2, 2, "V_VP8", "video", "", 987654321, 320, 240); |
+ const std::vector<uint8> buf = tb.Finish(); |
+ |
+ scoped_ptr<WebMTracksParser> parser(new WebMTracksParser(LogCB(), true)); |
+ int result = parser->Parse(&buf[0], buf.size()); |
+ EXPECT_LE(0, result); |
+ EXPECT_EQ(static_cast<int>(buf.size()), result); |
+ |
+ EXPECT_EQ(base::TimeDelta::FromMicroseconds(12000), |
+ parser->GetAudioDefaultDuration(kDefaultTimecodeScaleInUs)); |
+ EXPECT_EQ(base::TimeDelta::FromMicroseconds(985000), |
+ parser->GetVideoDefaultDuration(5000.0)); // 5 ms resolution |
+ EXPECT_EQ(kNoTimestamp(), parser->GetAudioDefaultDuration(12346.0)); |
+ EXPECT_EQ(base::TimeDelta::FromMicroseconds(12345), |
+ parser->GetAudioDefaultDuration(12345.0)); |
+ EXPECT_EQ(base::TimeDelta::FromMicroseconds(12003), |
+ parser->GetAudioDefaultDuration(1000.3)); // 1.0003 ms resolution |
+} |
+ |
+TEST_F(WebMTracksParserTest, InvalidZeroDefaultDurationSet) { |
+ // Confirm parse error if TrackEntry DefaultDuration is present, but is 0ns. |
+ TracksBuilder tb(true); |
+ tb.AddAudioTrack(1, 1, "A_VORBIS", "audio", "", 0, 2, 8000); |
+ const std::vector<uint8> buf = tb.Finish(); |
+ |
+ scoped_ptr<WebMTracksParser> parser(new WebMTracksParser(LogCB(), true)); |
+ EXPECT_EQ(-1, parser->Parse(&buf[0], buf.size())); |
+} |
+ |
} // namespace media |