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