Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(744)

Unified Diff: media/formats/webm/webm_tracks_parser_unittest.cc

Issue 213153008: MSE: Parse WebM TrackEntry DefaultDuration field (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixes lint err (c-style cast). Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/formats/webm/webm_tracks_parser.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « media/formats/webm/webm_tracks_parser.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698